12 de maio de 2012

Transferência do Blog

Boa noite!!! 

É com muita satisfação que notifico-lhes que o site Sabinux foi migrado com sucesso para abaixo da hierarquia da Sabti (minha empresa corporativa de consultoria).


Acesse o novo blog!

http://blog.sabti.com.br - Blog Corporativo

6 de abril de 2012

Recuperando GRUB

Um dos acontecimentos mais frequentes com os usuários de dual boot é a "perca" do Grub. Um usuário tem dois sistemas operacionais, Windows e Ubuntu. Isso acontece quando você precisa, por exemplo, formatar seu velho e defeituoso Windows, que ao ser reinstalado apaga a MBR, local onde é guardada informações do disco como ordem de boot, partições etc.

O nosso GRUB fica localizado na MBR, então para recuperá-lo de forma simples e fácil siga as instruções a seguir:

Você vai precisar de um CD-Live (no meu caso utilizei a versão 9.04 do Ubuntu).

Depois de carregado o Live-CD, entre no seu terminal e digite os comandos a seguir:

1. Verificando a partição referente ao seu GNU/LINUX:

$ sudo fdisk -l

(caso esteja utilizando outro SO que não o Ubuntu, faça o login como ROOT)

2. Vamos montar o seu sistema de arquivos na sua partição GNU/Linux no diretório /mnt.

$ sudo mount -t ext4 /dev/sda6 /mnt

Neste caso o meu sistema de arquivos é EXT4 e a minha partição Linux é a sda6, troque esses campos conforme a sua configuração.

3. Instalação do Grub:

$ sudo grub-install --root-directory=/mnt /dev/sda

Fim. Fácil não? =D

Bem pessoal, é isso! Espero ter ajudado, qualquer coisa estamos aí.

25 de março de 2012

ifconfig vs ip

Recentemente, estou tentando utilizar o ip ao invés do ifconfig. Por isso, fiz esse resumo:


[LIST]
ifconfig
ip addr show
ip link show


[UP]
ifconfig eth0 up
ip link set eth0 up


[DOWN]
ifconfig eth0 down
ip link set eth0 down


[SET BASIC]
ifconfig eth0 192.168.150.12
ip address add 192.168.150.12 dev eth0


[SET FULLY]
ifconfig eth0 192.168.1.14 netmask 255.255.255.0 broadcast 192.168.1.255
ip addr add 192.168.1.14/24 broadcast 192.168.1.255 dev eth0


[DEL]
O ifconfig não possui essa opção.
ip addr del 192.168.1.14/24 dev eth0


[ALIAS]
ifconfig eth0:1 10.0.0.1/8
ip addr add 10.0.0.1/8 dev eth0 label eth0:1





É isso pessoal! O ifconfi está deprecated, provavelmente daqui a uns anos não existirá mais. Por isso, é interessante aprender a utilizar o ip.

Consulta Operadora

Descobri um site que presta um serviço bem útil e interessante.

Precisar descobrir qual operadora possui aquela linha? Ou se aquela é linha é da sua operadora?

18 de fevereiro de 2012

SAN - Conceitos Básicos


Software EMC pro storage: EMC PowerLink

Software Hitachi pro storage: Hitachi HDLM

HBA – Host bus adapter – Uma espécie de switch que intermedia Storage e Linux.

FA – Fibre adapter - São as saídas finais físicas do storage onde as fibras estão conectadas.

LUN – Seria absolutamente o espaço em disco. A unidade básica do storage, onde concentram-se a informação propriamente dita. O id dá LUN se dá por um código em hexadecimal de 4 caracteres.

MV – Masking View é um conjunto de informações, ou seja, IG+PG+SG

IG – Inittiate group – Id de identificação do linux até a hba, seriam as wwns que estão localizados nos port_name do /sys.

PG - Port Group - Grupo de FA´s que estão conectadas storage. Cada grupo possui um id.

SG – Storage Group – Grupo de storage. Seria o grupo de LUNs que perfazem um projeto.

Drivers HBA


Hoje, iremos aprender a como atualizar o driver da HBA, que nada mais é que um adaptador para que uma máquina chegue até um storage, sendo este um storage EMC, Hitachi ou qualquer outro.


Como a HBA, é um hardware, ela necessita de um conjunto de softwares para ser reconhecida pelo SO. Por esta razão que devemos instalar o driver, firmware, bios, etc da HBA.

É claro que existem drivers e firmwares genéricos, mas desta forma, provavelmente você perderia em performance. E se estamos trabalhando com FC Hosts, não queremos perder nada.


