Arquivo 2011

Comando find

O comando find é uma opção muito eficiente e quando deseja-se encontrar arquivos no Linux em modo texto. O mesmo vem presente na maioria das sistribuições atuais. Porém caso o comando find não esteja disponível na sua distribuição basta instalar o pacote findutils. Abaixo veremos algumas formas e exemplos de sua utilização.

Localizando arquivos por nome:

r2d2:~# find / -name sources.list
/usr/share/doc/apt/examples/sources.list
/etc/apt/sources.list

Em nosso exemplo, foi efetuada a busca em todo o sistema diretamente da raiz (/). O comando find é case sensitive, ou seja o mesmo diferencia letras maiúsculas e minúsculas. Imagine se quisermos localizar o arquivo README em /etc/init,d. Se fizermos com a mesma linha de comandos acima, teremos uma busca sem resultados, quando este tipo de busca for necessária, deve ser utilizando o parâmetro iname ao invés de name, como abaixo:

r2d2:~# find /etc/init.d/ -iname readme
/etc/init.d/README

Esta opção é mais indicada em caso de buscas mais precisas, pois com ela o sistema não irá diferenciar letras maiúsculas e minúsculas, portanto a dica é que em caso de dúvidas utilize a opção iname. Uma outra observação é que podemos informar o diretório onde será realizada a busca, no caso da procura pelo arquivo README, efetuamos a busca em /etc/init.d.

Localizando arquivos por usuários

Com o exemplo abaixo, efetuamos a busca por usuário, onde o procuramos no diretório /var por arquivos que tenham o usuario leandro como dono.
r2d2:~# find /var -user leandro
/var/spool/cron/crontabs/leandro
/var/mail/leandro
Da mesma forma em que foi efetuada a busca por usuários, é possível executar a busca por grupos facilmente, bastando apenas executar a referida linha de comandos com a opção -group ao invés de -user para localizarmos os arquivos pertencentes ao grupo citado. Abaixo temos também um exemplo, onde procuramos em /var arquivos pertencentes ao grupo xrdp que é uma alteranativa de acesso remoto ao VNC para Linux.

r2d2:~# find /var -group xrdp
/var/run/xrdp
/var/log/sesman.log

Uma outra utilizada é efetuar uma busca por tamanho, está pode ser útil em uma ocasiao onde temos que eliminar rapidamente espaço em disco seja por qual for o motivo. Se esta for sua necessidade o comando find também pode ser útil, para tal tarefa deve ser utilizado o parâmetro -size. Abaixo localizamos arquivos com mais de 5G em nosso sistema:

r2d2:~# find / -size +5G
/home/leandro/.VirtualBox/VDI/Microsoft Windows XP Professional.vdi

Neste caso, foi encontrado um arquivo de disco virtual do Oracle VirtualBox. Da mesma forma em que utilizamos a busca por aquivos contento mais de 5GB em nosso sistema, poderíamos efetuar a busca utilizando por Kilobytes utilizando o sub-parâmetro k (minúsculo) e para Megabytes o parâmetro M (maiúsculo), preste atenção na hora de executar estes sub-parâmetros do comando find, pois o comando find é case-sensitive, ou seja diferencia caracteres maiúsculos e minúsculos.

Bash – Atalhos

Uma funcionalidade muito interessante no bash, é a capacidade de trabalhar com atalhos, estes são muito úteis em momentos em que necessitamos de agilidade, abaixo mostramos alguns deles:

Crtl + a: Início da linha
Ctrl + e: Final da linha
Ctrl + b: Anda para tras
Ctrl + f: Anda pra frente

Ctrl + k: Apaga tudo a frente do cursor
Ctrl + w: Apaga tudo a tras do cursor
Ctrl + u: O meso que ctrl + w
Ctrl + h: Apaga para tras do cursor um por um
Ctrl + d: Apaga para frente do cursor um por um

Ctrl + r: Busca

Ctrl + l: Limpa tela

Contando linhas

Em muitos casos, pode ser necessário conhecimento da quantidade de linhas de um arquivo, como por exemplo,a quantidade de usuaŕios em nosso sistema com permissão ao shell /bin/bash, abaixo temos um exemplo prático com o comando wc juntamente com o grep:

host:~# grep bash /etc/passwd |wc -l
6

Neste exemplo, possuimos 6 usuários com permissão de utilizar o shell /bin/bash, da mesma forma, dependendo da necessidade podem ser utilizados outros critérios. A linha de comandos acima, filtrou utilizando o comando grep, o arquivo /etc/passwd buscando  por linhas que contém a palvra bash, em seguida a saída do comando foi redirecionada para o comando wc utilizando a opção -l, que tem a função de contar as linhas.

Editando arquivos

Neste artigo, será apresentada uma função interessante do comando sed, que é a possibilidade de editar arquivos em modo texto. Neste artigo, será apresentada uma função interessante do comando sed, que é a possibilidade de editar arquivos em modo texto. para maior entendimento o exemplo aqui descrito, tratará da edição de um arquivo de sistema, o arquivo /etc/resolv.conf. para isso, é necessário efetuar backup do arquivo original, e executar todos os comandos com o usuário root.

No primeito exemplo, iremos analisar como editar o arquivo /etc/resolv.conf, modificando o parâmetro nameserver, primeiramente, vamos listar o arquivo em seu formato original:

host:~# cat /etc/resolv.conf
domain minimedia.com.br
search   minimedia.com.br
nameserver 192.168.0.1

Em seguida executaremos a seguinte linha de comandos:

host:~# sed 's/192.168.0.1/192.168.0.200/' /etc/resolv.conf
domain minimedia.com.br
search  minimedia.com.br
nameserver 192.168.0.1
Podemos verificar que o parâmetro nameserver foi alterado de 192.168.0.1 para 192.168.0.200, porém desta forma não efetuamos a edição do arquivo, a seguir segue mais um exemplo de como alterar o arquivo /etc/resolv.conf:
host:~# sed 's/192.168.0.1/192.168.0.200/' /etc/resolv.conf >> /tmp/resolv.conf.tmp
Redirecionamos a saída do comando sed para o arquivo temporário /tmp/resolv.conf.tmp, isso utilizando o comando sed em apóstrofos.

Após a execução da linha de comandos acima, o próximo passo será copiar o arquivo temporário, para o arquivo original:

host:~# cp /tmp/resolv.conf/tmp /etc/resolv.conf

Com o comando acima, foi substituído o arquivo temporário pelo original, a seguir listamos o arquivo alterado:

host:~# cat /etc/resolv.conf
domain minimedia.com.br
search   minimedia.com.br
nameserver 192.168.0.200

Como podemos ver, o arquivo /etc/resolv.conf foi alterado, nosso próximo passo, é desenvolver um script para tal função, para tanto vamos iniciar a criação do script:

host:~# touch alter-resolv.sh
host:~# chmod +x  alter-resolv.sh

Acima com o comando touch, foi criado o script alter-resolv.sh e em seguida adicionada permissão de execução ao mesmo, o conteúdo do arquivo deve ser o seguinte:

#!/bin/bash

ATUAL=`grep nameserver /etc/resolv.conf |cut -d " " -f2`

sed s/$ATUAL/\/ /etc/resolv.conf > /tmp/resolv.conf.tmp

cp /tmp/resolv.conf.tmp /etc/resolv.conf

rm -rf /tmp/resolv.conf.tmp

Após criado e com permissão de execução, o script deve ser executado da seguinte forma:

host:~# ./alter-resolv.sh

Exemplo:

host:~# ./alter-resolv.sh 192.168.0.200

O comando sed possui diversas utilidades, para aqueles que desejam se aprofundar mais em programação em shell script, é fortemente recomendada uma visita ao site do sed ( http://sed.sourceforge.net ), e também de sua página de manual.