Saltar para o conteúdo
101 · LPIC-1 (parte 1)

104.7 Localização de arquivos de sistema

TópicoT23ObjetivoUsar comandos de busca para localizar arquivos no sistema de arquivosPeso2PáginasLPIC-1 (101) - Version 5.0

Resumo Conciso

Comandos de Busca

ComandoFunção
findBuscar arquivos por critérios variados
locateBuscar arquivos usando banco de dados
updatedbAtualizar banco de dados do locate
whichCaminho completo de um executável
whereisLocalização de binários, manual e código-fonte
typeTipo e localização de um comando

Filesystem Hierarchy Standard (FHS)

DiretórioFunção
/Raiz da hierarquia
/binBinários essenciais para todos os usuários
/bootArquivos de inicialização (kernel, initrd)
/devArquivos de dispositivos (físicos e virtuais)
/etcArquivos de configuração do hospedeiro
/homeDiretórios iniciais dos usuários
/libBibliotecas compartilhadas para /bin e /sbin
/mediaMídias removíveis montadas pelo usuário
/mntPontos de montagem temporários
/optPacotes de software opcionais
/rootDiretório inicial do superusuário
/runDados variáveis de tempo de execução
/sbinBinários do sistema
/srvDados de serviços (ex: /srv/www)
/tmpArquivos temporários (limpo na inicialização)
/usrDados de usuários de apenas leitura
/procSistema de arquivos virtual (processos)
/varDados variáveis (logs, cache, fila, etc.)

Locais de Arquivos Temporários

DiretórioComportamento
/tmpPode ser limpo na inicialização
/var/tmpNão deve ser limpo na inicialização
/runLimpo na inicialização (anteriormente /var/run)

Parâmetros do find

ParâmetroFunção
-name PATTERNBuscar por nome (diferencia maiúsculas)
-iname PATTERNBuscar por nome (não diferencia maiúsculas)
-maxdepth NProfundidade máxima de busca
-mindepth NProfundidade mínima de busca
-mountNão mergulhar em FS montados
-fstype TYPERestringir a tipo de FS
-user USERNAMEArquivos de um proprietário
-group GROUPNAMEArquivos de um grupo
-readableArquivos legíveis pelo usuário atual
-writableArquivos graváveis pelo usuário atual
-executableArquivos executáveis pelo usuário atual
-perm NNNNPermissão exata
-perm -NNNNPelo menos essa permissão
-emptyArquivos/diretórios vazios
-size N[c,k,M,G]Tamanho específico
-size +N / -size -NMaior/menor que N
-amin NAcessados há N minutos
-cmin NAtributos alterados há N minutos
-mmin NModificados há N minutos
-atime NAcessados há N*24 horas
-ctime NAtributos alterados há N*24 horas
-mtime NModificados há N*24 horas

Parâmetros do locate

ParâmetroFunção
-iNão diferenciar maiúsculas de minúsculas
-AArquivos que correspondam a TODOS os padrões
-cContar arquivos correspondentes
-eVerificar se o arquivo existe (banco de dados pode estar desatualizado)

Parâmetros do updatedb (/etc/updatedb.conf)

VariávelFunção
PRUNEFS=Tipos de FS ignorados (ex: NFS, nfs)
PRUNENAMES=Nomes de diretórios ignorados
PRUNEPATHS=Caminhos ignorados
PRUNE_BIND_MOUNTS=yes/no — ignorar bind mounts

Parâmetros do which

ParâmetroFunção
-aMostrar todos os caminhos para o executável

Parâmetros do whereis

ParâmetroFunção
-bApenas binários
-mApenas páginas de manual
-sApenas código-fonte

Parâmetros do type

ParâmetroFunção
-aMostrar todos os caminhos
-tTipo de arquivo (alias, keyword, function, builtin, file)

Comandos Comuns de Busca

bash
# find — buscar arquivos .jpg no diretório atualfind . -name '*.jpg'# find — busca case-insensitivefind . -iname '*.jpg'# find — limitar profundidadefind . -maxdepth 2 -name '*.txt'# find — por atributosfind ~ -iname "*report*" -perm 0644 -atime 10 -size +1M# find — por tempo e tamanhofind . -mtime -1 -size +100M# locate — buscar padrãolocate jpg# locate — case-insensitivelocate -i .jpg# locate — múltiplos padrões (AND)locate -A .jpg .zip# locate — contarlocate -c .jpg# which — caminho do executávelwhich bash# which — todos os caminhoswhich -a mkfs.ext3# whereis — binário + manual + fontewhereis locate# whereis — apenas manualwhereis -m ifconfig# type — tipo de comandotype -t locatetype -t ll

Exercícios Exploratórios

Exercício Exploratório 1 — locate com arquivos existentes

Enunciado: Quando locate é usado, os resultados são puxados de um banco de dados gerado por updatedb. No entanto, este banco de dados pode estar desatualizado, fazendo com que o locate mostre arquivos que não existem mais. Como fazer com que locate mostre apenas arquivos existentes em sua saída?

Adicione o parâmetro -e a locate:

bash
locate -e PATTERN

Exercício Exploratório 2 — find com maxdepth e mount

Enunciado: Encontre qualquer arquivo no diretório ou subdiretórios atuais até 2 níveis abaixo, excluindo sistemas de arquivos montados, que contenham o padrão Status ou statute em seus nomes.

Lembre-se de que para -maxdepth também devemos levar em conta o diretório atual, de forma que queremos três níveis (o atual, mais 2 níveis para baixo):

bash
find . -maxdepth 3 -mount -iname "*statu*"

Exercício Exploratório 3 — find com fstype, permissões e tempo

Enunciado: Limitando a pesquisa aos sistemas de arquivos ext4, encontre quaisquer arquivos sob /mnt que tenham no mínimo permissões de execução para o grupo, sejam legíveis para o usuário atual e tenham tido qualquer atributo alterado nas últimas 2 horas.

Use o parâmetro -fstype para limitar a tipos específicos de sistemas de arquivos. Um arquivo legível pelo usuário atual teria ao menos 4 no primeiro dígito de permissões, e um executável pelo grupo teria ao menos 1 no segundo dígito:

bash
find /mnt -fstype ext4 -perm -410 -cmin -120

Exercício Exploratório 4 — Arquivos vazios antigos

Enunciado: Encontre arquivos vazios que foram criados há mais de 30 dias e estão pelo menos dois níveis abaixo do diretório atual.

bash
find . -empty -mtime +30 -mindepth 3

Exercício Exploratório 5 — Arquivos legíveis por grupo

Enunciado: Considere que os usuários carol e john fazem parte do grupo mkt. Encontre no diretório pessoal de john quaisquer arquivos que também possam ser lidos por carol.

Considerando que os dois são membros do mesmo grupo, precisamos de pelo menos um r (4) nas permissões de grupo:

bash
find /home/john -perm -040