O procedimento em si é simples. Da mesma forma que instalamos o firefox na nossa máquina. Vamo que vamo!



Procedimento de instalação Drivers da HBA
  1. Conecte ao servidor via ssh
  2. yum install libnl -y
  3. Providenciar o pacote no site da emulex: elx-lpfc-dd-rhel5-8.2.0.96.tar.gz
  4. Providenciar o pacote no site da emulex: elxocmcore-rhel5-rhel6-5.1.42.3-1.tar.gz
  5. tar -zxvf elxocmcore-rhel5-rhel6-5.1.42.3-1.tar.gz
  6. cd elxocmcore-rhel5-rhel6-5.1.42.3-1
  7. ./install.sh
  8. cd ..
  9. tar -zxvf elx-lpfc-dd-rhel5-8.2.0.96.tar.gz
  10. cd elx-lpfc-dd-rhel5-8.2.0.96
  11. ./elx_lpfc_install.sh


    Esse script serve para servidores red hat 5.x. Dentro desses pacotes, existem drivers para red hats 5 e 6, porém só testei com red hat 5.

    Dentro desse pacote, também há drivers para todos os kernels 2.6.18. Além disso, há pacotes para todas as arquiteturas (Intel, Power, alpha, Itanium, etc).



Atualização de firmware e bios HBA

Hoje, iremos aprender a como atualizar o firmware da HBA, que nada mais é que um adaptador para que uma máquina chegue até um storage, sendo este um storage EMC, Hitachi ou qualquer outro.


Como a HBA, é um hardware, ela necessita de um conjunto de softwares para ser reconhecida pelo SO. Por esta razão que devemos instalar o driver, firmware, bios, etc da HBA.

É claro que existem drivers e firmwares genéricos, mas desta forma, provavelmente você perderia em performance. E se estamos trabalhando com FC Hosts, não queremos perder nada.


O procedimento em si é simples. Da mesma forma que instalamos o firefox na nossa máquina. Vamo que vamo!




Procedimento para atualização de FIRMWARE ou BIOS da HBA via X

1. Conecte na máquina via ssh

2. yum -y install libnl

3. cd /root

4. Providenciar o pacote elxocm-rhel5-sles10-5.0.53.7-1.tgz

5. chmod 644 /root/elxocm-rhel5-sles10-5.0.53.7-1.tgz

6. tar -zxpvf elxocm-rhel5-sles10-5.0.53.7-1.tgz

7. cd /root/elxocm-rhel5-sles10-5.0.53.7-1; expect -c "set timeout 300; spawn ./install.sh; expect \"Enter the number\"; send \"1\n\"; expect \"Enter the letter\"; send \"y\n\"; interact"

8. export DISPLAY="Ip_da_sua_maquina:0"

9:cd /usr/sbin/hbanyware/

10../ocmanager


É necessário algum software que encaminhe a saída da tela do servidor para a sua tela. Por exemplo: Xming ou reflection

É necessário ter o arquivo de firmware no /usr/sbin/hbanyware/RMRepository


Após aparecer uma tela do hbanyware, clique na PORT WWN. Após isso clique na aba “Maintenance”.

Depois, clique em “Update Firmware”. Insira o Firmware desejado e confirme clicando em “Start Download”.


FAÇA O MESMO PROCEDIMENTO EM TODAS AS PORTS WWNs


11. Realize o reboot da máquina.


Para realizar upgrade: Selecione uma versão posterior
Para realizar o downgrade: Selecione uma versão anterior













Procedimento para atualização de FIRMWARE da HBA via Shell


1. Conecte na máquina via ssh

2. yum -y install libnl

3. cd /root

4. Providenciar o pacote elxocm-rhel5-sles10-5.0.53.7-1.tgz

5. chmod 644 /root/elxocm-rhel5-sles10-5.0.53.7-1.tgz

6. tar -zxpvf elxocm-rhel5-sles10-5.0.53.7-1.tgz

7. cd /root/elxocm-rhel5-sles10-5.0.53.7-1; expect -c "set timeout 300; spawn ./install.sh; expect \"Enter the number\"; send \"1\n\"; expect \"Enter the letter\"; send \"y\n\"; interact"

8. cd /usr/sbin/hbanyware/RMRepository

9. Copiar para a máquina atual a versão de fimware desejada via scp pela porta 22. Caminho: 125.255.46.73//export/repo/files/san/HBA/firmware/

10. cd /usr/sbin/hbanyware/

11. ./hbacmd ListHBAs

OBS: Obtenha os endereços dos Port WWNs

12. Visualização de firmware e bios atuais
./hbacmd LoadList Port_WWN

