103.3 Lição 2
Certificação: |
LPIC-1 |
---|---|
Versão: |
5.0 |
Tópico: |
103 Comandos GNU e Unix |
Objetivo: |
103.3 Gerenciamento básico de arquivos |
Lição: |
2 de 2 |
Introdução
Como encontrar arquivos
Conforme você usa sua máquina, os arquivos vão aumentando progressivamente em número e tamanho. Às vezes, é difícil localizar um arquivo específico. Felizmente, o Linux inclui o find
para pesquisar e localizar arquivos rapidamente. O find
usa a seguinte sintaxe:
find STARTING_PATH OPTIONS EXPRESSION
STARTING_PATH
-
define o diretório em que a pesquisa se inicia.
OPTIONS
-
controla o comportamento e adiciona critérios específicos para otimizar o processo de busca.
EXPRESSION
-
define os termos da pesquisa.
$ find . -name "myfile.txt" ./myfile.txt
O caminho inicial, neste caso, é o diretório atual. A opção -name
especifica que a pesquisa é baseada no nome do arquivo. myfile.txt
é o nome do arquivo a ser pesquisado. Ao usar globbing de arquivo, inclua sempre a expressão entre aspas:
$ find /home/frank -name "*.png" /home/frank/Pictures/logo.png /home/frank/screenshot.png
Este comando busca por todos os arquivos que terminam com .png
, começando no diretório /home/frank/
e abaixo dele. Se você não entendeu o uso do asterisco (*
), ele foi abordado na lição anterior.
Usando critérios para acelerar a pesquisa
Use find
para localizar arquivos com base em tipo, tamanho ou hora. Se especificarmos uma ou mais opções, os resultados desejados são obtidos em menos tempo.
As opções para localizar arquivos com base no tipo incluem:
-type f
-
busca por arquivos.
-type d
-
busca por diretórios.
-type l
-
busca por links simbólicos.
$ find . -type d -name "example"
Este comando procura por todos os diretórios, no diretório atual e abaixo dele, que tenham o nome example
.
Dentre os outros critérios que podem ser usados com find
, temos:
-name
-
pesquisa com base no nome fornecido.
-iname
-
pesquisa com base no nome, desconsiderando maiúsculas e minúsculas (ou seja, o caso de teste
myFile
é semelhante aMYFILE
). -not
-
retorna os resultados que não correspondem ao caso de teste.
-maxdepth N
-
pesquisa no diretório atual, além dos subdiretórios até
N
níveis de profundidade.
Localizando arquivos por hora de modificação
find
também permite filtrar uma hierarquia de diretórios com base em quando o arquivo foi modificado:
$ sudo find / -name "*.conf" -mtime 7 /etc/logrotate.conf
Este comando procura por todos os arquivos em todo o sistema de arquivos (o caminho inicial é o diretório raiz, ou seja, /
) que terminam com os caracteres .conf
e que foram modificados nos últimos sete dias. Este comando exige privilégios elevados para acessar diretórios na base da estrutura de diretórios do sistema, daí o uso de sudo
neste caso. O argumento passado para mtime
representa o número de dias desde a última modificação do arquivo.
Localizando arquivos por tamanho
O find
também pode localizar arquivos por tamanho. Por exemplo, se quisermos encontrar arquivos maiores que 2G
em /var
:
$ sudo find /var -size +2G /var/lib/libvirt/images/debian10.qcow2 /var/lib/libvirt/images/rhel8.qcow2
A opção -size
exibe arquivos de tamanhos correspondentes ao argumento passado. Eis alguns exemplos de argumentos:
-size 100b
-
arquivos com exatamente 100 bytes.
-size +100k
-
arquivos maiores que 100 kilobytes.
-size -20M
-
arquivos menores que 20 megabytes.
-size +2G
-
arquivos maiores que 2 gigabytes.
Note
|
Para encontrar arquivos vazios, podemos usar: |
O que fazer com os resultados
Uma vez que a pesquisa é feita, é possível realizar uma ação no conjunto de resultados usando -exec
:
$ find . -name "*.conf" -exec chmod 644 '{}' \;
Esse comando filtra todos os objetos no diretório atual (.
) e abaixo dele para nomes de arquivo terminando com .conf
e em seguida executa o comando chmod 644
para modificar as permissões de arquivo nos resultados.
Por enquanto, não se preocupe com o significado de '{}' \;
, pois isso será discutido mais adiante.
Usando o grep
para filtrar por arquivos com base no conteúdo
grep
é usado para buscar pela ocorrência de uma palavra-chave.
Considere uma situação na qual precisamos encontrar arquivos com base no conteúdo:
$ find . -type f -exec grep "lpi" '{}' \; -print ./.bash_history Alpine/M helping/M
Esse comando busca, na hierarquia de diretórios atual (.
), por objetos que são arquivos (-type f
) e em seguida executa o comando grep "lpi"
para cada arquivo que satisfaça as condições. Os arquivos que atendem a essas condições são impressos na tela (-print
). As chaves ({}
) servem para reservar o espaço para os resultados encontrados por find
. As {}
são postas entre aspas simples ('
) para evitar passar arquivos com nomes contendo caracteres especiais para o grep
. O comando -exec
é concluído com um ponto e vírgula (;
), que deve ser escapado (\;
) para não ser interpretado pelo shell.
A opção -delete
, se colocada no final de uma expressão, excluiria todos os arquivos correspondentes à descrição. Esta opção deve ser usada quando você tiver certeza de que os resultados correspondem apenas aos arquivos que deseja excluir.
No exemplo abaixo, find
localiza todos os arquivos na hierarquia começando no diretório atual e, em seguida, exclui todos os arquivos que terminam com os caracteres .bak
:
$ find . -name "*.bak" -delete
Arquivos de pacote
O comando tar
(Arquivamento e compactação)
O comando tar
, abreviação de “tape archive(r)”, é usado para criar arquivos tar convertendo um grupo de arquivos em um pacote. Os arquivos de pacote são úteis para mover ou fazer backup de um grupo de arquivos facilmente. Pense no tar
como uma ferramenta que cria uma cola na qual os arquivos podem ser grudados, agrupados e facilmente movidos.
O tar
também tem a capacidade de extrair arquivos tar, exibir uma lista dos arquivos incluídos no pacote e adicionar mais arquivos a um pacote existente.
A sintaxe do comando tar
é a seguinte:
tar [OPERATION_AND_OPTIONS] [ARCHIVE_NAME] [FILE_NAME(S)]
OPERATION
-
Somente um argumento de operação é permitido e exigido. As operações mais frequentemente usadas são:
--create
(-c
)-
Cria um novo arquivo tar.
--extract
(-x
)-
Extrai o pacote inteiro ou um ou mais arquivos de um pacote.
--list
(-t
)-
Exibe uma lista dos arquivos incluídos no pacote.
OPTIONS
-
As opções usadas com mais frequência são:
--verbose
(-v
)-
Mostra os arquivos que estão sendo processados pelo comando
tar
. --file=archive=name
(-f archive-name
)-
Especifica o nome de arquivo do pacote.
ARCHIVE_NAME
-
O nome do arquivo de pacote.
FILE_NAME(S)
-
Uma lista separada por espaços com os nomes de arquivos a serem extraídos. Se não estiver presente, o pacote inteiro é extraído.
Criando um arquivo de pacote
Digamos que temos um diretório chamado stuff
no diretório atual e queremos salvá-lo em um arquivo chamado archive.tar
. Executaríamos para isso o seguinte comando:
$ tar -cvf archive.tar stuff stuff/ stuff/service.conf
Eis o que essas opções significam de fato:
-c
-
Cria um arquivo de pacote.
-v
-
Exibe o progresso no terminal enquanto o arquivo de pacote é criado. Também chamado de modo “verboso”. O
-v
sempre é opcional nesses comandos, mas é útil. -f
-
Permite especificar o nome de arquivo do pacote.
Em geral, para arquivar um único diretório ou um único arquivo no Linux, usamos:
tar -cvf NAME-OF-ARCHIVE.tar /PATH/TO/DIRECTORY-OR-FILE
Note
|
O |
Para empacotar diversos diretórios de uma vez só, listamos todos eles delimitando-os por um espaço na seção /PATH/TO/DIRECTORY-OR-FILE
:
$ tar -cvf archive.tar stuff1 stuff2
Isso cria um arquivo de pacote com stuff1
e stuff2
em archive.tar
Extraindo um pacote
Podemos extrair um arquivo de pacote usando o tar
:
$ tar -xvf archive.tar stuff/ stuff/service.conf
Isso extrai o conteúdo de archive.tar
para o diretório atual.
Este comando é igual ao comando de criação de pacotes usado acima, exceto porque a opção -x
substitui a opção -c
.
Para extrair o conteúdo do pacote para um diretório específico, usamos -C
:
$ tar -xvf archive.tar -C /tmp
Isso extrai o conteúdo de archive.tar
para o diretório /tmp
.
$ ls /tmp stuff
Compactando com o tar
O comando tar
do GNU incluído nas distribuições Linux pode criar um arquivo .tar
e, em seguida, compactá-lo com a compactação gzip
ou bzip2
em um único comando:
$ tar -czvf name-of-archive.tar.gz stuff
Este comando criaria um arquivo compactado usando o algoritmo gzip
(-z
).
Embora a compressão gzip
seja mais freqüentemente usada para criar arquivos .tar.gz
ou .tgz
, o tar
também suporta a compressão bzip2
. Isso permite a criação de arquivos compactados bzip2
, geralmente chamados de arquivos .tar.bz2
, .tar.bz
ou .tbz
.
Para isso, substituímos -z
, de gzip
, por -j
, de bzip2
:
$ tar -cjvf name-of-archive.tar.bz stuff
Para descompactar o arquivo, substituímos -c
por -x
, onde x
significa “extract”:
$ tar -xzvf archive.tar.gz
O gzip
é mais rápido, mas geralmente compacta um pouco menos, de modo que o arquivo obtido é um pouco maior. O bzip2
é mais lento, mas comprime um pouco mais, então o arquivo fica um pouco menor. Em geral, porém, gzip
e bzip2
são praticamente a mesma coisa; ambos funcionam de forma semelhante.
Outra alternativa seria aplicar a compressão gzip
ou bzip2
usando o comando gzip
para as compressões gzip
e bzip
para as compressões bzip
. Por exemplo, para aplicar a compactação gzip
, use:
gzip FILE-TO-COMPRESS
gzip
-
cria o arquivo compactado com o mesmo nome, mas com a terminação
.gz
. gzip
-
remove os arquivos originais após criar o arquivo compactado.
O comando bzip2
funciona de maneira semelhante.
Para descompactar os arquivos usamos gunzip
ou bunzip2
, dependendo do algoritmo usado para compactá-los.
O comando cpio
cpio
significa “copy in, copy out”. É usado para processar arquivo de pacote como os arquivos *.cpio
ou *.tar
.
O cpio
executa as seguintes operações:
-
Copiar arquivos para um pacote.
-
Extrair arquivos de um pacote.
Ele usa a lista de arquivos da entrada padrão (principalmente a saída de ls
).
Para criar um arquivo cpio
, usamos:
$ ls | cpio -o > archive.cpio
A opção -o
instrui o cpio
a criar uma saída. Neste caso, o arquivo de saída criado é archive.cpio
. O comando ls
lista o conteúdo do diretório atual que será empacotado.
Para extrair o arquivo de pacote, usamos:
$ cpio -id < archive.cpio
A opção -i
é usada para realizar a extração. A opção -d
cria a pasta de destino. O caractere <
representa a entrada padrão. O arquivo de entrada a ser extraído é archive.cpio
.
O comando dd
O dd
copia dados de um local para outro. A sintaxe de linha de comando de dd
difere de muitos outros programas Unix, pois ele usa a sintaxe option = value
para as opções de linha de comando ao invés dos formatos padrão GNU -option value
ou --option=value
:
$ dd if=oldfile of=newfile
Este comando copia o conteúdo de oldfile
para newfile
, onde if=
é o arquivo de entrada e of=
refere-se ao arquivo de saída.
Note
|
O comando |
O dd
também é usado para alterar dados para maiúsculas/minúsculas ou para escrever diretamente em dispositivos de bloco como /dev/sdb
:
$ dd if=oldfile of=newfile conv=ucase
Esse comando copiaria todo o conteúdo de oldfile
para newfile
e colocaria todo o texto em maiúsculas.
O comando a seguir faria backup do disco rígido inteiro localizado em /dev/sda
para um arquivo de nome backup.dd
:
$ dd if=/dev/sda of=backup.dd bs=4096
Exercícios Guiados
-
Considere a listagem a seguir:
$ find /home/frank/Documents/ -type d /home/frank/Documents/ /home/frank/Documents/animal /home/frank/Documents/animal/domestic /home/frank/Documents/animal/wild
-
Que tipo de arquivos esse comando produziria?
-
A busca começaria em qual diretório?
-
-
Um usuário deseja compactar sua pasta de backup. Ele usa o seguinte comando:
$ tar cvf /home/frank/backup.tar.gz /home/frank/dir1
Qual opção está faltando para compactar o backup usando o algoritmo
gzip
?
Exercícios Exploratórios
-
O administrador do sistema precisa realizar verificações regulares para remover arquivos volumosos. Esses arquivos volumosos estão localizados em
/var
e terminam com uma extensão.backup
.-
Escreva o comando, usando
find
, para localizar esses arquivos: -
Uma análise do tamanhos desses arquivos revela que eles variam de
100M
a1000M
. Complete o comando anterior com esta nova informação para poder localizar os arquivos de backup variando de100M
a1000M
: -
Finalmente, complete este comando com a ação delete para remover esses arquivos:
-
-
No diretório
/var
, existem quatro arquivos de backup:db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-
Usando o
tar
, especifique o comando usado para criar um arquivo de pacote com o nomedb-first-quarter-2018.backup.tar
: -
Usando o
tar
, especifique o comando usado para criar o arquivo de pacote e compactá-lo usando ogzip
. Note que o nome do arquivo resultante deve terminar com.gz
:
-
Resumo
Nesta seção, você aprendeu:
-
Como encontrar arquivos com
find
. -
Como adicionar critérios de busca com base em hora, tipo de arquivo e tamanho fornecendo argumentos ao
find
. -
O que fazer com os resultados.
-
Como arquivar, compactar e descompactar arquivos usando
tar
. -
Processamento de arquivos de pacote com
cpio
. -
Cópia de arquivos com
dd
.
Respostas aos Exercícios Guiados
-
Considere a listagem a seguir:
$ find /home/frank/Documents/ -type d /home/frank/Documents/ /home/frank/Documents/animal /home/frank/Documents/animal/domestic /home/frank/Documents/animal/wild
-
Que tipo de arquivos esse comando produziria?
Diretórios.
-
A busca começaria em qual diretório?
/home/frank/Documents
-
-
Um usuário deseja compactar sua pasta de backup. Ele usa o seguinte comando:
$ tar cvf /home/frank/backup.tar.gz /home/frank/dir1
Qual opção está faltando para compactar o backup usando o algoritmo
gzip
?A opção
-z
.
Respostas aos Exercícios Exploratórios
-
O administrador do sistema precisa realizar verificações regulares para remover arquivos volumosos. Esses arquivos volumosos estão localizados em
/var
e terminam com uma extensão.backup
.-
Escreva o comando, usando
find
, para localizar esses arquivos:$ find /var -name *.backup
-
Uma análise do tamanho desses arquivos revela que eles variam de
100M
a1G
. Complete o comando anterior com esta nova informação para poder localizar os arquivos de backup variando de100M
a1G
:$ find /var -name *.backup -size +100M -size -1000M
-
Finalmente, complete este comando com a ação delete para remover esses arquivos:
$ find /var -name *.backup -size +100M -size -1000M -delete
-
-
No diretório
/var
, existem quatro arquivos de backup:db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-
Usando o
tar
, especifique o comando usado para criar um arquivo de pacote com o nomedb-first-quarter-2018.backup.tar
:$ tar -cvf db-first-quarter-2018.backup.tar db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-
Usando o
tar
, especifique o comando usado para criar o arquivo de pacote e compactá-lo usando ogzip
. Note que o nome do arquivo resultante deve terminar com.gz
:$ tar -zcvf db-first-quarter-2018.backup.tar.gz db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-