quinta-feira, 22 de janeiro de 2009

Pesquisa de arquivos e diretórios

Para fazer pesquisas no sistema de arquivos do linux podemos utilizar basicamente dois comandos: locate e find. O locate depende de uma base de dados que é atualizada pelo comando updatedb. Já o find faz a busca em tempo real sem pesquisar em base de dados, ele varre o disco a procura da expressão passada como parâmetro, por isso é mais lento, porém mais preciso. Uma prática interessante é executar o comando updatedb toda vez que inicializar o sistema operacional, dessa forma a base de dados de pesquisa do comando “locate” estará sempre atualizada. Diferente do comando “find”, o comando locate não necessita do caminho inicial de pesquisa, como a pesquisa é feita numa base de dados, ele admite que a pesquisa é feita a partir da raiz.

Nome: locate
Definição: procura arquivos ou diretórios pelo nome. O locate pesquisa em uma ou mais bases de dados de informações de arquivos e diretórios em busca do nome passado como parâmetro.
Sintaxe: locate [opções] [expressão]
Opções:
-c Exibe apenas a quantidade de resultados da busca;
-e Exibe apenas os arquivos existentes no momento; Como a busca do locate é feita em uma base de dados, um arquivo que é apagado constará na base de dados até que seja executado o comando updatedb, no entanto, se for utilizada a opção -e o resultado só exibirá os arquivos existentes.
-i Ignora se as letras são maiúsculas ou minúsculas;
-0 Exibe os resultados um ao lado do outro ao invés de linha a linha;

Exemplos:
#locate home (Exibe linha a linha todos os resultados que contém a palavra home);
#locate -c *.conf (Exibe a quantidade de arquivos com a extensão .conf);
#locate -ie x11 (Exibe os resultados somente de arquivos existentes em disco da expressão x11 tanto maiúsculos como minúsculos);






Nome: find
Definição: Procura por arquivos em uma hierarquia de diretórios.
Sintaxe: find
Opções:
-mount Realiza a pesquisa somente no sistema de arquivo atual, excluindo outros tipos.
-empty Exibe o resultado da pesquisa somente com arquivos e diretórios em branco.
-name Especifica o nome a ser pesquisado. Aceita os metacaracteres ('*', '?', e '[]').
-iname Semelhante ao name porém ignorando se as letras estão em maiúsculas ou minúsculas;
-path Especifica um nome de diretório a ser pesquisado.
-executable Pesquisa por arquivos e diretórios com atributo de execução.
-perm Permite especificar qual a permissão que o arquivo ou diretório a ser pesquisado tem. Pode ser utilizada a notação em octal ex: 755 que equivale a (rwxr-xr-x)
-readable Pesquisa arquivos ou diretórios com permissão de leitura.
-writable Pesquisa arquivos com atributo de escrita.
-size n Pesquisa arquivos pelo tamanho em 'n' unidades. Essas unidades podem ser em bytes, Kilobytes, Megabytes ou Gigabytes utilizando-se respecitvamente os parâmetros c,w,k,M,G.
-user uname Onde uname é o nome do dono do arquivo.
-delete Apaga os arquivos encontrados.
-ls Exibe a saída semelhante a do comando ls -ls.
-type tipo Onde tipo é o tipo do arquivo que será especificado para a pesquisa. Os tipos podem ser 'd' para diretório, 'f' para arquivos regulares e 'l' para link simbólico.

Exemplos:
#find /etc -iname *.conf -ls -size +10k (Exibe no formato do comando 'ls -ls' todos os arquivos com extensão .conf no diretório /etc independente da terem ou não letras maiúsculas no nome e com tamanho maior que 10 Kilobytes).

#find / -user root -ls -empty -delete (Lista todos os arquivos com tamanho zero no formato do comando ls -ls e os apaga)

#find / -executable -type f -name arquivo (Procura por arquivos de nome arquivo no diretório raiz com atributo de arquivo executável).

Um comentário:

Bueno disse...

Ótimo post. Bem fácil de entender. Os exemplos foram muito úteis.