13. Carregando o firmware aser aplicado
./hbacmd Download Port_WWN /usr/sbin/hbanyware/firmware/version.all

14. reboot


Repita isso em todas as WWNs.

15 de fevereiro de 2012

CACTI e o rrdtool - para Red hats

RRDTool é um sistema de base de dados round-robin criado por Tobias Oetiker sob licença GNU GPL. Foi desenvolvido para armazenar séries de dados numéricos sobre o estado de redes de computadores, porém pode ser empregado no armazenamento de qualquer outra série de dados como temperatura, uso de CPU, etc. RRD é um modo abreviado de se referir a Round Robin Database (base de dados round-robin).

A base de dados gerada possui um tamanho máximo o qual uma vez atingido não é ultrapassado. Os dados numéricos armazenados são consolidados conforme a configuração fornecida, de modo que a resolução deles seja reduzida de acordo com o tempo que eles estão armazenados. Neste processo, apenas as médias dos valores antigos são armazenados.

O RRDTool também pode produzir gráficos que permitem ter uma idéia visual dos dados armazenados, os quais podem ser utilizados ou exibidos por outros sistemas. A ferramenta Cacti é um exemplo disso.



Instalando Dependências
# yum install cairo-devel libxml2-devel pango-devel pango libpng-devel freetype freetype-devel libart_lgpl-devel 


Instalando o rrdtool
Faça o download do pacote em: http://www.4shared.com/archive/yp9CIl7N/rrdtool-131tar.html
 

# mv rrdtool.tar.gz /opt
# export PKG_CONFIG_PATH=/usr/lib/pkgconfig/
# tar -zxvf rrdtool.tar.gz
# cd /opt/rrdtool
# ./configure
# ./make
# ./make install
# cd /usr/local
# ln -s rrdtool-1.3.1 rrdtool
# cd /usr/local/rrdtool/share/rrdtool/examples/
# ./stripes.pl
# cp stripes.png /var/www/html  

3 de fevereiro de 2012

Sed


O que é?
O Sed é um editor de textos não interativo.
Ele pode editar automaticamente, sem interação do usuário, vários arquivos seguindo um conjunto de regras especificadas.


O que significa a palavra Sed
Vem do inglês "Stream EDitor", ou seja, editor de fluxos (de texto).


Como saber se devo usar o Sed
Sendo um editor de textos não interativo, o Sed é excelente para desempenhar algumas tarefas, mas em outras seu uso não é aconselhado.


Quando usar o Sed
A característica principal do Sed é poder editar arquivos automaticamente.

Então sempre que você precisar fazer alterações sistemáticas em vários arquivos, o Sed é uma solução eficaz.

Por exemplo, você tem um diretório cheio de relatórios de vendas, e descobriu que por um erro na geração, todas as datas saíram erradas, com o ano de 1999 onde era para ser 2000. Num editor de textos normal, você tem que abrir os relatórios um por um e alterar o ano em todas as ocorrências.

Certo, isso não é tão complexo se o editor de textos possuir uma ferramenta de procura e troca, também chamado de substituição.

Mas então suponhamos que o erro da data não seja o ano, e sim o formato, tendo saído como mm/dd/aaaa quando deveria ser dd/mm/aaaa. Aqui não é uma substituição e sim uma troca de lugares, e uma ferramenta simples de procura e troca não poderá ajudar.

Esse é um caso típico onde o Sed mostra seu poder: alterações complexas em vários arquivos.

Utilizando o Sed, a solução para este problema (que veremos adiante) é até simples, bastando definir uma série de regras de procura e troca, e o programa se encarregará de executá-las e arrumar os relatórios.


Quando não usar o Sed
Nenhuma ferramenta é ideal para todas as tarefas, e o Sed não é uma exceção à regra.

Edição genérica de textos
Ele não é prático para ser utilizado como editor de textos de uso genérico.

Para escrever textos, ou alterar coisas simples, é mais rápido e fácil abrir um editor de textos interativo como o vi ou o emacs e fazer a alteração "na mão".

Programação avançada
O Sed não é uma linguagem de programação completa, pois não possui variáveis, funções matemáticas, interação com o sistema operacional, entre outras limitações. Mas bem, ele é um manipulador de texto e não uma linguagem de uso geral.

Algumas estruturas complexas podem ser simuladas com alguma técnica, mas se o seu programa em Sed começou a inchar muito, é aconselhável reescrevê-lo numa linguagem com mais recursos, como o perl.


Como ele funciona
O Sed funciona como um filtro, por onde você passa um texto X e ele joga na saída um texto Y.

