Você está na página 1de 5

Ferramentas poderosas do Linux SYSADMIN

Os segredos menos secretos

Bem debaixo de nossos narizes!


O Linux possui inmeras ferramentas de linha de comando. Cada um tem a sua favorita. Para cada cat ou more, h provavelmente outros dez comandos que raramente vem a luz do dia. Este ms, Steven Goodwin revela algumas prolas escondidas que no merecem permanecer ocultas por mais tempo. POR STEVEN GOODWIN

ncontrar informaes normalmente no muito difcil. As pginas de manual e eu somos bons amigos. O Google tambm. O verdadeiro problema da informao saber o qu procurar exatamente. E aqui que entra a primeira fornada de ferramentas desconhecidas.

$whatis apropos apropos (1) - search the manual page names and descriptions

apropos
Esse utilitrio procura em cada pgina de manual por uma palavra ou frase em particular. Pode ser uma palavrachave ou uma expresso regular, sendo assim bastante completa. A ferramenta devolve ento cada comando apropriado, junto com sua descrio. Assim, se voc est procurando um comando de algum modo relacionado a senhas (password), mas no sabe o nome dele, basta seguir os passos da listagem 1. A opo -e procura apenas palavras exatas (no exemplo da listagem 1, a frase passwords no seria encontrada). Como voc provavelmente sabe, o nmero entre parnteses indica em que seo das pginas de manual existe aquele comando. Veja a tabela 1 para mais detalhes. possvel invocar uma seo em particular usando, por exemplo:
man 1 chage

Essa a mesma descrio que aparece na primeira linha da pgina de manual e o mesmo texto que aparece com o comando apropos, a ao lado. whatis tambm compreende expresses regulares e com frequncia usado para conferir rapidamente um comando sem precisar formatar e exibir a pgina de manual inteira.

Tabela 1: Sees das pginas de manual


1 Seo Programas executveis ou comandos em shell Descrio

Listagem 1: apropos
$ apropos password afppasswd (1) - netatalk password maintenance utility chage (1) - change user password expiry information chpasswd (8) - update password le in batch crypt (3) - password and data encryption

2 3 4 5 6

Isso importante, pois alguns manuais podem existir em mais de uma seo, como um programa e uma chamada de funo de mesmo nome.

whatis
whatis um utilitrio simples que mostra a descrio de um comando:

8 9

Rotinas do kernel [no padronizadas]

Comandos de administrao de sistema (normalmente apenas para root)

Pacotes e convenes macro, p. ex. man(7), groff(7)

Jogos

Formatos de arquivo e convenes, p. ex. /etc/passwd

Arquivos especiais (normalmente encontrados em /dev)

Chamadas biblioteca (funes dentro das bibliotecas do sistema)

Chamadas de sistema (funes realizadas pelo kernel)

www.linuxmagazine.com.br

edio 05

59


SYSADMIN Ferramentas poderosas do Linux

fIle
Antes de ler um arquivo de texto com cat ou more, de bom tom conferir se aquilo , realmente, texto. Deixar de faz-lo pode fazer com que sua tela se encha de lixo e exija um comando reset para que seu shell seja legvel novamente. Esse elegante comando nos mostra com antecedncia de que tipo de arquivo se trata. um enorme avano sobre a utilizao de extenses (que podem estar erradas ou nem existir), pois l um pedao do arquivo e usa o contedo para determinar o tipo. Por exemplo, um arquivo de texto ter marcas de pargrafo e um arquivo gzip comear com um cabealho especco composto pelos bytes \037 e \213. file determina o tipo usando um arquivo de nmeros mgicos armazenados em /usr/share/misc/magic e /usr/share/misc/magic.mgc. Este ltimo uma verso pr-compilada dos arquivos mgicos originais e usado para aumentar a velocidade. O arquivo mgico indica quais bytes precisam aparecer em qual posio para indicar um tipo particular de arquivo. A descrio do arquivo pode ser to complexa ou simples quanto necessrio. MP3s, por exemplo, podem indicar sua taxa de bits e freqncia de gravao e formatos de imagem podem detalhar sua profundidade de cores e dimenses.
$ le Vexations.mp3 Vexations.mp3: MPEG 1.0 layer 3 audio stream data, 48 kBit/s, 44.1 kHz, jstereo

determinar qual comando executado a partir de qual diretrio.


$ which le /usr/bin/le

Se uma instalao ou compilao est causando problemas, ou se voc no consegue ver porque um comando em particular no est sendo chamado, o which indicar o comando que est sendo chamado em seu lugar. Isso tambm muito til para descobrir quando verses mais antigas (ou mais novas) esto sendo usadas de forma errnea. Tambm pode ser usado em conjunto com le para determinar se o comando prestes a ser usado um programa, um symlink ou um script (repare nas aspas simples reversas).
$ le `which which` /usr/bin/which: Bourne-Again Shell script text executable

Porm, tr tem muito mais utilidades. Por exemplo, pode validar nomes de arquivo em potencial transformando caracteres no-alfanumricos em nomes de arquivo compreensveis pelo sistema. Nesse caso, necessria a opo -c (complemento), que signica tudo, exceto o seguinte. Como no temos meio de saber quantas letras e nmeros podem existir no conjunto complementar, podemos apenas substitu-los por um nico caractere.
$ uname -v | tr -c [a-zA-Z0-9] _ U _44_SMP_Sun_Dec_28_19_07_54_ U GMT_2003_

Minha taa transborda


Como tudo em Linux tratado como arquivo, no de surpreender que um grande nmero de comandos tenha sido escrito para lidar com eles. Vamos dar uma olhada em alguns...

H tambm um atalho rpido para caracteres alfanumricos chamado :alnum:, que pode ser usado no lugar do verborrgico [a-zA-Z0-9]. Outro recurso do tr permite apagar caracteres individuais. um modo muito fcil e rpido de remover, por exemplo, cdigos esprios de quebra de linha de arquivos de texto originados no universo Windows.
tr -d \r < windows.txt > linux.txt

tr
tr uma abreviatura para a palavra translate (traduzir) e substitui um conjunto de caracteres por outro. Pode tambm remover caracteres ou pegar mltiplas ocorrncias deles e substitulas por uma nica. Em todos os casos, os dados so tirados do stdin (a entrada padro) e mandados ao stdout (a sada padro). Com freqncia usam-se tradues para demonstrar o processamento do rot13 (www.rot13.com/info.php ) ou para converter texto em caixa baixa. Nesses casos, ambos os conjuntos de caracteres devem ter o mesmo tamanho.
# podemos usar a abreviao A-Z # ao invs do alfabeto completo $ tr [A-Z] [a-z] <um_arquivo_ U qualquer> o_mesmo_arquivo_todo_ U em_minsculas $ tr [a-zA-Z] [n-za-mN-ZA-M] U <um_arquivo_qualquer> o_mesmo_ U arquivo_codicado_em_rot13

Voltando a nosso reparador de nomes de arquivo de que tratamos acima, podemos tambm decidir remover os caracteres problemticos em vez de troc-los. Dado:
$ uname -v | tr -c -d [:alnum:] 44SMPSunDec28190754GMT2003

Qualquer pessoa com privilgios de superusurio pode recompilar um arquivo magic.mgc executando o comando a seguir:
$ le -C

O Squeezing (aperto) uma tcnica til para comprimir diversos caracteres repetidos em um s. Podemos uslo para substituir mltiplas linhas em branco num arquivo por uma nica quebra de linha.
$ tr -s \n < arquivo_com_ U linhas_vazias > arquivo_com_ U menos_linhas_vazias

which
Os comandos do Linux esto espalhados por caminhos diferentes. Meu sistema, atualmente, tem 2242 comandos em sete diretrios diferentes! (pressione a tecla tab duas vezes e deixe que o tab completion lhe mostre quantos esto disponveis em seu computador, seguido por echo $PATH para ver onde procurar por eles). O trabalho do comando which

Note que, quando redirecionamos tanto a entrada como a sada, os nomes devem ser diferentes. Isso ocorre porque o redirecionamento trunca o arquivo de destino para zero antes que o comando seja executado. Para substituir o arquivo original, voc pode incluir esse

60
edio 05
www.linuxmagazine.com.br


Ferramentas poderosas do Linux SYSADMIN
comando em um pequeno script que use mktemp para gerar um nome de arquivo temporrio e nico. Para um plano de backup mais abrangente, cada arquivo pode ser copiado em outro diretrio e receber uma extenso .bak. At onde aprendemos, isso no possvel, pois os argumentos so apenas adicionados ao m do comando. Porm, isso possvel graas a uma opo que nos permite colocar o argumento em qualquer lugar dentro da cadeia de caracteres.
$ xargs -i cp {} backup/{}.bak U < listabecape nd /home -perm +4000 | xargs U ls -l > arq.perigosos

nd e xargs
Esses programas cam muito bem juntos, mas no impossvel v-los separados. Sozinho, o xargs executa um comando usando argumentos passados pela entrada padro. Quando esses dados de entrada so redirecionados a partir de um arquivo, muito fcil realizar processamento idntico em muitos arquivos. Por essa razo, podemos encontrar algumas similaridades com o (mais antigo) programa fmt.
$ cat lista alfa beta gama $ xargs md5sum < lista

Ou criar uma lista de checksums de referncia para os arquivos de sistema.


nd / -user root -type f | U xargs -l 1 md5sum

Aqui xargs executar o comando md5sum nos arquivos chamados alfa , beta e gama. Esses argumentos so anexados ao nal da instruo md5sum e seriam equivalentes a
$ md5sum alfa beta gama

Porm, tambm possvel combinar esses argumentos em grupos de tamanho especco. Isso no apenas bom para evitar o erro too many arguments, como pode ter tambm outros usos produtivos. Considere um arquivo chamado copiararquivos, parecido com isso:
$ cat copiararquivos arquivo1 novoarq1 arquivo2 novoarq2 arquivo3 novoarq3

A opo -i diz duas coisas. Primeiro, indica qual smbolo marcador usado no lugar do argumento. Se nenhum for fornecido, o padro ser {}. Em segundo lugar, pega cada linha dos dados de entrada e a usa como um argumento, substituindoa sempre que aparece {}. No -n 1, mas outra opo -l 1, que divide o argumento de acordo com linhas, no com palavras. Essa uma importante distino para nomes de arquivos que incluem espaos, que de outra forma seriam tratados como dois arquivos diferentes. Menos secreta a aliana entre xargs e nd. Ao usar nd para gerar um certo nmero de arquivos para a sada padro, podemos jog-los no xargs e processar cada arquivo de acordo. Uma vez que o xargs permite que os argumentos sejam agrupados, ele muito mais exvel do que usar a opo -exec do prprio nd. Essa combinao permite que os administradores de sistema realizem uma bela mgica, algo como ser capazes de car de olho em arquivos malvolos com o bit suid ligado.

Por padro, xargs usa um espao para separar os nomes de arquivo. Uma vez que possvel incluir espaos nos nomes de arquivo do Linux, isso pode causar um problema (como j vimos) se um arquivo se chamar meu arquivo, j que o xargs o tratar como dois arquivos separados (meu e arquivo). Para evitar isso, precisamos mudar o separador para um outro caractere. Tanto o nd quanto o xargs tm a opo de usar o caractere NUL, evitando assim o problema.
nd . -print0 -type f | U xargs -0 echo

O comando nd um companheiro melhor para o xargs do que o ls porque informa o caminho completo do arquivo. Para usar ls e xargs necessrio permanecer no diretrio atual.

cut
cut um programa usado para extrair colunas de dados da sada. Um uso popular desse comando extrair informao de comandos como ls e ps, naturalmente tabulados. Por padro, as colunas so consideradas separadas pela presena de uma tabulao. Porm, pode-se mudar isso para qualquer caracter ou smbolo arbitrrio com a opo

Tabela 2: Argumentos Secretos


Argumento unzip -a echo -n cat -n tail +2 grep -v Descrio Converte todos os arquivos de texto para as quebras de linha no estilo Unix (sem ^M) ao descomprimir. Usado sozinho produzir arquivos com tamanho zero (sem o -n o arquivo conter um nico caractere de quebra de linha). Mostra nmeros antes de cada linha no arquivo. til para vericar listagens de programas. Para numerar apenas as linhas no vazias use -b. Exibe todo o arquivo a partir da segunda linha. til para remover os cabealhos de programas como ls e ps. Em vez de exibir todas as linhas que incluem a palavra sendo pesquisada, a opo -v fora o grep a mostrar as linhas que NO contm o padro. Por exemplo, grep -v grep ignora a palavra grep na pesquisa til para ltar a sada do comando ps. Lista cada nome de arquivo em sua prpria linha, sem o cabealho total.

muito fcil, nesse caso, agrup-los em pares e realizar um backup rudimentar.


$ xargs -n 2 cp < copiararquivos

o que seria equivalente a:


$ cp arquivo1 novoarq1 $ cp arquivo2 novoarq2 $ cp arquivo3 novoarq3

ls -1

www.linuxmagazine.com.br

edio 05

61


SYSADMIN Ferramentas poderosas do Linux
-d . Cada coluna chamada campo ; possvel liberar campos individuais ou grupos deles usando -f.
$ ls -l | tail +2 | tr -s | U cut -d -f 3 | sort | uniq root estevao

Alm de procurar mensagens ocultas em bibliotecas e hackear arquivos binrios, strings pode ser usado, mais sensatamente, para descobrir quais so os arquivos de congurao usados por um executvel.
$ strings `which dict` | U grep conf sysconf -c --cong <le> specify U conguration le /etc/dict.conf No conguration

$ script Script started, U le is typescript

O exemplo acima usa um pouco mais de massagem, primeiramente para remover a linha inicial de ls (tail +2, ver Tabela 2) e em seguida para comprimir os espaos entre cada campo em um s (tr -s). A partir da, o cut simplesmente exibe o campo trs (o nome do usurio) de cada arquivo do diretrio. Como provavelmente h uma poro de duplicadas, devemos separar com o comando sort os nomes em ordem alfabtica e usar uniq, que funciona como a compresso do tr, mas age sobre linhas sucessivamente idnticas. cut pode exibir mltiplos campos aplicando a opo -f com uma vrgula (que d apenas as colunas pedidas) ou um hfen (que mostra cada coluna e todas as intermedirias).
# Mostra a hora e a data de # todos os arquivos $ ls -l | tail +2 | tr -s | U cut -d -f 6-8

Nossa fornada seguinte de ferramentas tem um alcance muito maior. Raramente as usamos encadeadas com outras ferramentas (usando como duto o caracter | ) ou redirecionando suas entradas e sadas (com < e > ), pois elas possuem um completo (e numeroso) conjunto de instrues cada uma. Porm, no se afastam muito daquela velha loso a de fazer uma coisa s mas faz-la bem.

Ao Servio Secreto de Sua Majestade

para comear e control+D (o cdigo EOF) para terminar. A pgina de manual d um exemplo muito bom de script atravs do qual voc pode permitir que uma pessoa monitore seu trabalho em tempo real. Ele faz isso com a criao de um FIFO (um named pipe ou duto identicado, arquivo que permite a comunicao entre dois processos) e, enquanto o programa de script escreve informao nele, outro usurio pode l-lo, dessa forma:
# Primeira pessoa $ mkfo watch_me; script -f U watch_me # Segunda pessoa $ tail -f watch_me

screen
Esse item foi tratado mais detalhadamente em [1], [2] e [3], mas, para recapitular, screen permite criar diversos consoles virtuais de dentro de uma nica sesso de terminal. Cada console capaz de rodar programas, independentemente dos outros, em sua prpria janela mesmo depois de o usurio sair (log out) da sesso. Usando o screen voc pode controlar diversos consoles com apenas uma conexo e, caso se desconecte, reconectar-se a cada um deles posteriormente.

script
O utilitrio script tem uma grande semelhana com tee. Ambos pegam a entrada padro e a retransmitem em duas streams diferentes de sada (a sada padro e um arquivo). Porm, o primeiro ganhou um lugar nesta lista porque ainda se tem um shell interativo disposio. Desse modo, voc pode continuar a trabalhar e tudo o que for ecoado na tela (o que inclui os comandos, mas no as senhas, que voc digitar) ser armazenado num arquivo de registro para exame e estudo posterior. O script muito simples de usar. Basta digitar o comando:

strings
Esta prtica ferramenta busca por strings de texto em um arquivo. Diferente do grep, que funciona muito bem para isolar pedaos especcos de texto, a fama do strings est na fora bruta. Ele pode extrair todo o texto de qualquer arquivo, incluindo binrios. Analisa o arquivo inteiro e exibe qualquer caractere imprimvel que aparea consecutivamente com, ao menos, trs outros.

Macaco Simo
Alm dos programas listados acima, h muitos outros brindes disponveis dentro do prprio shell bash. Pipes, redirecionamentos e substituio de comandos, para citar apenas trs. Para mostr-los todos, seria preciso escrever um livro. Destacar alguns pareceria favoritismo. Porm, antes de terminar, deixem-me mencionar dois de meus segredos favoritos...

Listagem 2: Chaves
# Primeiro com um subshell... $ ( PATH=/usr/special/bin:$PATH; special_command; ) $ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games # ...e agora sem. $ { PATH=/usr/special/bin:$PATH; special_command; } $ echo $PATH /usr/special/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games

(Parnteses)
Colocar um comando entre parnteses faz com que ele seja rodado em um subshell. Esse comando pode incluir vrias instrues diferentes separadas por ponto e vrgula ou novas linhas. Isso os torna muito teis para combinar a sada padro de diferentes fontes.

62
edio 05
www.linuxmagazine.com.br


SYSADMIN
$ (echo 1; echo 2; ) 1 2

Tabela 3: Os Top 10
Comando apropos whatis le which tr nd e xargs cut script screen strings

Se for preciso combinar vrios comandos, mas voc no considera necessria a codicao extra de criar um subshell, pode usar chaves no lugar. Como no se cria nenhum subshell, variveis de ambiente e caminhos de diretrio podem ser modicados e tambm se manifestaro fora das chaves. Veja um exemplo na listagem 2.

Substituio de processo
H um mtodo no qual os resultados de um comando podem ser enviados a outro, como se a sada padro fosse um arquivo. Isso pode ser representado numa escala, de forma que a sada de dois comandos diferentes pode ser enviada a um outro para mais processamento. As cadeias de sada so colocadas num arquivo temporrio (o j conhecido named pipe), possibilitando que sejam usadas com comandos que exigem um nome de arquivo ou em lugares em que as crases no funcionam. Portanto, para determinar a diferena que a opo -e faz no apropos, poderamos digitar:
$ diff <(apropos passwd) U <(apropos -e passwd)

Quadro 1: No apenas, mas tambm


Dentre os muitos programas apresentados neste artigo, h alguns a que apenas aludimos. Como tudo o mais que foi exposto aqui, voc colher melhores frutos atravs de suas prprias experincias. Para saber onde comear a procurar, d uma olhada nesses comandos: reset uname mktemp fmt md5sum sort uniq mkfo grep dict

Note que no h espao entre < e ( em nenhum caso.

INFORMAO
[1] Screen: Linux Magazine Internacional, Edio 41, pgina 46 [2] Screen (janelizando o modo texto parte 1): http://www.aurelio.net/coluna/ coluna07.html [3] Screen (janelizando o modo texto parte 2): http://www.aurelio.net/coluna/ coluna08.html [4] Curso de Shell Script Julio Cezar Neves Linux Magazine Brasil, ed. 1 a 5. Quando operrios vo a um bar, eles falam sobre futebol. Portanto, presume-se que, quando jogadores de futebol vo a um bar, eles falem sobre os operrios! Mas quando Steven Goodwin vai a um bar ele no fala nem sobre futebol, nem sobre operrios. Ele, invariavelmente, fala sobre computadores...

Tocata e fuga
Neste artigo vimos uma poro de comandos muito teis. H mais por a para voc descobrir. Alguns so mencionados brevemente no texto (e tambm no quadro 1: No apenas, mas tambm). Alm disso, h muitos segredos escondidos que, se olharmos bem, esto debaixo de nossos narizes! A nal de contas, a maioria das ferramentas tem muitos argumentos de linha de comando. Muitos deles jamais sero necessrios. Alguns foram provavelmente esquecidos por todos, exceto pelo autor original. Porm, h algumas jias escondidas que merecem ser descobertas, como se pode ver na tabela 2. Voc j sabe onde comear a procurar; desejo que tenha sucesso nas buscas. Divirta-se!

SOBRE O AUTOR

edio 05

63

Você também pode gostar