Archive

Archive for the ‘Linux - Comandos’ Category

Linux - Utilizando chkconfig

July 26th, 2010 Marcelo No comments

Linux / Unix Command: chkconfig

Command Library

NAME
chkconfig - updates and queries runlevel information for system services

SYNOPSIS

chkconfig –list [name]
chkconfig –add name
chkconfig –del name
chkconfig [--level levels] name
chkconfig [--level levels] name

.

Categories: Linux, Linux - Comandos Tags:

Linux - Reboot forçado do sistema

June 13th, 2010 Marcelo No comments

1 - Habilitar o SysRq:

# echo 1 > /proc/sys/kernel/sysrq

2 - Utilizar o SysRq para enviar um sinal ao Kernel, solicitando o reboot:

# echo b > /proc/sysrq-trigger

Categories: Linux, Linux - Comandos, Linux - SO Tags:

Unix -Comando tar

May 13th, 2010 Marcelo No comments

O Tar e o gzip são duas ferramentas utilizadas em sistemas operacionais baseados no Unix, como o GNU/Linux, para o “empacotamento” e para a compressão de arquivos, respectivamente. Embora seja perfeitamente possível usar qualquer desses programas de forma individual, a utilização de ambos ao mesmo tempo é muito comum e útil. Sendo assim, que tal aprender a compactar e a descompactar arquivos utilizando Tar e gzip e, conseqüentemente, entender o funcionando dos famosos arquivos de extensão tar.gz

tar [parâmetros] [nome_do_arquivo_tar] [arquivos_de_origem]

Na linha acima, tar é o comando. Em parâmetros, é possível utilizar várias opções. Eis as principais:

-c - cria um novo arquivo tar;
-t - exibe o conteúdo de um arquivo tar;
-p - mantém as permissões originais do(s) arquivo(s);
-r - adiciona arquivos a um arquivo tar existente;
-f - permite especificar o arquivo tar a ser utilizado;
-v - exibe detalhes da operação;
-w - pede confirmação antes de cada ação no comando;
-x - extrai arquivos de um arquivo tar existente;
-z - comprime o arquivo tar resultante com o gzip (visto mais à frente);
-C - especifica o diretório dos arquivos a serem armazenados (note que, neste caso, a letra é maiúscula).
O campo nome_do_arquivo_tar especifica qual o nome que o arquivo .tar terá, e o campo arquivos_de_origem define o diretório ou os arquivos que se tornarão um .tar. Vamos ver alguns exemplos para facilitar a compreensão:

Compactando arquivos:

# tar -cf arquivo_compactado.tar arquico_a_ser_compactado01.txt arquico_a_ser_compactado01.txt

Compactando diretórios e subdiretórios:

# tar -cvf arquivo_compactado.tar /diretorio/

O exemplo a seguir lista o conteúdo do arquivo_compactado.tar:

# tar -tf arquivo_compactado.tar

Extrair apenas um arquivo:

# tar -xvf arquivo_compactado.tar arquivo_a_ser_compactado01.txt

Exemplos:
Compactando e zipando ao mesmo tempo

# tar -cxvf nome_do_arquivo.tar.gz

Descompactando:

# tar -zxvf nome_do_arquivo.tar.gz

Bom uso!

Categories: Linux - Comandos Tags:

Linux - Comando change

March 14th, 2010 Marcelo No comments

Este comando traz informações como: data de validação do password, data de aviso de troca de senha dentre outras.
Senhas shadow devem ser habilitadas para usar o comando chage

# chage “usuário”

Parâmetros

# chage “parâmetro” “usuário”

-m [dias] - Especifique o número mínimo de dias para o usuário alterar a senha. Se o valor é 0, a senha não expira.

-M [dias] – Especifique o número máximo de dias para a validade da senha. Quando o número de dias especificado nesta opção mais o número de dias especificado na opção -d é menor que a data atual, o usuário deve mudar a senha antes de usar a conta.

-d [dias] - Especifique o número de dias em que a senha foi alterada pela última vez, desde 1o de Janeiro de 1970.

-I [dias] – Especifique o número de dias inativos entre a expiração da senha e o bloqueio da conta. Se o valor é 0, a conta não é bloqueada após a senha expirar.

-E [data] - Especifique a data na qual a conta é bloqueada, no formato YYYY-MM-DD. Também é possível usar o número de dias desde 1o de Janeiro de 1970, ao invés da data.

-W [dias] - Especifique o número de dias antes da expiração da senha para avisar o usuário.

-l –list “usuário” – Traz as informações do usuário.

Se o comando chage é seguido diretamente pelo nome do usuário (sem opções), traz os valores atuais para a validade da senha e permite que eles sejam alterados.

Categories: Linux - Comandos Tags:

Adicionando rotas no Linux

July 20th, 2009 Marcelo No comments

Exemplo de como adicionar rotas no Linux.

# route add -net <rede de destino> netmask <mascara> gw <gateway ou proximo_roteador do salto> dev ethX