O texto X virou Y seguindo algumas regrinhas que você determinou.

Pense no Sed como um processador de alimentos, dependendo da lâmina utilizada, a batata sai cortada de uma maneira diferente :)

o Sed funciona como um filtro, ou conversor.

o Sed é orientado a linha, de cima para baixo, da esquerda para a direita.

o Sed lê uma linha da entrada padrão (STDIN) ou de um arquivo especificado, aplica os comandos de edição e mostra o resultado na saída padrão (STDOUT). vai para a próxima linha e repete o processo.

o Sed aceita endereços para os comandos.

o Sed aplica os comandos para todas as linhas caso um endereço não seja especificado.

o Sed faz uso intensivo de expressões regulares.


Sua sintaxe
A sintaxe genérica de um comando Sed é:

sed [opções] regras [arquivo]

Sendo que regras tem a forma genérica de:

[endereço1 [, endereço2]] comando [argumento]

Exemplo
Como notação tradicional, o que está [entre colchetes] é opcional, então a sintaxe Sed mais simples que existe é sed regra como em:

prompt$ cat texto.txt | sed p

Ou seja, o Sed lendo da entrada padrão o conteúdo do arquivo texto.txt via duto |, aplica o comando p para todas as linhas do arquivo, ou seja, as duplica.

0.2.2. Outros exemplos
Um outro exemplo do Sed com opções e recebendo um arquivo como parâmetro seria:

prompt$ sed -n p texto.txt

E ainda, agora especificando um endereço para o comando p:

prompt$ sed -n 5p texto.txt

Ou seja, este comando imprime apenas a linha 5 do texto.txt



Tornando arquivos Sed executáveis
O interpretador de comandos mais utilizado (bash) sempre procura na primeira linha de um arquivo instruções para executá-lo.

Se um arquivo é um programinha em shell, basta colocar

#!/bin/sh

Na primeira linha para que o bash saiba que deve executá-lo com o comando /bin/sh. O mesmo funciona para qualquer outro interpretador, como o Sed. então para tornar um arquivos de comandos Sed executável basta colocar como primeira linha:

#!/bin/sed -f

E é claro, torná-lo executável:

prompt$ chmod +x programa.sed

E na linha de comando, chame-o normalmente:

prompt$ ./programa.sed texto.txt
prompt$ cat texto.txt | ./programa.sed



Descrição de todos os comandos
prompt$ man sed
prompt$ pinfo sed

Ou num resumo rápido:

Legenda:

[ARQUIVO] arquivo ou fluxo de texto (via pipe) original a ser modificado
[TEXTO] trecho de texto. pode ser uma palavra, uma linha,
várias separadas por \n, ou mesmo um vazio.
[PADRÃO] [TEXTO] contido no ESPAÇO PADRÃO


= imprime o número da linha atual do [ARQUIVO]
# inicia um comentário
! inverte a lógica do comando
; separador de comandos
, separador de faixas de endereço
{ início de bloco de comandos
} fim de bloco de comandos

s substitui um trecho de texto por outro
y traduz um caractere por outro

i insere um texto antes da linha atual
c troca a linha atual por um texto
a anexa um texto após a linha atual

g restaura o [TEXTO] contido no ESPAÇO RESERVA (sobrescrevendo)
G restaura o [TEXTO] contido no ESPAÇO RESERVA (anexando)
h guarda o [PADRÃO] no ESPAÇO RESERVA (sobrescrevendo)
H guarda o [PADRÃO] no ESPAÇO RESERVA (anexando)
x troca os conteúdos dos ESPAÇO PADRÃO e RESERVA

p imprime o [PADRÃO]
P imprime a primeira linha do [PADRÃO]
l imprime o [PADRÃO] mostrando caracteres brancos

r inclui conteúdo de um arquivo antes da linha atual
w grava o [PADRÃO] num arquivo

: define uma marcação
b pula até uma marcação
t pula até uma marcação, se o último s/// funcionou (condicional)

d apaga o [PADRÃO]
D apaga a primeira linha do [PADRÃO]
n vai para a próxima linha
N anexa a próxima linha no [PADRÃO]
q finaliza o Sed imediatamente



Lista de todos os comandos por categoria
informações =
marcadores :
comentários #
comandos de edição s i c a y
comandos de registradores g G h H x
comandos de impressão p P l
comandos de arquivo r w
modificadores g i !
separadores ; -e \n
controle de fluxo b t d D n N q
endereço // ,
limitadores {} \(\)
registradores dinâmicos \1 \2 ... \9





Sed e shell
Com o Sed sendo invocado na linha de comando, deve-se ter alguns cuidados para evitar transtornos. O interpretador de comandos (shell), interpreta a linha de comando antes de processá-la, então alguns caracteres especiais como $, \ e !, são interpretados pelo shell antes de chegarem ao Sed, modificando o comportamento esperado.

Para evitar isso coloque os comandos Sed sempre entre aspas simples:

prompt$ sed 's/isso/aquilo/' texto.txt

Salvo quando no meio do comando Sed, existir algo que deva ser interpretado, como uma variável por exemplo. Neste caso coloque os comandos entre aspas duplas:

prompt$ sed "s/$HOME/aquilo/" texto.txt

Ou ainda, para evitar completamente a interpretação do shell, sem se preocupar com aspas, coloque os comandos Sed num arquivo. Veja o tópico Colocando comandos Sed num arquivo.



Usando outros delimitadores
No comando s
É comum ao fazer um comando de substituição s/// conter uma / num dos dois lados do comando, como quando querendo substituir /usr/local/bin por /usr/bin.

Sendo a barra o delimitador do comando s as outras barras comuns devem ser escapadas com a barra invertida \, para não serem confundidas com os delimitadores normais, ficando o monstro a seguir:

prompt$ sed 's/\/usr\/local\/bin/\/usr\/bin/' texto.txt

Para evitar ter que ficar se escapando todas estas barras, basta lembrar que o comando s aceita qualquer delimitador, sendo a barra apenas um padrão de referências históricas. Então, neste caso, poderíamos escolher outro delimitador como por exemplo a vírgula:

prompt$ sed 's,/usr/local/bin,/usr/bin,' texto.txt

Evitando-se de ter que ficar escapando as barras. A mesma dica vale para o comando y.


E se precisássemos apagar as linhas que contém o /usr/local/bin? Teríamos que colocar o nome do diretório no endereço do comando d, voltando com a festa dos escapes:

prompt$ sed '/\/usr\/local\/bin/d' texto.txt

Para usarmos outro delimitador no endereço, basta escaparmos o primeiro, que no caso abaixo é a vírgula:

prompt$ sed '\,/usr/local/bin,d' texto.txt

Confusão de delimitadores com o texto a ser procurado é muito comum de acontecer, então se algo não está funcionando como deveria, olhe com cuidado para ver se não há conflitos entre eles.


Gravando o resultado no mesmo arquivo
Problema inicial
O procedimento comum quando se quer gravar num arquivo o resultado de um comando Sed, é o redirecionamento:

prompt$ sed 'comando' texto.txt > texto-alterado.txt

Mas é muito comum, ao alterarmos um arquivo, queremos gravar estas alterações no próprio arquivo original. A tentativa intuitiva seria:

prompt$ sed 'comando' texto.txt > texto.txt

Mas é só fazer para ver. Além de não dar certo, você ainda perderá todo o conteúdo do arquivo.

Isso acontece porque ao fazer o redirecionamento >, o shell abre imediatamente o arquivo referenciado, antes mesmo de começar a executar o comando Sed. E como este é um redirecionamento destrutivo > e não incremental >>, se o arquivo já existir, ele será truncado, e seu conteúdo perdido. A essa altura, o Sed começará seu processamento já lendo um arquivo texto.txt vazio, e aplicados qualquer comandos Sed num arquivo vazio, o resultado será o próprio arquivo vazio.


Solução genérica
Para evitar isso, voltamos a primeira tática de gravar o resultado num outro arquivo, e depois o mais natural é mover o arquivo novo sobre o original:

prompt$ sed 'comando' texto.txt > texto-alterado.txt
prompt$ mv texto-alterado.txt texto.txt

Para a grande maioria dos casos, isso é suficiente, mas convém aqui lembrar que caso o arquivo 'texto.txt' possua atributos especiais, grupo diferente do padrão do usuário, ou referências (links, simbólicos ou não) para outros arquivos, tudo isso será perdido. Ao mover o arquivo recém-criado, com os atributos padrão do sistema, sobre o original, este perderá seus atributos e ficará com os padrões do sistema, herdado do arquivo novo.


Solução segura
Para evitar isso, a abordagem mais ortodoxa e segura seria aplicar o comando Sed numa cópia e gravar o resultado no arquivo original via redirecionamento:

prompt$ cp -a texto.txt texto-tmp.txt
prompt$ sed 'comando' texto-tmp.txt > texto.txt
prompt$ rm texto-tmp.txt

Novamente, isso só é necessário com arquivos especiais, senão a solução com o mv pode ser usada. Mas é importante ter em mente esta outra maneira e principalmente saber o porque de utilizá-la, sendo este conhecimento aplicável a qualquer outro comando do sistema que leia e grave arquivos.



Como substituir alguma coisa por uma quebra de linha
No Sed da GNU, a partir da versão 3.02.80(*), foi adicionado o \n como escape válido dos dois lados do comando s///. Com isso a tarefa de colocar cada palavra numa linha isolada, ou seja, trocar espaços em branco por quebras de linha, fica trivial:

prompt$ sed 's/ /\n/g' texto.txt

Mas com outras versões do Sed que não entendem este escape, a quebra de linha deve ser inserida literalmente e deve ser escapada:

prompt$ sed 's/ /\
prompt$ /g' texto.txt

Como curiosidade, a operação inversa, de colocar todas as linhas de um arquivo numa linha só, já é mais trabalhosa e utiliza o conceito de laço:

prompt$ sed ':a;$!N;s/\n/ /g;ta'

(*) veja o tópico Nota sobre os adicionais GNU


Apagando linhas específicas
O comando para apagar linhas é o d.

O único detalhe nesta tarefa é especificar quais linhas você vai querer apagar. Isso está completamente coberto no tópico O endereço.


Como ignorar maiúsculas e minúsculas
O jeito padrão do Sed ser "ignore-case", é dizendo literalmente todas as possibilidades, como em:

prompt$ sed '/[Rr][Oo][Oo][Tt]/d' texto.txt

Para apagar todas as linhas que contêm a palavra root, ROOT, RooT etc.

No Sed da GNU, a partir da versão 3.01-beta1(*), foi adicionado o modificador I no endereço e no comando s///, fazendo com que o comando acima fique mais simples:

prompt$ sed '/root/Id' texto.txt

Ou ainda:

prompt$ sed 's/root/administrador/Ig' texto.txt

(*) veja o tópico Nota sobre os adicionais GNU



Lendo e gravando em arquivos externos
0.4.1. Lendo arquivos
Uma tarefa comum é incluir cabeçalho e rodapé num arquivo qualquer. O Sed possui um comando específico para ler arquivos, o r, então basta(*):

prompt$ sed -e '1r cabecalho.txt' -e '$r rodape.txt' texto.txt

Para incluir o cabeçalho após a linha 1 e incluir o rodapé após a última linha.

(*) a explicação do porquê das opções -e está no tópico Aplicando vários comandos de uma vez.



Gravando arquivos
O comando w grava num arquivo a linha atual, ou melhor, o conteúdo do espaço padrão. Por exemplo, você quer gravar num arquivo o resultado de uma busca por linhas que contêm a palavra estorvo. A solução não-Sed seria:

prompt$ grep 'estorvo' texto.txt > estorvos.txt

Nosso similar em Sed seria:

prompt$ sed '/estorvo/w estorvos.txt' texto.txt

Gravar dados num arquivo também pode servir de espaço auxiliar caso o espaço reserva não seja suficiente. Mas esta é uma opção drástica, não tão flexível. Mais informações sobre o espaço reserva no tópico Conhecendo os registradores internos.


Trocando um trecho de texto por outro
Uma tarefa que parece simples mas confunde, é trocar um trecho de texto, como um parágrafo inteiro por exemplo, por outro trecho, independente do número de linhas de ambos.


Trocar várias linhas por uma
Essa é simples, basta usar o comando c, que "Coloca" um texto no lugar da linha atual. A única complicação é definir o endereço, para aplicar o comando apenas nas linhas desejadas. Por exemplo, vamos colocar uma frase no lugar de uma área de texto pré-formatado num documento HTML. Esta área é delimitada pelos identificadores <pre> e </pre>:

prompt$ sed '/<pre>/,/<\/pre>/c \
prompt$ aqui tinha texto pré-formatado' texto.html

Note que o comando c (assim como o a e o i) exige que o texto que ele recebe como parâmetro esteja na linha seguinte, estando a quebra de linha escapada com a barra invertida \

No Sed da GNU, a partir da versão 3.02a(*), é permitido que se coloque o texto na mesma linha:

prompt$ sed '/<pre>/,/<\/pre>/c aqui tinha texto pré-formatado' texto.html

(*) veja o tópico Nota sobre os adicionais GNU


Trocar várias linhas por outras
Similarmente a trocar por apenas uma linha, pode-se usar o comando c e passar várias linhas para ele. O único detalhe é que todas as linhas devem ser escapadas no final, menos a última:

prompt$ sed '/<pre>/,/<\/pre>/c \
prompt$ aqui tinha texto pré-formatado,\
prompt$ mas eu resolvi tirar.\
prompt$ porque?\
prompt$ porque sim' texto.html

É claro, quando o comando começa a ficar grande desse jeito, é melhor colocá-lo num arquivo. Saiba mais detalhes sobre isso no tópico Colocando comandos sed num arquivo.

Mas melhor ainda é separar o comando Sed do texto, colocando-o num arquivo separado. Assim, quando se precisar alterar este texto, basta editá-lo, sem mudar o comando Sed, e sem precisar ficar colocando \ no final de cada linha.

Supondo que nosso texto explicativo do porquê da retirada do texto pré-formatado foi gravado no arquivo desculpa.txt, utilizaremos o comando r para lê-lo e o comando d para apagar o texto antigo:

prompt$ sed -e '/<\/pre>/r desculpa.txt' -e '/<pre>/,/<\/pre>/d' texto.html

Então acompanhe o que acontece: o primeiro comando será executado apenas na linha </pre> que é o fechamento do trecho, então vamos esquecer dele por enquanto. O segundo comando diz para apagar o trecho desde <pre> até </pre>, então assim que começar o trecho, ele vai apagando, linha por linha.

Ao chegar na linha que contém o </pre>, o primeiro comando Sed entra em ação e lê o arquivo desculpa.txt, colocando seu conteúdo imediatamente após a linha atual. Em seguida, o segundo comando apaga a linha </pre>, completando a tarefa.

Esta segunda solução é mais difícil de entender e implementar, mas é muito mais prática caso a alteração do texto a ser colocado seja freqüente, além destas alterações poderem ser feitas por alguém que nem saiba o que é Sed, pois será apenas um texto normal.

Note que sempre que o </pre> foi referenciado nos endereços, a barra foi escapada, ficando <\/pre>. A explicação desse escape está em Usando outros delimitadores.

obs.: talvez o <pre></pre> não seja um exemplo dos mais didáticos, mas não me veio algo mais comum à mente...


Emulando outros comandos
Aqui vão alguns exemplos de emulações de outros comandos usando-se o Sed:
comando
emulação
cat
sed :
head
sed 10q
grep
sed /padrão/!d
grep -v
sed /padrão/d
tac
sed 1!G;h;$!d
tail -1
sed $!d
tr A-Z a-z
sed y/ABCDEF...UVWXYZ/abcdef...uvwxyz/
wc -l
sed -n $=

Removendo linhas repetidas

Dica rápida!

Retirar linhas repetidas de um arquivo:

sort arquivo.txt | uniq

26 de janeiro de 2012

Fedora Post Install

Com o tempo todos nós nos tornamos um pouco menos pacientes em certos processos da vida com os quais convivemos sempre.

Você ama formatar máquina. OK. Cinco anos fazendo isso, e você começa a se cansar do processo em sí ou pelo menos não o faz com tanto vigor se comparado ao desempenho anterior.

Conheço muitos assim e eu particularmente não tenho paciência em ficar executando anti-vírus, realizando varreduras intermináveis ou algo do escopo.


Migrei pro Linux há um razoável tempo, e sempre me senti bem com o tempo que eu economizava não formatando máquinas para voltar à performance inicial de fábrica - como todos fazem com Windows.

Mas, de um tempo para cá veio percebendo que mesmo não formatando a máquina todo semestre, sempre que eu preciso fazer algo do tipo, como por exemplo, mexer em particionamento, instalar um outro SO, etc, -  eu preciso definir tudo de novo: Java, Office, Browser e suas definições e configurações, meu cliente de email, Terminal, sensores de temperatura e clock, etc..etc

Por esta razão, desenvolvi um script para automizar processos de pós instalação do meu Fedora 16, o Umbreon.

O script ainda não está finalizado. Pretendo incluir configurações de aparência de janelas, atalhos de teclado, etc.


De qualquer forma, se quiserem, realizem o download, modifiquem ao seu gosto e o utilizem o quanto quiserem, entretanto sigam as especificações de compartilhamento e liberdade da GPLv2.


DOWNLOAD: http://www.4shared.com/file/DTOTXD-j/kstar.html


17 de janeiro de 2012

CDP - Cisco Discovery Protocol


Conceito
O Cisco Discovery Protocol (CDP) trabalha na layer 2 da camada OSI TCP/IP que funciona independente do meio físico (Ethernet, Frame Relay, …). Além de ser um protocolo como outro qualquer. Utilizado para descobrir informações sobre diversos equipamentos Cisco diretamente conectados. O mesmo está presente em roteadores, switches, APs, firewalls, telefones etc.

