A arte da procura em Linux
Quantas vezes já não tiveste que procurar por aquele ficheiro de configuração, ou por aquele cartoon que guardaste sabes lá onde, e que teimam em se esconder nas pastas mais obscuras do teu sistema? Primeiro começas por ir àquelas pastas do costume, mas é claro que não vais encontrar nada. Lá tens de recorrer ao Beagle ou ao Google Desktop para encontrar o material. Mas ter que ter um destes programas a correr no teu sistema, acaba por se tornar um pouco incomodativo. Pequenas paragens ou respostas mais lentas enquanto trabalhas com o mail ou com outro programa, os indexes a crescerem e facilmente atingirem mais de 1 Giga de espaço na tua /home, o receio que o Big Brother sediado na Google esteja a olhar para as tuas coisas.
E porque não usar as excelentes ferramentas que o GNU/Linux te disponibiliza à distancia duma teclada? O comando "ls" é um bom ponto de partida:
E porque não usar as excelentes ferramentas que o GNU/Linux te disponibiliza à distancia duma teclada? O comando "ls" é um bom ponto de partida:
$ ls *tux*
e lista-te todos os ficheiros que tenham "tux" no seu nome. Ou então:
$ ls */*tux*
e vai-te listar todos os ficheiros que tenham "tux" no seu nome, nas subdirectorias da corrente pasta. E podes refinar melhor a procura usando algo como:
$ ls *tux* */*tux* */*/*tux*
Mas se quiseres procurar em todo o sistema de ficheiros por um ficheiro, a solução já é o "slocate":
$ slocate tux
e procurar-te-á por todos os ficheiros que tenham o "tux" no seu nome. E este comando é rápido porque usa um index de nomes. Esse index é criado pelo "updatedb" que normalmente é executado uma vez por dia pelo "cron" ou o "anacron" e o index fica localizado, no caso do Ubuntu, na /var/lib/slocate/slocate.db. O único contra do "slocate" é que ele não encontrará ficheiros que tenham sido criados após o "updatedb" ter sido executado. A letra "s" do "slocate" é de "secure" e o "updatedb" tem de ser executado com previlégios de root o que garante que irá ver todos os ficheiros.
Mas há mais ferramentas, e mais especializadas. O "whereis" procura por ficheiros executáveis, códigos fonte e documentação (man pages). Ele procura em pastas pré-determinadas por isso a seleção na procura. Exemplo.
Mas há mais ferramentas, e mais especializadas. O "whereis" procura por ficheiros executáveis, códigos fonte e documentação (man pages). Ele procura em pastas pré-determinadas por isso a seleção na procura. Exemplo.
$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
Ou seja, diz-nos onde está o executável (binário) e o manual dele. O comando "which" ainda é mais especializado, pois procura por um binário específico dando como resultado o primeiro resultado que encontra:
$ which eog
/usr/bin/eog
Tentando explicar melhor comando "which" acima, ele responde a perguntas como esta: "Se eu der o comando "eog", onde está o programa que irá ser executado?"
E chegamos à nata dos programas de busca, o "find". Com este comando podemos localizar qualquer ficheiro pelo dono, permissões de acesso, pelo último acesso, tamanho, e muito mais! Só que toda esta flexibilidade paga-se em complexidade de utilização, mas também não é nada do outro mundo. Um exemplo:
$ find /etc -name '*.conf' -user cupsys -print
find: /etc/ssl/private: Permission denied
find: /etc/cups/ssl: Permission denied
/etc/cups/cupsd.conf
/etc/cups/printers.conf
Neste exemplo, fez-se uma procura na pasta /etc por ficheiros de configuração *.conf e pertençam ao utilizador cupsys (sistema de impressão). A opção "-print" irá fazer com que o resultado da busca seja imprimido na consola, mas se não estiver nenhuma opção de output, o "find" assume o "print" por omissão. Basicamente o "find" funciona da seguinte forma:
find (onde procurar) (o que procurar) (o que fazer com a procura).
Exemplos:
1- Procurar por aqueles ficheiros .ppt de arte nua, na nossa querida /home:
$ find ~ -name '*.ppt'find
Exemplos:
1- Procurar por aqueles ficheiros .ppt de arte nua, na nossa querida /home:
2- Procurar na pasta /var por pastas ou directorias E que pertençam ao daemon:
$ find /var -type d -user daemon3- Procurar na pasta /etc por ficheiros que pertençam à conta cupsys OU estejam vazios:
$ find /etc -user cupsys -or -size 04- Procurar por ficheiros na pasta /bin que NÃO pertençam ao root:
$ find /usr/bin ! -user root5- Procurar por ficheiros na nossa querida /home, que tenham sido modificados à menos de 10 minutos, à mais de um ano e à exactamente 4 dias (o sinal + antes do número significa "mais de...", se for o sinal - já significa "menos de ...", mas se não houver sinal + ou -, o "find" procurará exactamente esse número):
$ find ~ -mmin -10$ find ~ -mtime +365
$ find ~ -mtime 4
6- Procurar por ficheiros na nossa valiosa /home que tenham a característica de ter as permissões 644 (num ls -l seria algo como: rw-r--r--):
$ find ~ -perm 6447- Usando outra opção de output que não a impressão do resultado. Neste exemplo, o resultado da busca é movido para uma pasta de backup. De notar que o ";" é para assinalar o fim do comando que precede o -exec.
$ find ~ -mtime +365 -exec mv {} /tmp/meubackup \;Além -print e do -exec ;, também se pode usar o -ls ou o -delete, no output do comando "find".
Tudo isto foram exemplos de como achar ficheiros da mais variada forma no sistema, mas para procurar dentro no conteúdo dos ficheiros? É aí que entra o famoso "grep". Um exemplo onde se procura por ficheiros que contenham a string "Tux" nessa pasta e num nível abaixo dela (*/*) :
Tudo isto foram exemplos de como achar ficheiros da mais variada forma no sistema, mas para procurar dentro no conteúdo dos ficheiros? É aí que entra o famoso "grep". Um exemplo onde se procura por ficheiros que contenham a string "Tux" nessa pasta e num nível abaixo dela (*/*) :
$ grep -l Tux */*
Apanhados/HIV .jpg
Apanhados/wtc-photo.jpg
grep: backup/lost+found: Permission denied
Blogs/old.txt
Blogs/old.txt.save
Imagens/gnome_erro.ogg
...
Ainda mais selectivo na procura, agora só em ficheiros .txt:
$ grep -l Tux *.txt
nautilus-debug-log.txt
E para procuras mais precisas, juntam-se os comandos "find" e "grep". Neste exemplo, procura-se na nossa amada /home por ficheiros cujo nome terminem em .txt e que contenham a string "Tux":
$ find ~ -name '*.txt' -exec grep -q Vermelho {} \; -print
Concluo com um Boas procuras!!
Fonte: Linux Format
Fonte: Linux Format
7 comentários:
08 janeiro, 2008 01:22
Tutorial porreiro.
Cumprimentos e bom Ano Novo ;-)
08 janeiro, 2008 08:39
Mt bom :-)
08 janeiro, 2008 10:21
Caro Tuxer, apenas uma dicas do Júlio César Neves quanto ao uso do find com exec, segundo ele o find combinado com
xargs é mais eficiente, veja:
http://www.dicas-l.com.br/dicas-l/20050226.php
08 janeiro, 2008 14:12
Clap! Clap! Clap!
Já gravei nos bookmarks.
Obrigado.
08 janeiro, 2008 14:28
Ainda me deu trabalho a fazer este tutorial, por isso mais contente fico pelos agradecimentos...
08 janeiro, 2008 16:48
Excelente material :)
Quando tiver uma pequena vaga, tenho que fazer referencia o meu blog a este teu artigo.
1abraçol
09 janeiro, 2008 20:18
Como somos todos preguiçosos e não lemos o manual, este tutorial dá muito jeito.
Enviar um comentário