Exibindo o estado das conexões TCP no Linux

Em um post anterior apresentei um comando que exibia apenas o número de conexões ativas em um servidor/desktop Linux. Dessa vez apresento um comando que exibi o estado de todas as conexões:

$ netstat -a -n| sed '/^tcp/!d'|cut -c 68-|sort|uniq -c|sort -n

1 SYN_RECV
3 CLOSING
7 FIN_WAIT1
8 SYN_SENT
17 LISTEN
18 CLOSE_WAIT
18 FIN_WAIT2
656 TIME_WAIT
688 ESTABLISHED

No exemplo acima são exibidas as conexões de um servidor de e-mail.

Active Directory via linha de comando

Para quem precisar fazer algum scritps no windows que interaja com Active Directory, existe um comando que facilita este trabalho: ldifde.exe. Ele está localizado sob o diretório c:\windows\system32, e entre suas opções podemos encontrar a possibilidade de importar/exportar arquivos LDIF, estender o schema, criar, modificar ou excluir objetos entre outros.

Referência:
Microsoft LDIFDE


Technorati : , ,

Descobrindo qual ftp é o mais rápido

Imagine que você precisa baixar um arquivo e ao verificar descobre que existem vários mirrors que disponibilizam o mesmo arquivo. Por alguns segundos, você para e pensa “e agora? qual eu escolho?” Bem, de duas uma: ou vai no chute escolhendo qualquer um, ou começa a baixar e se verificar que está muito lento desiste e começa em outro mirror.

Pois bem, como diria o seu Creisson: Seus problemas acabaram! O comando netselect, efetua alguns testes de desempenho em endereços ftp passados como parâmetro.

# netselect -vv ftp.debian.org ftp.br.debian.org
Running netselect to choose 1 out of 2 addresses.
............
ftp.debian.org 177 ms 19 hops 90% ok ( 9/10) [ 568]
ftp.br.debian.org 9999 ms 30 hops 0% ok
568 ftp.debian.org

Existe também outro comando (para quem utiliza ubuntu/debian) que cria um arquivo sources.list (endereço dos repositórios para instalação/atualização de pacotes) baseando-se nos mirrors do próprio apt: netselect-apt

# netselect-apt
Using distribution stable.
Retrieving the list of mirrors from www.debian.org...
--22:06:36-- http://www.debian.org/mirror/mirrors_full
=> `mirrors_full'
Resolving www.debian.org... 194.109.137.218
Connecting to www.debian.org[194.109.137.218]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 165,115 [text/html]
100%[==========================================>] 165,115 65.38K/s
22:06:40 (65.27 KB/s) - `mirrors_full' saved [165115/165115]
>Choosing a main Debian mirror using netselect.
netselect: unknown host debian.mirror.cygnal.ca
netselect: unknown host cdn.mirror.garr.it
netselect: unknown host debian.marked.no
netselect: unknown host mirrors.terrabox.com
Running netselect to choose 1 out of 297 addresses.
................................................
The fastest server seems to be:

http://mirror.eftel.com/debian/

Choosing a non-US Debian mirror using netselect.
netselect: unknown host debian.mirror.cygnal.ca
netselect: unknown host cdn.mirror.garr.it
Running netselect to choose 1 out of 212 addresses.
................................................
The fastest non-US server seems to be:

http://linux.iq.usp.br/debian-non-US/

Writing sources.list.
Done.
#


Technorati : , , ,

Invertendo uma string no shell

Comando simples mais (in)útil: rev. Com ele é possível inverter uma string (ou as linhas de um arquivo) passados para ele, exemplo:

$ echo 123 | rev
321

Outro exemplo:

$ cat teste
Jose Morelli Neto
$ rev teste
oteN illeroM esoJ

Se alguem descobrir uma boa utilidade para este comando, por favor me avise ;)

e-mail com anexo a partir da linha de comando

As vezes precisamos enviar um arquivo a partir do shell de um servidor para o e-mail de algum usuário. ?? comum acessarmos um FTP do servidor e copiar o arquivo ou enviar o arquivo como conteúdo do e-mail (e não anexo). Esses tempos descobri um utilitário que me encantou: o mpack. Sua principal função é empacotar um arquivo em formato MIME.Segue um exemplo para enviar um e-mail com o arquvio /etc/hosts como anexo:

# mpack -s "Assunto qualquer" /etc/hosts usuario@email.com

?? possível enviar arquivos binários também, basta apontar o local. Caso você queira adicionar alguma descrição ao arquivo, basta utilizar o parâmetro -d [arquivo_descricao]

Também é possível apenas empacotar (ou desempacotar) o arquivo em formato MIME. No exemplo abaixo estamos codificando o arquivo /bin/ls no arquivo arquivo_mime
# mpack -s "qualquer coisa" -o arquivo_mime /bin/ls

E agora para desempacotar:

# munpack -s "qualquer coisa" arquivo_mime

Assim o arquivo ls será descomprimido no diretório raiz.

Dig, consultando DNS

Para quem não conhece, o Dig (Domain Information Groper) é um utilitário para consultas a DNS. Ele é normalmente utilizado para identificar problemas de DNS por ser uma ferramenta flexivel, fácil de utilizar e permitir um retorno das pesquisas de fácil compreensão.

o comando básico é:

# dig @servidor nome tipo

onde:

  • servidor: é o endereço IP ou nome do servidor smtp que será consultado;
  • nome: é o nome domínio que estamos consultando;
  • tipo: é o tipo de consulta. Pode ser MX (serviço de e-mail), A (endereço), ANY (todas as informações), etc. Se não preenchido o tipo padrão é A.

Existem várias opções de consulta, a que acho mais interessante é a +trace. Quando ela é utilizada, a saída apresenta todas as respostas desde os rootservers, incluindo qual deles respondeu. Um exemplo:

# dig @dns1.univali.br www.inf.ufsc.br A +trace

Qualquer outra informação: man dig ;)

Instalando, removendo e pesquisando programas no Ubuntu e Debian

Alguns comandos úteis para instalação, remoção, informação e pesquisa de programas no Ubuntu e no Debian (via linha de comando). A apresentação dos comandos segue uma seqüência lógica do momento que instalamos até removermos um pacote.

Para pesquisarmos um pacote pelo nome:
hst:~# aptitude search iptraf
p iptraf - Interactive Colorful IP LAN Monitor
hst:~#

A primeira coluna (p) indica o estado do pacote, que pode ser:

i: Instalado
v: pacote virtual (um pacote que como dependência possui outros pacotes)
p: pacote não instalado
c: Removido, mas os arquivos de configuração ainda estão presentes
u: Desempacotado
B: Quebrado
C: Meio-configurado
H: meio-instalado
Agora, se quisermos pesquisar um pacote pela sua descrição, podemos utilizar o comando:

hst:~# aptitude search ~d"lan monitor"
p iptraf - Interactive Colorful IP LAN Monitor
hst:~#

Para obtermos maiores informações sobre um determinado pacote:

hst:~# aptitude show iptraf
Package: iptraf
State: not installed
Version: 2.7.0-7
Priority: optional
Section: net
Maintainer: Frederic Peters
Uncompressed Size: 745k
Depends: libc6 (>= 2.3.2.ds1-4), libncurses5 (>= 5.4-1)
Description: Interactive Colorful IP LAN Monitor
IPTraf is an ncurses-based IP LAN monitor that generates various network statistics including TCP info, UDP counts, ICMP
and OSPF information, Ethernet load info, node stats, IP checksum errors, and others.
hst:~#

Se for este o pacote que desejamos, para instalar basta executar o comando:

hst:~# aptitude install iptraf

Agora digamos que por algum motivo queremos remove-lo, para isso usamos o comando:

hst:~# aptitude remove iptraf

E por fim, para removermos os arquivos de configuração (que não são removidos pelo comando acima) executamos o comando:

hst:~# aptitude purge iptraf

Existem outros comandos interessantes como:

  • update: Atualiza a lista de pacotes disponíveis no repositório apt;
  • upgrade: Atualiza toda a distribuição para os pacotes mais recentes;
  • clean: Remove todos os arquivos .deb que estão no cache (/var/cache/apt/archives);
  • download: Baixa um pacote específico no diretório corrente.

Fontes:Installing Software on Debian e manpage do aptitude

Reconfigurações do Debian

Existem alguns comandos úteis que permitem reconfigurar alguns componentes do Debian ou até a distro inteira (como no primeiro boot). Segue abaixo uma pequena lista:

  • apt-setup: Permite reconfigurar os repositórios APT, é a mesma interface carregada no primeiro boot;
  • dpkg-reconfigure pacote: Efetua a reconfiguração de um pacote já instalado. Para isso, ele utiliza a mesma interface de configuração que é exibida quando um pacote é instalado (e se for aplicável ao pacote);
  • base-config: Permite efetuar a configuração do sistema base do Debian com opções como Linguagem, Timezone, usuários e senhas, hostname, apt (o mesmo do apt-setup), instalar pacotes (necessita do pacote base-config instalado).

Bem, pra quem já teve problemas no Xwindow e não sabia exatamente o que executar para reconfigura-lo (eu gostava do Xconfigurator do RedHat :) ), pode executar o comando:
# dpkg-reconfigure xserver-xfree86

Desmontando um dispositivo ocupado

Hoje tive um problema ao desmontar um compartilhamento montado via samba, onde o servidor que estava sendo acessado (windows 2003) não possuia mais tal compartilhamento. Ao tentar desmontá-lo utilizando somente o comando umount, recebia uma mensagem informando que o dispositivo estava ocupado (Device is busy).

Ao tentar achar o processo que estava usando este compartilhamento (via fuser), recebia uma mensagem de permissão negada (access denied).
Decidi dar uma olhada na manpage do umount, e descobri que desde a versão 2.4.11 do kernel, existe uma opção (-l) chamada Lazy unmount cujo objetivo é forçar a o processo de desmontagem removendo todas as referências tão logo ele não esteja mais ocupado.

Um exemplo:

# umount -l /media/smb

Executando um comando periodicamente e exibindo seu resultado

As vezes é necessário executarmos um comando a cada n segundos para acompanhar algum processo que esteja rodando ou para analisarmos algum valor como por exemplo o uso de memória.

Para resolver este problema, existe um comando específico para isso, o Watch. Com ele podemos definir o tempo de atualização da exibição com a opção -n, e destacar os valores diferentes entre as exibições com a opção -d. O resultado é exibido em tela cheia no console.

Por exemplo, digamos que precisaremos acompanhar o uso de memória com o comando free a cada 1 segundo destacando as diferenças:

# watch -n 1 -d free -h

Para sair do modo de execução, basta pressionar [Ctrl]+c

Lembrando que caso o objeto de análise seja um arquivo texto como por exemplo um arquivo de Logs, você pode utilizar o comando tail com a opção -f. Com ele toda linha adicionada ao arquivo em análise será prontamente exibida na tela.

Por exemplo, para acompanharmos os logs gerados pelo sistema, podemos usar o comando:

# tail -f /var/log/messages

Uma dica importante, em alguns casos, como nos logs gerados pelo serviço de e-mail ou durante um processo de compilação (quando muitas mensagens são apresentadas na tela) se você quiser “parar” o scroll das mensagens, basta pressionar [Ctrl]+s. Para voltar a exibição normal, pressione a seqüência [Ctrl]+q.