Um equipamento com CDP ativado envia mensagens periódicas via multicast, e também recebe as informações dos outros equipamentos. Desta forma é possível descobrir o nome, IP, modelo e a versão do software de um equipamento próximo.

Podemos habilitar o CDP globalmente, e assim os anúncios passarão a ser enviados por todas as interfaces suportadas, ou podemos configurar apenas nas interfaces desejadas. Por padrão o CDP vem habilitado (globalmente), e já faz os anúncios na versão 2. A versão 2 do CDP traz a VLAN nativa, domínio VTP e o modo da porta (duplex/speed) do equipamento diretamente conectado.




Habilitando o CDP globalmente
CiscoGW# conf t 

CiscoGW# cdp run 
CiscoGW(config)# 




Desabilitando o CDP globalmente
CiscoGW# conf t 

CiscoGW# no cdp run 
CiscoGW(config)#




Habilitando anúncios versão 2
CiscoGW(config)#cdp advertise-v2

Desabilitando anúncios versão 2
CiscoGW(config)#no cdp advertise-v2

Habilitando o CDP em uma interface específica
CiscoGW(config)#interface f0/1 

CiscoGW(config-if)#cdp enable


Desabilitando o CDP em uma interface específica
CiscoGW(config)#interface f0/1 

CiscoGW(config-if)#no cdp enable

Os comandos “shows” são os mais importantes/utilizados do CDP, já que a configuração normalmente não sofre alteração.


Verificando o CDP (status padrão)
CiscoGW#show cdp 

Global CDP information: 
        Sending CDP packets every 60 seconds 
        Sending a holdtime value of 180 seconds 
        Sending CDPv2 advertisements is enabled 
CiscoGW#

Verificando o CDP em uma interface específica ( timers padrão)
CiscoGW#show cdp interface gigabitEthernet 1/0/1 

GigabitEthernet1/0/1 is up, line protocol is up 
  Encapsulation ARPA 
  Sending CDP packets every 60 seconds 
  Holdtime is 180 seconds 
CiscoRT01#



Verificando os equipamentos diretamente conectados (sumário)
CiscoGW#show cdp neighbors 

Capability Codes: R – Router, T – Trans Bridge, B – Source Route Bridge 
                  S – Switch, H – Host, I – IGMP, r – Repeater, P – Phone, 
                  D – Remote, C – CVTA, M – Two-port Mac Relay

Device ID        Local Intrfce     Holdtme    Capability       Platform               Port ID 

CiscoSW1        Gig 1/0/48        152              S I            WS-C2960-          Gig 0/2 
CiscoSW8        Gig 1/0/45        121              S I            WS-C2960-          Gig 0/1 
CiscoGW02      Gig 1/0/26        179             R S I          2821                    Gig 0/1 
CiscoGW#



Verificando os equipamentos próximos (detalhado)
CiscoGW#show cdp neighbors detail 

————————- 
Device ID: CiscoSW1 
Entry address(es): 
  IP address: 10.40.20.19
Platform: cisco WS-C2960-24PC-L,  Capabilities: Switch IGMP 
Interface: GigabitEthernet1/0/48,  Port ID (outgoing port): GigabitEthernet0/2 
Holdtime : 158 sec

Version : 

Cisco IOS Software, C2960 Software (C2960-LANBASEK9-M), Version 12.2(50)SE4, RELEASE SOFTWARE (fc1) 
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2010 by Cisco Systems, Inc. 
Compiled Fri 26-Mar-10 09:14 by prod_rel_team

advertisement version: 2 

Protocol Hello:  OUI=0x00000C, Protocol ID=0×0112; payload len=27, value=00000000FFFFFFFF01022501000000000000ECC88212D480FF0000 
VTP Management Domain: ‘bv.com.br’ 
Native VLAN: 100
Duplex: Half
Management address(es): 
  IP address: 10.40.20.19





Além dessa opção, também temos a opção de recolher essas informações a partir do servidor, ou seja, o client do Cisco. Como fazer isso? Analisando o tráfego CDP que vem e vai da porta do CDP.

No Linux:
# tcpdump -nn -v -i eth1 -s 1500 -c 1 'ether[20:2] == 0x2000'





Se por o acaso, não tenha o tcpdump instalado na sua máquina rode:
# apt-get install tcpdump –y ou aptitude install tcpdump –y --> Caso seja um Debian ou derivados
# yum install tcpdump –y  --> Caso seja um Red hat ou derivado
Baixe o source http://www.tcpdump.org/release/tcpdump-4.2.1.tar.gz --> Caso seja outra distro.





Bibliografia-base: