104.7 Lição 1
Certificação: |
LPIC-1 |
---|---|
Versão: |
5.0 |
Tópico: |
104 Dispositivos, sistemas de arquivos do Linux, hierarquia padrão de sistemas de arquivos |
Objetivo: |
104.7 Encontrar arquivos de sistema e colocar arquivos no local correto |
Lição: |
1 de 1 |
Introdução
As distribuições Linux vêm em todas as formas e tamanhos, mas uma coisa que quase todas têm em comum é o fato de seguirem o Filesystem Hierarchy Standard (FHS), que define um “layout padrão” para o sistema de arquivos. Isso simplifica muito a interoperação e administração do sistema. Nesta lição, você aprenderá mais sobre este padrão e como localizar arquivos em um sistema Linux.
O Filesystem Hierarchy Standard
O Filesystem Hierarchy Standard (FHS) é um projeto da Linux Foundation para padronizar a estrutura de diretórios e o conteúdo dos diretórios nos sistemas Linux. A conformidade com o padrão não é obrigatória, mas a maioria das distribuições o segue.
Note
|
Quem quiser saber mais sobre a organização dos sistemas de arquivos pode consultar a especificação do FHS 3.0 specification, disponível em vários formatos em: http://refspecs.linuxfoundation.org/fhs.shtml |
De acordo com o padrão, a estrutura de diretórios básica é a seguinte:
/
-
Este é o diretório raiz, o primeiro da hierarquia. Todos os outros diretórios ficam dentro dele. Um sistema de arquivos muitas vezes é comparado a uma “árvore”; nesse caso, este seria o “tronco” ao qual todos os galhos se conectam.
/bin
-
Binários essenciais, disponível para todos os usuários.
/boot
-
Arquivos necessários ao processo de inicialização, incluindo o disco RAM inicial (initrd) e o próprio kernel do Linux.
/dev
-
Arquivos de dispositivos. Podem ser dispositivos físicos conectados ao sistema (por exemplo,
/dev/sda
seria o primeiro disco SCSI ou SATA) ou dispositivos virtuais fornecidos pelo kernel. /etc
-
Arquivos de configuração específicos ao hospedeiro. Se necessário, os programas podem criar subdiretórios sob
/etc
para armazenar diversos arquivos de configuração. /home
-
Cada usuário do sistema tem um diretório “inicial” para armazenar arquivos pessoais e preferências, a maioria deles localizados sob
/home
. Geralmente, o diretório home tem o mesmo nome do usuário, de modo que o usuário John teria seu diretório sob/home/john
. As exceções são o superusuário (root), que tem um diretório separado (/root
), e certos usuários do sistema. /lib
-
Bibliotecas compartilhadas necessárias para inicializar o sistema operacional e executar os binários que estão em
/bin
e/sbin
. /media
-
Mídias removíveis montadas pelo usuário, como pendrives, leitores de CD e DVD-ROM, disquetes, cartões de memória e discos externos, são montadas aqui.
/mnt
-
Ponto de montagem para sistemas de arquivos montados temporariamente.
/opt
-
Pacotes de software opcionais.
/root
-
Diretório inicial do superusuário (root).
/run
-
Dados variáveis de tempo de execução.
/sbin
-
Binários do sistema.
/srv
-
Dados de serviços fornecidos pelo sistema. Por exemplo, as páginas fornecidas por um servidor web poderiam ser armazenadas em
/srv/www
. /tmp
-
Arquivos temporários.
/usr
-
Dados de usuários de apenas leitura, incluindo dados utilizados por certos utilitários e aplicações secundárias.
/proc
-
Sistema de arquivos virtual contendo dados relacionados a processos em execução.
/var
-
Dados variáveis gravados durante a operação do sistema, incluindo fila de impressão, dados de log, caixas de entrada, arquivos temporários, cache do navegador etc.
Tenha em mente que alguns desses diretórios, como /etc
, /usr
e /var
, contêm toda uma hierarquia de subdiretórios.
Arquivos Temporários
Os arquivos temporários são arquivos usados pelos programas para armazenar dados que serão necessários apenas por um curto período de tempo — por exemplo, dados de processos em execução, logs de falhas, arquivos de rascunho de um salvamento automático, arquivos intermediários usados durante uma conversão, arquivos de cache e assim por diante.
Localização dos arquivos temporários
A versão 3.0 do Filesystem Hierarchy Standard (FHS) define locais padrão para os arquivos temporários nos sistemas Linux. Cada local tem uma finalidade e um comportamento diferentes, e é recomendável que os desenvolvedores sigam as convenções definidas pelo FHS ao gravar dados temporários no disco.
/tmp
-
De acordo com o FHS, não se deve pressupor que os arquivos escritos aqui serão preservados entre as invocações de um programa. A recomendação é que esse diretório seja limpo (todos os arquivos apagados) durante a inicialização do sistema, embora isso não seja obrigatório.
/var/tmp
-
Outro local para arquivos temporários, mas este não deve ser limpo durante a inicialização do sistema, ou seja, os arquivos armazenados aqui geralmente persistem entre as reinicializações.
/run
-
Este diretório contém arquivos variáveis de tempo de execução usados pelos processos ativos, como os arquivos identificadores de processo (
.pid
). Os programas que precisam de mais de um arquivo de tempo de execução podem criar subdiretórios aqui. Este local deve ser limpo durante a inicialização do sistema. Antigamente essa finalidade pertencia a/var/run
e, em alguns sistemas,/var/run
pode ser um link simbólico para/run
.
Observe que nada impede o programa de criar arquivos temporários em outro local do sistema, mas é recomendável respeitar as convenções definidas pelo FHS.
Busca de arquivos
Para pesquisar por arquivos em um sistema Linux, podemos usar o comando find
. Esta é uma ferramenta muito poderosa, rica em parâmetros configuráveis para modificar a saída exatamente de acordo com suas necessidades.
Para começar, o find
precisa de dois argumentos: um ponto de partida e o que procurar. Por exemplo, para pesquisar todos os arquivos no diretório atual (e seus subdiretórios) cujo nome termina em .jpg
, usaríamos:
$ find . -name '*.jpg' ./pixel_3a_seethrough_1.jpg ./Mate3.jpg ./Expert.jpg ./Pentaro.jpg ./Mate1.jpg ./Mate2.jpg ./Sala.jpg ./Hotbit.jpg
Essa busca corresponde a qualquer arquivo cujos últimos quatro caracteres do nome sejam .jpg
, não importa o que venha antes, já que *
é um curinga para “qualquer coisa”. No entanto, veja o que acontece se outro *
for adicionado no final do padrão:
$ find . -name '*.jpg*' ./pixel_3a_seethrough_1.jpg ./Pentaro.jpg.zip ./Mate3.jpg ./Expert.jpg ./Pentaro.jpg ./Mate1.jpg ./Mate2.jpg ./Sala.jpg ./Hotbit.jpg
O arquivo Pentaro.jpg.zip
(destacado acima) não foi incluído na lista anterior, porque embora contenha .jpg
em seu nome, não corresponde ao padrão, já que há caracteres extras depois dele. O novo padrão significa “qualquer coisa .jpg
qualquer coisa”, então ele passa a corresponder.
Tip
|
Lembre-se de que o parâmetro |
A expressão *.jpg
deve ser posta entre aspas simples, para evitar que o shell interprete o padrão como um comando. Experimente sem as aspas e veja o que acontece.
Por padrão, o find
começa no ponto de partida e vai descendo pelos subdiretórios (e subdiretórios desses subdiretórios) encontrados. Para restringir esse comportamento, use os parâmetros -maxdepth N
, onde N
é o número máximo de níveis.
Para pesquisar apenas no diretório atual, usaríamos -maxdepth 1
. Suponha que você tem a seguinte estrutura de diretório:
directory ├── clients.txt ├── partners.txt -> clients.txt └── somedir ├── anotherdir └── clients.txt
Para pesquisar dentro de somedir
, você precisará usar -maxdepth 2
(o diretório atual +1 nível abaixo). Para pesquisar dentro de anotherdir
, -maxdepth 3
seria necessário (o diretório atual +2 níveis abaixo). O parâmetro -mindepth N
faz o contrário, pesquisando apenas em diretórios no mínimo N
níveis abaixo.
O parâmetro -mount
pode ser usado para evitar que o find
mergulhe em sistemas de arquivos montados. Também é possível restringir a pesquisa a tipos específicos de sistemas de arquivos usando o parâmetro -fstype
. Assim, find /mnt -fstype exfat -iname "*report*"
buscaria somente dentro de sistemas de arquivos exFAT montados sob /mnt
.
Buscando por atributos
Podemos usar os parâmetros abaixo para pesquisar arquivos com atributos específicos, como os que podem ser gravados por seu usuário, os que têm um conjunto específico de permissões ou que têm um determinado tamanho:
-user USERNAME
-
Encontra arquivos de que o usuário
USERNAME
é proprietário. -group GROUPNAME
-
Encontra arquivos de que o grupo
GROUPNAME
é proprietário. -readable
-
Encontra arquivos que podem ser lidos pelo usuário atual.
-writable
-
Encontra arquivos que podem ser gravados pelo usuário atual.
-executable
-
Encontra arquivos que podem ser executados pelo usuário atual. No caso dos diretórios, ele encontrará quaisquer diretórios em que o usuário pode entrar (permissão
x
). -perm NNNN
-
Encontra quaisquer arquivos que tenham exatamente a permissão
NNNN
. Por exemplo,-perm 0664
corresponde a quaisquer arquivos que o usuário e grupo podem ler e gravar e que outros podem ler (ourw-rw-r--
).
Adicione um -
antes de NNNN
para procurar por arquivos que tenham pelo menos a permissão especificada. Por exemplo, -perm -644
encontraria arquivos que tenham permissões de ao menos 644
(rw-r—r--
). Isso inclui arquivos com 664
(rw-rw-r--
) ou mesmo 775
(rwxrwx-r-x
).
-empty
-
Encontra arquivos e diretórios vazios.
-size N
-
Encontra qualsquer arquivos de tamanho
N
, ondeN
por padrão é um número de blocos de 512 bytes. Podemos adicionar sufixos aN
para as outras unidades:Nc
conta o tamanho em bytes,Nk
em kibibytes (KiB, múltiplos de 1024 bytes),NM
em mebibytes (MiB, múltiplos de 1024 * 1024) eNG
para gibibytes (GiB, múltiplos de 1024 * 1024 * 1024).
Aqui também, podemos usar os prefixos +
ou -
(que aqui significam maior que e menor que) para buscar por tamanhos relativos. Por exemplo, -size -10M
corresponderia a qualquer arquivo menor de 10 MiB.
Assim, para pesquisar arquivos em seu diretório inicial que contenham o padrão report
(sem distinção entre maiúsculas e minúsculas) em qualquer parte do nome, tenham permissões 0644
, foram acessados há 10 dias e cujo tamanho é de pelo menos 1 Mib, usaríamos
$ find ~ -iname "*report*" -perm 0644 -atime 10 -size +1M
Busca por tempo
Além da busca por atributos, também é possível realizar buscas por data e hora, encontrando arquivos que foram acessados, tiveram seus atributos alterados ou foram modificados durante um determinado período de tempo. Os parâmetros são:
-amin N
,-cmin N
,-mmin N
-
Corresponde a arquivos que foram acessados, tiveram atributos alterados ou foram modificados (respectivamente)
N
minutos atrás. -atime N
,-ctime N
,-mtime N
-
Corresponde a arquivos que foram acessados, tiveram atributos alterados ou foram modificados
N*24
horas atrás.
Para -cmin N
e -ctime N
, qualquer alteração de atributo é levada em conta, incluindo mudanças nas permissões, leitura ou gravação no arquivo. Isso torna esses parâmetros especialmente poderosos, uma vez que praticamente qualquer operação envolvendo o arquivo fará com que ele corresponda aos parâmetros da busca.
O exemplo a seguir corresponderia a qualquer arquivo no diretório atual que foi modificado há menos de 24 horas e é maior que 100 MiB:
$ find . -mtime -1 -size +100M
Usando locate
e updatedb
locate
e updatedb
são comandos que podem ser usados para encontrar rapidamente um arquivo correspondente a um padrão dado em um sistema Linux. Mas, ao contrário de find
, locate
não pesquisa por um padrão no sistema de arquivos: em vez disso, ele consulta um banco de dados construído com a execução do comando updatedb
. Os resultados são muito velozes, mas podem ser imprecisos dependendo da data da última atualização do banco de dados.
A maneira mais simples de usar locate
é simplesmente fornecer a ele um padrão a pesquisar. Por exemplo, para encontrar todas as imagens JPEG em seu sistema, você usaria locate jpg
. A lista de resultados pode ser bastante longa, mas teria a seguinte aparência:
$ locate jpg /home/carol/Downloads/Expert.jpg /home/carol/Downloads/Hotbit.jpg /home/carol/Downloads/Mate1.jpg /home/carol/Downloads/Mate2.jpg /home/carol/Downloads/Mate3.jpg /home/carol/Downloads/Pentaro.jpg /home/carol/Downloads/Sala.jpg /home/carol/Downloads/pixel_3a_seethrough_1.jpg /home/carol/Downloads/jpg_specs.doc
Quando buscamos pelo padrão jpg
, o locate
mostra qualquer coisa que contenha esse padrão, não importa o que venha antes ou depois. Você pode ver um exemplo disso no arquivo jpg_specs.doc
na lista acima: ele contém o padrão, mas sua extensão não é jpg
.
Tip
|
Com |
Em princípio, o padrão diferencia maiúsculas de minúsculas. Isso significa que arquivos contendo .JPG
não seriam mostrados, pois o padrão está em letras minúsculas. Para evitar isso, passe o parâmetro -i
para locate
. Repetindo nosso exemplo anterior:
$ locate -i .jpg /home/carol/Downloads/Expert.jpg /home/carol/Downloads/Hotbit.jpg /home/carol/Downloads/Mate1.jpg /home/carol/Downloads/Mate1_old.JPG /home/carol/Downloads/Mate2.jpg /home/carol/Downloads/Mate3.jpg /home/carol/Downloads/Pentaro.jpg /home/carol/Downloads/Sala.jpg /home/carol/Downloads/pixel_3a_seethrough_1.jpg
Observe que o arquivo Mate1_old.JPG
, destacado em negrito acima, não estava presente na listagem anterior.
Para passar vários padrões para locate
, basta separá-los com espaços. O exemplo abaixo faria uma busca sem distinção entre maiúsculas e minúsculas por quaisquer arquivos que correspondam aos padrões zip
e jpg
:
$ locate -i zip jpg /home/carol/Downloads/Expert.jpg /home/carol/Downloads/Hotbit.jpg /home/carol/Downloads/Mate1.jpg /home/carol/Downloads/Mate1_old.JPG /home/carol/Downloads/Mate2.jpg /home/carol/Downloads/Mate3.jpg /home/carol/Downloads/OPENMSXPIHAT.zip /home/carol/Downloads/Pentaro.jpg /home/carol/Downloads/Sala.jpg /home/carol/Downloads/gbs-control-master.zip /home/carol/Downloads/lineage-16.0-20190711-MOD-quark.zip /home/carol/Downloads/pixel_3a_seethrough_1.jpg /home/carol/Downloads/jpg_specs.doc
Ao usar múltiplos padrões, você pode solicitar ao locate que exiba apenas os arquivos que correspondam a todos eles. Isso é feito com a opção -A
. O exemplo a seguir mostraria qualquer arquivo que corresponda aos padrões .jpg
e .zip
:
$ locate -A .jpg .zip /home/carol/Downloads/Pentaro.jpg.zip
Se quiser contar o número de arquivos que correspondem a um determinado padrão em vez de mostrar o caminho completo, você pode usar a opção -c
. Por exemplo, para contar o número de arquivos .jpg
em um sistema:
$ locate -c .jpg 1174
Um problema com o locate
é que ele mostra apenas as entradas presentes no banco de dados gerado pelo updatedb
(localizado em /var/lib/mlocate.db
). Se o banco de dados estiver desatualizado, a saída poderá mostrar arquivos que foram excluídos desde a última vez em que foi atualizado. Uma maneira de evitar isso é adicionar o parâmetro -e
, que fará com que ele verifique se o arquivo ainda existe antes de mostrá-lo na saída.
Obviamente, isso não fará com que os arquivos criados após a última atualização do banco de dados apareçam. Para isso será necessário atualizar o banco de dados com o comando updatedb
. O tempo para a execução dessa operação dependerá da quantidade de arquivos em seu disco.
Controlando o comportamento de updatedb
O comportamento do updatedb
pode ser controlado pelo arquivo /etc/updatedb.conf
. Trata-se de um arquivo de texto no qual cada linha controla uma variável. As linhas em branco são ignoradas e as linhas que começam com o caractere #
são tratadas como comentários.
PRUNEFS=
-
Quaisquer tipos de sistemas de arquivos indicados após este parâmetro não serão analisados pelo
updatedb
. A lista de tipos deve ser separada por espaços e os tipos em si não diferenciam maiúsculas de minúsculas, de forma queNFS
enfs
são a mesma coisa. PRUNENAMES=
-
Lista de nomes de diretórios separados por espaços que não deverá ser analisada pelo
updatedb
. PRUNEPATHS=
-
Lista de nomes de caminhos que devem ser ignorados pelo
updatedb
. Os nomes de caminhos devem ser separados por espaços e especificados da mesma maneira como seriam mostrados peloupdatedb
(por exemplo,/var/spool /media
) PRUNE_BIND_MOUNTS=
-
Esta é uma simples variável de
yes
ouno
. Se definida comoyes
, as bind mounts (montagens de ligação: diretórios montados em outros locais com o comandomount --bind
) serão ignoradas.
Encontrando binários, páginas de manual e código-fonte
O which
é um comando muito útil que mostra o caminho completo para um executável. Por exemplo, se você quiser localizar o executável para bash
, pode usar:
$ which bash /usr/bin/bash
Se a opção -a
for adicionada, o comando mostrará todos os nomes de caminho que correspondem ao executável. Observe a diferença:
$ which mkfs.ext3 /usr/sbin/mkfs.ext3 $ which -a mkfs.ext3 /usr/sbin/mkfs.ext3 /sbin/mkfs.ext3
Tip
|
Para descobrir quais diretórios estão no |
type
é um comando semelhante que mostra informações sobre um binário, incluindo sua localização e tipo. Basta usar type
seguido do nome do comando:
$ type locate locate is /usr/bin/locate
O parâmetro -a
funciona da mesma maneira que em which
, mostrando todos os nomes de caminho que correspondem ao executável. Assim:
$ type -a locate locate is /usr/bin/locate locate is /bin/locate
E o parâmetro -t
mostra o tipo de arquivo do comando que pode ser alias
, keyword
, function
, builtin
ou file
. Por exemplo:
$ type -t locate file $ type -t ll alias $ type -t type type is a built-in shell command
O comando whereis
é mais versátil e, além dos binários, também pode ser usado para mostrar a localização das páginas do manual ou mesmo o código-fonte de um programa (se disponível em seu sistema). Basta digitar whereis
seguido do nome binário:
$ whereis locate locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
Os resultados acima incluem binários (/usr/bin/locate
) e páginas de manual comprimidas (/usr/share/man/man1/locate.1.gz
).
Podemos filtrar rapidamente os resultados usando opções de linha de comando como -b
, para limitá-los apenas aos binários, -m
, para limitá-los apenas a páginas de manual, ou -s
, para limitá-los apenas ao código-fonte. Repetindo o exemplo acima, os resultados seriam:
$ whereis -b locate locate: /usr/bin/locate $ whereis -m locate locate: /usr/share/man/man1/locate.1.gz
Exercícios Guiados
-
Imagine que um programa precisa criar um arquivo temporário de uso único, que não será novamente necessário após o encerramento do programa. Qual seria o diretório correto para criar esse arquivo?
-
Qual é o diretório temporário que deve ser limpo durante o processo de inicialização?
-
Usando
find
, pesquise apenas no diretório atual por arquivos que são graváveis pelo usuário, foram modificados nos últimos 10 dias e são maiores que 4 GB. -
Usando
locate
, encontre todos os arquivos contendo os padrõesreport
eupdated
,update
ouupdating
em seus nomes. -
Como descobrir onde a página de manual para
ifconfig
está armazenada? -
Qual variável precisa ser adicionada a
/etc/updatedb.conf
para queupdatedb
ignore sistemas de arquivosntfs
? -
Um administrador de sistema deseja montar um disco interno (
/dev/sdc1
). De acordo com o FHS, em qual diretório este disco deve ser montado?
Exercícios Exploratórios
-
Quando
locate
é usado, os resultados são puxados de um banco de dados gerado porupdatedb
. No entanto, este banco de dados pode estar desatualizado, fazendo com que olocate
mostre arquivos que não existem mais. Como fazer com quelocate
mostre apenas arquivos existentes em sua saída? -
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
oustatute
em seus nomes. -
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. -
Encontre arquivos vazios que foram criados há mais de 30 dias e estão pelo menos dois níveis abaixo do diretório atual.
-
Considere que os usuários
carol
ejohn
fazem parte do grupomkt
. Encontre no diretório pessoal dejohn
quaisquer arquivos que também possam ser lidos porcarol
.
Resumo
Nesta lição, você aprendeu sobre a organização básica do sistema de arquivos em uma máquina Linux, de acordo com o FHS, e como encontrar binários e arquivos, seja por nome ou por atributos. Os seguintes comandos foram discutidos nesta lição:
find
-
Um comando versátil usado para encontrar arquivos e pastas segundo uma variedade de critérios de pesquisa.
locate
-
Um utilitário que usa um banco de dados local contendo a localização dos arquivos armazenados localmente.
updatedb
-
Atualiza o banco de dados local usado pelo comando
locate
. which
-
Exibe o caminho completo até um executável.
whereis
-
Exibe a localização das páginas de manual, binários e código-fonte no sistema.
type
-
Exibe a localização de um binário e de que tipo de aplicativo se trata (um programa instalado, um programa interno do Bash e assim por diante).
Respostas aos Exercícios Guiados
-
Imagine que um programa precisa criar um arquivo temporário de uso único, que não será novamente necessário após o encerramento do programa. Qual seria o diretório correto para criar esse arquivo?
Como não precisamos mais do arquivo depois que o programa for encerrado, o diretório correto é
/tmp
. -
Qual é o diretório temporário que deve ser limpo durante o processo de inicialização?
O diretório é
/run
ou, em certos sistemas,/var/run
. -
Usando o
find
, pesquise apenas no diretório atual por arquivos que são graváveis pelo usuário, foram modificados nos últimos 10 dias e são maiores que 4 GB.Para isso, precisamos dos parâmetros
-writable
,-mtime
e-size
:find . -writable -mtime -10 -size 4G
-
Usando
locate
, encontre todos os arquivos contendo os padrõesreport
eupdated
,update
ouupdating
em seus nomes.Como
locate
precisa encontrar todos os padrões correspondentes, use a opção-A
:locate -A "report" "updat"
-
Como descobrir onde a página de manual para
ifconfig
está armazenada?Use o parâmetro
-m
para owhereis
:whereis -m ifconfig
-
Qual variável precisa ser adicionada a
/etc/updatedb.conf
para queupdatedb
ignore sistemas de arquivosntfs
?A variável é
PRUNEFS=
seguida pelo tipo do sistema de arquivos:PRUNEFS=ntfs
-
Um administrador de sistema deseja montar um disco interno (
/dev/sdc1
). De acordo com o FHS, em qual diretório este disco deve ser montado?Na prática, o disco pode ser montado em qualquer lugar. Porém, o FHS recomenda que montagens temporárias sejam feitas em
/mnt
Respostas aos Exercícios Exploratórios
-
Quando
locate
é usado, os resultados são puxados de um banco de dados gerado porupdatedb
. No entanto, este banco de dados pode estar desatualizado, fazendo com que olocate
mostre arquivos que não existem mais. Como fazer com quelocate
mostre apenas arquivos existentes em sua saída?Adicione o parâmetro
-e
a locate, como emlocate -e PATTERN
. -
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
oustatute
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):find . -maxdepth 3 -mount -iname "*statu*"
-
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
demount
para limitar a pesquisa a tipos específicos de sistemas de arquivos. Um arquivo legível pelo usuário atual teria ao menos4
no primeiro dígito de permissões, e um executável pelo grupo teria ao menos1
no segundo dígito. Como não estamos preocupados com as permissões de outros, podemos usar0
no terceiro dígito. Use-cmin N
para filtrar alterações recentes de atributos, lembrando que N é especificado em minutos. Assim:find /mnt -fstype ext4 -perm -410 -cmin -120
-
Encontre arquivos vazios que foram criados há mais de 30 dias e estão pelo menos dois níveis abaixo do diretório atual.
O parâmetro
-mindepth N
pode ser usado para limitar a pesquisa a pelo menosN
níveis abaixo, mas é necessário incluir o diretório atual na contagem. Use-empty
para procurar por arquivos vazios e-mtime N
para ver a data e hora de modificação. Assim:find . -empty -mtime +30 -mindepth 3
-
Considere que os usuários
carol
ejohn
fazem parte do grupomkt
. Encontre no diretório pessoal dejohn
quaisquer arquivos que também possam ser lidos porcarol
.Considerando que os dois são membros do mesmo grupo, precisamos de pelo menos um
r
(4
) nas permissões de grupo e não estamos preocupados com os outros. Assim:find /home/john -perm -040