# route add -host <maquina especifica> netmask <mascara> gw <gateway ou proximo_roteador do salto> dev ethX

Categories: Linux - Comandos Tags:

Linux - Comandos RPM

July 12th, 2009 Marcelo No comments

O que é o RPM?

O RPM é um sistema de instalação de programas criado pela Red Hat.

O que é um pacote RPM?

Um pacote RPM nada mais é do que os arquivos do programa, scripts e regras para sua instalação.

Como instalar pacotes RPM?

Para instalar um pacote RPM use o comando:

rpm -i nome_do_pacote.rpm

Você tem um pacote instalado, mas acaba de pegar uma versão mais nova do programa. O que fazer? Desinstalar o pacote antigo e instalar o novo? Não! Não é preciso que se faça isso! Você pode atualizar para uma versão mais recente de um pacote já instalado com o comando:

rpm -U nome_do_pacote.rpm

Tudo bem, aprendemos instalar e atualizar um pacote, mas tem aquele programa instalado em meu PC que eu nunca uso, como faço para removê-lo?

Bem, para remover um pacote já instalado use o comando:

rpm -e nome_do_pacote

OBS: Veja que agora não colocamos a extensão rpm. Não é necessário que se coloque a extensão!

Para ver a lista de pacotes instalados em seu sistema use o comando:

rpm -qa

Agora vamos verificar se algum pacote já está instalado em nosso sistema. Para isso utilize o comando:

rpm -qa | grep nome_do_pacote

OBS: O nome do pacote não precisa ser digitado inteiramente!

Exemplo: Para sabermos quais pacotes que possuem “gnome” no seu nome estão instalados em nosso sistema utilizamos o comando:

rpm -qa | grep gnome

Agora veja que existem vários pacotes com o nome gnome-yyyy, onde yyyy é o complemento do nome do pacote, e outros que têm um prefixo (ex.: libgnome-xxx, onde o xxx é a versão do pacote).

Para vermos quais arquivos um certo pacote provê utilizamos o comando:

rpm -qlp nome_do_pacote.rpm

Se você quiser obter informações sobre um pacote instalado no sistema utilize o comando:

rpm -qi nome_do_pacote

OBS: Note que mais uma vez não é necessário usar a extensão rpm.

Agora você quer obter informações de um pacote não instalado, utilize o comando:

rpm -qip nome_do_pacote.rpm

Se no caso acima as informações mostradas ainda não são suficientes para o que queremos, podemos obter mais informações sobre um pacote ainda não instalado com o comando:

less nome_do_pacote.rpm

Digamos agora que você tem um pacote instalado, mas por algum motivo qualquer ele não está funcionando normalmente.

Existem outras maneiras de resolver este problemas, mas se você tentou de tudo e ainda não conseguiu resolvê-lo, pode reinstalar o pacote. Mas ao tentar o comando “rpm -U nome_do_pacote” ou “rpm -i nome_do_pacote” você recebe a mensagem de que o pacote já está instalado, basta usar com o parâmetro –replacepkgs assim:

rpm -i –replacepkgs nome_do_pacote.rpm
ou
rpm -U –replacepkgs nome_do_pacote.rpm

Para instalar um pacote sem que seja verificado se o seu disco possui espaço suficiente para o pacote use o comando:

rpm -i –ignoresize nome_do_pacote.rpm

Atenção: Esta opção não é recomendada visto que se não existir espaço suficiente para a instalação o pacote pode e/ou será instalado com problemas!

Para instalar um pacote sem instalar a sua documentação utilize o comando:

rpm -i –excludedocs nome_do_pacote.rpm

OBS: Apenas os arquivos marcados como documentação não serão instalados!

Para instalar um pacote sem a verificação das dependências utilize o comando:

rpm -i –nodeps nome_do_pacote.rpm

Atenção: Esta opção não é recomendada visto que provavelmente o programa apresentará erros uma vez que as dependências não forem atendidas!

Caso você queira instalar uma versão mais antiga de um pacote já instalado utilize o comando:

rpm -U –oldpackage nome_do_pacote.rpm

Caso você queira apenas testar se um pacote vai ser instalado corretamente (se todas as dependências serão atendidas, se não causa nenhum conflito) em seu sistemas utilize o comando:

rpm -i –test nome_do_pacote.rpm

Algumas vezes quando instalamos e desinstalarmos pacotes pode ocorrer da nossa base de dados do rpm ficar corrompida!

Se ao tentar instalar, atualizar ou remover um pacote você começar a receber mensagens de erro do tipo “Segmentation fault ou (null)-(null)” você deve atualizar sua base de dados do rpm com o comando:

rpm –rebuilddb

Ou então você pode construir uma nova com o comando: rpm –initdb

Para maiores informações sobre o rpm use o comando:

# man rpm

Categories: Linux - Comandos Tags:

Linux - Comandos para gerenciamento de módulos

June 30th, 2009 Marcelo 1 comment

Os demais comandos que veremos agora não se aplicam para módulos built-in (afinal de contas eles já foram carregados). Os comandos que veremos agora são para manipulação de módulos. Depois que listamos nossos dispositivos com o comando lspci…

O primeiro comando para manipulação de módulos é o lsmod:

# lsmod
ou
# cat /proc/modules

Esse comando tem a função de listar todos os módulos que estão ativos no sistema, mesmo que o módulo não esteja sendo usado no momento.

O próximo comando essencial nessa parte de módulos é o modprobe:

# modprobe nome_módulo

Ele é o responsável por ativar/levantar um módulo.

É através dele que habilitamos um determinado dispositivo, como por exemplo a placa de rede.

Para ver quais os módulos estão compilados (disponíveis para uso):

# modprobe -l

O parâmetro é “l” de limão, e não é o número um.

Os módulos ficam no seguinte diretório:

# cd /lib/modules/$(uname -r)

Para quem não sabe, posso colocar um comando dentro de $() quando quero que essa variável guarde como valor o resultado do comando.

Se temos mais de um kernel compilado na máquina, logicamente teremos mais de um diretório em /lib/modules.

Você pode descobrir quais módulos tem disponíveis da seguinte forma:

# find /lib/modules/$(uname -r) -name ‘*.ko’

Uma coisa legal no Linux é que temos várias maneiras de fazer uma coisa só, aí você escolhe a que mais lhe agrada.

Lembrando que você pode ter vários kernels disponíveis, mas só um funcionando ao mesmo tempo, pois isso para termos certeza que estamos entrando no diretório que guarda os módulos do kernel que estou usando no momento, aí eu digito esse comando acima.

O modprobe levanta um módulo com a sua dependência, ou seja, se determinado módulo para ser iniciado precisa que um módulo em específico já esteja no ar, o modprobe faz isso sem lhe perguntar nada! Veja que prático!

Um exemplo prático é a placa de som, que para funcionar, além do módulo da placa em si, precisa do soundcore (módulo de som).

Então, nesse caso o comando modprobe já resolveria essa dependência levantando o módulo da placa e também o soundcore.

Para determinar o número de módulos disponíveis:

# lsmod | grep -v ^”Module” | wc -l

Para determinar o número de módulos carregados:

# modprobe -l | wc -l

No meu caso tenho 1756 módulos disponíveis e 88 módulos carregados na memória.

Agora se eu quero levantar um módulo sem resolver sua dependência, lembrando que nem todos os módulos tem dependências, pois isso depende do seu dispositivo.

Para isso usamos o comando:

# insmod módulo

Se o módulo tiver dependência e você usar o comando insmod ele acusará um erro.

Agora, falando o inverso, se eu quero derrubar um módulo, ou seja, desativá-lo:

# modprobe -r nome_do_módulo

Sem dependência:

# rmmod módulo

Observação: Lembrando que um módulo só pode ser desativado se o mesmo não estiver em uso!

Por exemplo: só posso derrubar o módulo da placa de rede, caso a mesma também esteja derrubada. Ou seja, sem funcionamento!

É válido dizer que quando falo remover estou me referindo a tirar o módulo da memória e não deletá-lo do sistema.

Vamos fazer um exemplo prático:

Determine quais módulos são utilizados pelo dispositivo de cdrom:

# lsmod | grep cdrom

cdrom 32544 1 ide_cd

Essa mensagem significa que o módulo cdrom é usado pelo módulo ide_cd.
32544 é o tamanho do módulo.
1 é quantidade de módulos que usam o módulo listado.

Tente remover o módulo cdrom utilizando o rmmod:

# rmmod cdrom

ERROR: Module cdrom is in use by ide_cd

Não funcionou porque o módulo cdrom está sendo usado pelo ide_cd, e lembrando que só posso tirar um módulo da memória se o mesmo não estiver em uso.

Remova o módulo ide_cd com rmmod já que ele está utilizando o módulo cdrom:

# rmmod ide_cd

O comando não vai retornar nenhuma mensagem, significa que ele tirou o módulo da memória.

Verifique que o módulo ide_cd foi removido mas o cdrom ainda está carregado:

# lsmod | grep ide_cd

Não retornou nada, significa que não está mais na memória.

# lsmod | grep cdrom

cdrom 32544 0 Retornou a linha do módulo cdrom, ele ainda continua na memória.

Já que o módulo cdrom não está mais sendo utilizado podemos removê-lo:

# rmmod cdrom
# lsmod |grep cdrom

Abra a bandeja do cdrom e verifique que o suporte ao CDROM foi carregado novamente:

# eject
# lsmod |grep cdrom

Não foi!

Então, vamos levantar os módulos do cdrom novamente, só que com o comando insmod (para o comando insmod deve ser informado o caminho completo de onde está o módulo). Você pode fazer assim:

# modprobe -l cdrom
/lib/modules/2.6.18-5-686/kernel/drivers/cdrom/cdrom.ko

# insmod /lib/modules/2.6.18-5 686/kernel/drivers/cdrom/cdrom.ko
ou
# insmod $(modprobe -l cdrom)

E depois:

# insmod $(modprobe -l ide_cd)

Verificando se os módulos levantaram:

# lsmod |grep cdrom cdrom 32544 1 ide_cd

Verifique que agora você consegue usar o cdrom:

# eject

Puxe o cdrom:

# eject -t

Vamos tirar os módulos da memória novamente para ver que o modprobe é bem mais prático para usar:

# modprobe -r ide_cd

Tente ejetar o cd agora, você não vai conseguir.

Levante os módulos agora:

# modprobe ide_cd

Veja que ele levantou o cdrom também:

# lsmod | grep cdrom 32544 1 ide_cd

Como o modprobe sabe quais módulos dependem de quais módulos?

# cd /lib/modules/$(uname -r)
# ls -l
# vim modules.dep

Esse arquivo é construído com o comando depmod:

# depmod -a

Esses seriam os principais comandos que usamos nessa parte de módulos!

Categories: Linux - Comandos Tags:

Utilizando o tcpdump

November 20th, 2008 Marcelo Comments off

Linux - Debian - Redes

tcpdump é um dos mais, è sniffer para sistemas GNU/Linux. Com ele podemos realizar análises de redes.

Instalação do tcpdum no Debian.Como super usuário do sistema (root) digite o comando a seguir:

# apt-get install tcpdump


Analisar todo o tráfego que passa pela interface eth0, executaríamos a seguinte linha de comando:

# tcpdump -i eth0


Monitorar conexões de origem do ip 192.168.0.5 para nosso computador.

# tcpdump -i eth0 src host 192.168.0.5

Monitorar as conexões especificando um host de destino,

# tcpdump -i eth0 dst host 192.168.0.1


Podemos monitorar conexceções com o parâmetro not host, por exemplo, em nosso servidor queremos ver todo o tráfego que se passa em sua interface, exceto o de 192.168.0.254.

# tcpdump -i eth0 not host 192.168.0.254


Monitorando o tráfego com destino na porta 80.

# tcpdump -i eth0 dst port 80


Monitorando o tráfego com origem na porta 25

# tcpdump -i eth0 src port 25


Boa sorte!
Espero que ajude no dia-a-dia.

Categories: Linux - Comandos Tags:

Comandos do sistema - parte 2

November 18th, 2008 Marcelo Comments off

Linux - Comandos do sistema

A relação a seguir mostra os comandos seguidos de uma descrição:

$ cal - exibe um calendário.

$ cat arquivo: - mostra o conteúdo de um arquivo.

$ cd diretório: - abre um diretório. Por exemplo, para abrir a pasta /mnt, basta digitar cd /mnt. Para ir ao diretório raiz a partir de qualquer outro, digite apenas cd;

$ chmod - comando para alterar as permissões de arquivos e diretórios.

$ clear - elimina todo o conteúdo visível, deixando a linha de comando no topo, como se o sistema acabasse de ter sido acessado.

$ cp origem destino: - copia um arquivo ou diretório para outro local.

$ date: - mostra a data e a hora atual:
Ex: date 102210102007 O comando acima altera a dara para dia 22 de outubro as 10:10 horas do ano de 2007.

$ df: - mostra as partições usadas.

$ diff arquivo1 arquivo2: - indica as diferenças entre dois arquivos.

$ du diretório: - mostra o tamanho de um diretório

& emacs: - abre o editor de textos emacs.

$ file arquivo: - mostra informações de um arquivo.

& find diretório parâmetro termo: - o comando find serve para localizar informações. Para isso, deve-se digitar o comando seguido do diretório da pesquisa mais um parâmetro (ver lista abaixo) e o termo da busca. Parâmetros:

name - busca por nome
type - busca por tipo
size - busca pelo tamanho do arquivo
mtime - busca por data de modificaçãoExemplo: find /home name tristania.

$ finger usuário: - exibe informações sobre o usuário indicado.

$ free - mostra a quantidade de memória RAM disponível.

$ halt - desliga o computador.

$ history - mostra os últimos comandos inseridos;id usuário: mostra qual o número de identificação do usuário especificado no sistema.

$ kill - encerra processados em andamento.

$ ls - lista os arquivos e diretórios da pasta atual.

$ lpr - arquivo: imprime o arquivo especificado.

$ lpq - mostra o status da fila de impressão.

$ lprm - remove trabalhos da fila de impressão.

$ lynx - abre o navegador de internet de mesmo nome.

$ mv origem destino: - tem a mesma função do comando cp, só que ao invés de copiar, move o arquivo ou o diretório para o destino especificado.

$ mkdir diretório: - cria um diretório, por exemplo, mkdir infowester cria uma pasta de nome infowester.

$ passwd - altera sua senha. Para um administrador mudar a senha de um usuário, basta digitar passwd seguido do nome deste.

$ ps - mostra os processos em execução.

$ pwd - mostra o diretório em que você está.

$ reboot - reinicia o sistema imediatamente (pouco recomendável, preferível shutdown -r now).

$ rm arquivo - apaga o arquivo especificado.

$ rmdir diretório - apaga o diretório especificado, desde que vazio.

$ shutdown - desliga ou reinicia o computador, veja:
$ shutdown -r now - reinicia o computador
$ shutdown -h now - desliga o computadorO parâmetro now pode ser mudado. Por exemplo: digite shutdown -r +10 e o sistema irá reiniciar daqui a 10 minutos.

$ su passa para o usuário administrador, isto é, root (perceba que o símbolo $ mudará para #).

$ tar -xzvf arquivo.tar.gz - extrai um arquivo compactado em tar.gz.

$ telnet - ativa o serviço de Telnet em uma máquina. Para acessar esse computador a partir de outros por Telnet, basta digitar telnet nomedamáquina ou telnet IP. Por exemplo: telnet 192.168.0.10. Após abrir o Telnet, digite help para conhecer suas funções.

$ top - exibe a lista dos processos, conforme os recursos de memória consumidos.

$ uname - mostra informações do sistema operacional e do computador. Digite uname -a para obter mais detalhes.

$ useradd usuário - cria uma nova conta usuário, por exemplo, useradd marcelo cria o usuário marcelor.

$ userdel - usuário apaga a conta do usuário especificado.

$ uptime - mostra a quantas horas seu computador está ligado.l

$ vi - inicia o editor de textos vi.

$ whereis nome - procura pelo binário do arquivo indicado, útil para conhecer seu diretório ou se ele existe no sistema.

$ w - mostra os usuários logados atualmente no computador (útil para servidores).

$ who - mostra quem está usando o sistema. Praticamente todos os comandos citados possuem parâmetros que permitem incrementar suas funcionalidades. Por exemplo, se você digitar o comando ls com o parâmetro -R (ls -R), este mostrará todos os arquivos do diretório, inclusive os ocultos.A melhor forma de conhecer os parâmetros adicionais de cada comando é consultando as informações de ajuda. Para isso, pode-se usar o recurso -help.
Veja o exemplo para o comando ls :
ls -help. Também é possível utilizar o comando man (desde que seu conteúdo esteja instalado), que geralmente fornece informações mais detalhadas. Par usar o man para obter detalhes do comando cp, por exemplo, a sintaxe é: man cp. Se você estiver utilizando o bash, pode-se aplicar o comando help ou info da mesma forma que o comando man:
help cpinfo cp.

Assim como conhecer os comandos básicos do Linux é importante, também o é saber como acessar seus recursos de ajuda, pois isso te desobriga de decorar as seqüências das funcionalidades extras. Sabendo usar todos os recursos, você certamente terá boa produtividade em suas tarefas n
o Linux.

Categories: Linux - Comandos Tags:

Comandos de rede - parte 1

November 15th, 2008 Marcelo Comments off

Linux - Comandos do sistema

Veremos a seguir os principais comandos utilizados para configurarmos interfaces, manipular rotas e até mesmo alguns comandos muito úteis para solucionar problemas. Não se deixe enganar pelo título, pois alguns comandos aqui apresentados são essencias na resolução de problemas bastante complexos!

Configuração da Interface de Rede

# modprobe / insmod / lsmod / rmmod / modinfo


O primeiro passo para configurar um interface é garantir que o kernel saiba como “conversar” com esse dispositivo. Para tanto, o kernel deverá ou ter embutido o “driver” (que no Linux chamamos de módulo) ou carregar dinâmicamente esse “driver”. Os comandos “mod” servem para carregar, descarregar e listar módulos, e são bastante simples de usar:

Para listar os módulos carregados pelo kernel use o comando lsmod, exemplo:

# lsmod

Module Size Used by Not tainted
e100 49064 1

Para carregar um módulo é só utilizar o comando insmod ou o comando modprobe. A diferença entre os dois é que o comando modprobe resolve e carrega as dependências do módulo que estamos tentando carregar, isto é, se o módulo “A” necessita que o módulo “B” esteja carregado, usar “modprobe A” carregará os dois! Exemplo:

# modprobe 8139too

Alguns módulos aceitam parâmetros ao serem carregados como, por exemplo, IRQ, I/O, opções de velocidade, etc. Para obter mais informações sobre um módulo, utilize o comando modinfo. Por exemplo, para obter a lista de parâmetros de um módulo use “modinfo -p módulo”.

O comando rmmod serve para remover um módulo que não está mais em uso. Também podemos usar o comando modprobe com a opção -r, para se obter um efeito análogo ao carregamento de módulos com dependências, mas para remover, é claro.

# mii-tool

O comando mii-tool serve para verificar e alterar o estado “Media-Independent Interface” de uma interface. O MII é um recurso utilizado pela maioria dos adaptadores fast ethernet para negociar a velocidade do link e o full/half duplex. Atenção, nem todos os adaptadores suportam esse recurso!

Para verificar o estado de uma interface, basta usar o comando sem parâmetros. Exemplo:

# mii-tool

eth0: negotiated 100baseTx-FD, link ok

Para forçar que uma placa anuncie somente certas capacidades, ou para desabilitar completamente a auto-negociação e forçar uma certa velocidade, use os parâmetros -A e -F, respectivamente. Exemplo:

Anuncia que a placa entende 100Mbit/s Half e Full Duplex:

# mii-tool -A 100BaseTx-FD,100BaseTx-HD eth0

Força a placa a entrar no modo 10Mbit/s Full Duplex:

# mii-tool -F 10BaseT-FD eth0

# ifconfig

O ifconfig é o principal comando para configurarmos interfaces no Linux. A sua forma geral é “ifconfig opções | endereço”. Consulte a página do manual para ver todas as opções (man ifconfig). Veremos a seguir alguns exemplos:

Para listar as interfaces e seus endereços:

# ifconfig

eth1 Link encap:Ethernet HWaddr 02:60:8C:F1:EB:CF
inet addr:10.10.10.1 Bcast:10.255.255.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:858 (858.0 b) TX bytes:0 (0.0 b)
Interrupt:5 Base address:0×2440

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:55870 errors:0 dropped:0 overruns:0 frame:0
TX packets:55870 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:124540531 (118.7 ))MiB(() TX bytes:124540531 (118.7 ))MiB(()

Para configurar e levantar uma interface com um determinado IP:

# ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up

Para desabilitar uma interface:

# ifconfig eth0 down

Para configurar um “alias” em uma interface, juntamente com outro endereço IP:

# ifconfig eth0:1 192.168.1.1 netmask 255.255.255.0

Para mudar a MTU de uma interface:

# ifconfig eth0 mtu 1440

Para configurar placa com uma conexão ponto-a-ponto:

# ifconfig eth0 192.168.2.1 netmask 255.255.255.255 pointopoint 192.168.2.2

Para colocar e retirar uma interface do modo “Promíscuo” (a interface aceita pacotes destinados a qualquer IP):

# intertace eth0 promisc

# interface eth0 -promisc

O ifconfig também pode ser utilizado para se alterar o endereço MAC da placa! Para alterar esse endereço é necessário que a placa esteja inativa. Exemplo:

# ifconfig eth0 down
# ifconfig eth0 hw ether 00:11:22:33:44:55

# ifconfig eth0 up

Configuração de Rotas
route
O comando route serve para mostrar e manipular a tabela principal de rotas. Quando utilizado sem argumentos ele mostra a tabela de rotas. Exemplo:

# route

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.10.10.0 * 255.255.255.0 U 0 0 0 eth0
default 10.10.10.10 0.0.0.0 UG 0 0 0 eth0

Um parâmetro que pode ser útil ao mostrarmos rotas é o “-n”, que faz com que o comando route não tente resolver nomes.

Para inserir uma rota use o comando no formato: route add [ -net | -host ] target [ netmask Nm ] [ gw Gw ] [[ dev ] If ]. Exemplos:

Inserir uma rota para uma rede:

# route add -net 192.168.5.0 netmask 255.255.255.0 gw 192.168.1.3

Inserir uma rota para um host, utilizando uma determinada interface ponto-a-ponto:

# route add -net 192.168.10.1 dev ppp0

Para selecionar a rota default:

# route add default gw 192.168.1.200

Para remover rotas usamos praticamente a mesma sintaxe, mas ao invés do “add” usamos o “del”.
Comandos úteis na resolução de problemas
Problemas no nível 2
Quando falamos em roteamento, estamos trabalhando basicamente com a camada 3 (IP) do modelo OSI. No entanto, existem muitos casos em que é necessário conhecer e trabalhar com o nível 2 (enlace), mais especificamente estaremos falando, no nosso caso, de ethernet.

arp
O comando arp serve para listar e modificar a tabela arp do kernel. A tabela arp associa endereços IP à endereços de “hardware”, (no caso do ethernet, aos MAC address). Na sua forma mais básica, sem parâmetros, o comando arp simplesmente lista a tabela arp (utilize a opção -n para não resolver nomes), exemplo:

arp

Address HWtype ))HWaddress(( Flags Mask Iface maquina1.teste ether 00:00:0C:95:0B:00 C eth0 maquina2.teste ether 00:60:08:A1:48:A6 C eth0

Para remover uma entrada da tabela utilize opção “-d host”. exemplo:

# arp -d maquina2.teste

O comando arp permite também que entradas sejam adicionadas manualmente na tabela. Normalmente isso não é necessário mas em algumas situações poderá ser, por exemplo, quando configuramos uma conexão ponto-a-ponto, ou dial-up. Nesse caso é preciso que a máquina roteadora seja capaz de aceitar pacotes que tenham como destino a outra máquina da conexão. Para adicionarmos uma entrada usamos a opção “-s host hw_address” ou para forçarmos que uma interface responda a requisições arp utilizando o endereço de outra (ou dela mesmo) interface, podemos usar as opções “-i”, para definir a interface, e a opção “-D”, para dizer de qual interface queremos “copiar” o endereço de hardware. Exemplo

# arp -s 192.168.0.3 -i eth0 -D eth0 pub

O exemplo acima faria com que a interface eth0 respondesse a requisições de arp para o endereço 192.168.0.3 utilizando o seu próprio endereço de hardware. A opção pub faz com que a interface passe a “divulgar” esse endereço (e não apenas a aceitar pacotes para ele).

arping
O comando arping serve para enviar requisições arp e/ou ICMP. O comando arping, além de aceitar nome de hosts, endereços IPs? e endereços de hardware, pode usar também como origem e/ou destino endereços de broadcast. Por exemplo, se quisermos verificar se um determinado IP está sendo utilizado antes de o configurarmos na placa de rede poderíamos fazer:

# arp -0 192.168.0.1

# tcpdump arp

tcpdump: listening on eth0
14:02:48.327806 arp who-has 192.168.0.1 tell 0.0.0.0
14:02:48.327939 arp reply 192.168.0.1 is-at 0:60:8:a1:48:a6
Conectividade e Rotas
Para diagnosticar problemas de conectividade ou de roteamento os comandos a seguir são bastante úteis.

ping

O ping já deve ser um velho conhecido de todos que trabalham com redes de computadores. Ele serve para enviar requisições ICMP de “echo request” e fica escutando pelos pacotes ICMP de “echo reply”. No entanto, o ping serve também para mostrar a rota que os pacotes ICMP fazem, tanto na “ida” quanto na “volta”. Para tanto, basta utilizar a opção “-R” do ping, como no exemplo abaixo:

# ping -c 1 -R 200.Z.Z.21

PING 200.X.X.21 (200.X.X.21) 56(124) bytes of data.
64 bytes from 200.X.X.21: icmp_seq=1 ttl=254 time=5.16 ms
RR: 200.X.X.36
200.X.Y.21
200.Z.Z.20
200.Z.Z.21
200.Z.Z.21
200.X.Y.22
200.X.X.41
200.X.X.36

- 200.Z.Z.21 ping statistics -
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.165/5.165/5.165/0.000 ms

A opção “-c N” serve para especificar quantos “pings” queremos enviar.

# traceroute

O comando traceroute é utilizado para traçar rotas até um determinado IP. Ao contrário do “ping -R” o traceroute resolve os nomes (podendo-se desabilitar isso com a opção “-n”), e é capaz de traçar uma rota mesmo que o host não exista ou esteja inacessível. Obviamente o comando só irá traçar a rota até que um roteador responda com um “unreacheable” ou até o TTL expirar. Exemplo:

# traceroute 200.Z.Z.21


traceroute to 200.Z.Z.21 (200.Z.Z.21), 30 hops max, 38 byte packets
1 maquina1 (200.X.X.41) 2.501 ms 1.289 ms 1.316 ms
2 maquina2 (200.X.Y.22) 1.246 ms 1.358 ms 1.117 ms
3 destino (200.Z.Z.21) 1.153 ms 2.126 ms 1.004 ms

# tracepath


O tracepath é um comando bastante similar ao traceroute, mas mostra o pmtu do caminho. Exemplo:

# tracepath 200.Z.Z.21


1: LOCALHOST pmtu 1500
1: maquina1 (200.X.X.41) 4.243ms
2: maquina2 (200.X.Y.22) 4.242ms
3: destino (200.Z.Z.21) 7.171ms reached
Resume: pmtu 1500 hops 3 back 3


tcpdump
O comando tcpdump serve para fazer um dump do tráfego de rede. Na sua operação normal ele coloca a interface de rede em modo promíscuo e imprime na tela uma breve descrição de todos os pacotes que chegam à interface. O tcpdump foi utilizado no exemplo acima sobre arping para mostrar as requisições e respostas arp na rede. Nesse documento vamos apenas citar alguns exemplos e deixar a cargo do leitor que olhe no manual do comando a imensa lista de opções que ele é capaz de aceitar.

Para mostrar os pacotes do tipo ICMP que chegam à interface eth0:

# tcpdump -i eth0 icmp

Para mostrar os pacotes com origem na máquina x.y.z.z:

# tcpdump src x.y.z.z

Para mostrar pacotes que tenham como origem ou destino a máquina x.y.z.z

# tcpdump host x.y.z.z

O Comando IP
O comando IP merece um tópico a parte, pois ele resume em apenas um comando funcionalidades do ifconfig, arp e route, além de permitir a manipulação de tabelas de rotas especiais e túneis. A sua forma básica é ip [ opções ] OBJETO { COMMAND | help }. Onde objeto os principais objetos são: link, addr, neigh, e route. Veremos a seguir em mais detalhes esses objetos. Os objetos tunnel e rule serão vistos em outra ocasião.

Vale lembrar que utilizando simplesmente “ip” ou “ip objeto help” o comando imprimirá um ajuda rápida.

# ip link


O objeto link serve para mostrar e manipular opções dos dispositivos de rede. Através dele é possível ativar ou desativar uma interface, mudar os seus endereços de “hardware”, opções de arp e multicast e até mesmo “renomear” uma interface. Veremos aqui algumas opções mais utilizadas:

Para mostrar os dispositivos de rede (ao contrário do ifconfig, o ip link pode mostrar dispositivos que estejam inativos também):

# ip link show


1: lo: mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:02:55:5d:07:c6 brd ff:ff:ff:ff:ff:ff
3: eth1: mtu 1440 qdisc pfifo_fast qlen 1000
link/ether 11:22:33:44:55:66 brd ff:ff:ff:ff:ff:ff

Para ativar uma interface:

# ip link set eth0 up

Para mudar a mtu de um dispositivo:

# ip link set eth0 mtu 1480

ip addr
O objeto addr server para listar e manipular os endereços IPv4 / IPv6 das interfaces (virtuais ou não). Ao contrário do comando ifconfig, o comando ip addr é capaz de atribuir e mostrar mais de um endereço IPv4 para a mesma interface. Atenção, o comando ip addr mostra e espera como entrada endereços no formato addr/masklen. Exemplos:

Para mostrar os endereços das interfaces:

# ip addr show

1: lo: mtu 16436 qdisc noqueue

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo

2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000

link/ether 00:02:55:5d:07:c6 brd ff:ff:ff:ff:ff:ff
inet 200.X.X.36/27 brd 200.238.128.63 scope global eth0

Para adicionar um endereço em uma interface:

# ip addr add 192.168.0.1/24 dev eth0

Para se remover a sintaxe é semenhante, mas usamos o del e não o add.

Para configurar um endereço ponto-a-ponto:

# ip addr add 192.168.0.2 peer 192.168.0.1

ip neigh

O objeto neigh é semelhante em funcionalidade ao comando arp, ou seja, serve para mostrar e manipular a tabela arp. Exemplos:

Para listar a tabela arp associada a uma determinada interface:

# ip neigh show dev eth0
200.X.X.41 dev eth0 lladdr 00:00:0c:95:0b:00 nud reachable
200.X.X.40 dev eth0 lladdr 00:60:08:a1:48:a6 nud reachable

Para inserir uma entrada na tabela arp:

# ip neigh add 10.0.0.1 lladdr 00:11:22:33:44:55 dev eth0

Para remover uma entrada basta trocar o “add” por “del”.

Para limpar toda a tabela arp associada a uma interface:

# ip neigh flush dev eth0

ip route

O objeto route é utilizado para mostrar e manipular as tabelas de rota do kernel. Ao contrário do comando route que só manipula a tabela de rotas principal, o ip route consegue manipular todas as tabelas de rotas (veremos em um outro capítulo mais detalhes sobre isso). Exemplos:

Para listar a tabela de rotas:

# ip route show


192.168.0.1 dev eth1 proto kernel scope link src 192.168.0.2
unreachable 10.20.20.0/24
blackhole 10.40.40.0/24
default via 200.X.X.41 dev eth0

Para mostrar uma rota para uma determinada rede ou host:

# ip route get 200.X.X.21
200.X.X.21 via 200.Z.Z.41 dev eth0 src 200.Z.Z.36
cache mtu 1500 advmss 1460

Para adicionar uma rota:

# ip route add 10.0.0.0/24 via 192.168.1.200

Para deletar rotas basta trocar o “add” por “del”.

Para acrescentar uma rota “blackhole” (os pacotes são silenciosamente descartados):

# ip route add blackhole 10.0.1.0/24

Para acrescentar uma rota “unreachable” (é gerado um ICMP host unreachable):

# ip route add unreachable 10.0.2.0/24

Automatizando a Configuração de Redes/Rotas
Até aqui mostramos como configurar interfaces, endereços e rotas manualmente. É claro que isso também pode ser feito automaticamente. Cada distribuição Linux coloca seus arquivos de configurações de rede em locais um pouco diferentes. A saber:

RedHat (e Mandrake)

* definação de interfaces /etc/sysconfig/network-scripts/ifcfg-*
* hostname e rota padrão gateway definition /etc/sysconfig/network
* Rotas estáticas /etc/sysconfig/static-routes

Slackware

* Definição de interfaces e rotas /etc/rc.d/rc.inet1

Debian

* Definição de rotas e interfaces /etc/network/interfaces

Como nosso foco é a distribuição Debian, vamos dar uma rápida olhada no arquivo /etc/network/interfaces. Exemplo:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 200.X.X.36
netmask 255.255.255.224
network 200.X.X.32
broadcast 200.X.X.63
gateway 200.X.X.41

Além das opções mostradas, cada interace aceita ainda as opções pre-up, up, down, post-down que podem ser utilizadas para se executar comandos ou scripts, antes de subir a interface, depois de subir, antes de descer e após descer a interface. Assim, por exemplo, se quisermos adicionarmos uma rota ao subir um determinada interface, poderíamos usar a seguinte linha dentro das opções da interface:

# iface eth0 inet static

Categories: Linux - Comandos Tags: