Gerenciamento Básico de Arquivos - cp, mv, rm, touch e Wildcards

Gerenciamento Básico de Arquivos - cp, mv, rm, touch e Wildcards

O Que Você Vai Alcançar

  • Usar as principais opções de cp / mv / rm (-r -a -i -p -u -f) adequadamente
  • Criar arquivos vazios e atualizar timestamps com touch
  • Criar e remover diretórios com segurança usando mkdir -p / rmdir
  • Escrever wildcards (* ? [ ] [!...]) e brace expansion ({ }) corretamente
  • Explicar que é o shell, e não o comando, que expande os globs

Este é o núcleo do objetivo 103.3 do LPIC-1 "Realizar gerenciamento básico de arquivos". Domine os padrões para executar as operações de arquivo que compõe a maior parte do trabalho diário sem acidentes.

Qual Comando e Opção Escolher

Escolha operações de arquivo por "o que você quer fazer" e "como prevenir acidentes". A tabela abaixo é o ponto de partida.

O que você quer Comando Hábito de segurança
Copiar cp -i (confirmar sobrescrita)
Backup (manter atributos) cp -a -a = recursivo + preservar
Mover / renomear mv -i (confirmar sobrescrita)
Excluir rm -i (confirmar cada item)
Criar / atualizar arquivo touch Mantém o conteúdo existente intacto
Criar diretório mkdir -p Criar pais de uma vez
Remover diretório vazio rmdir Falha se não estiver vazio (seguro)

Na dúvida, adote como padrão "adicionar -i em operações destrutivas (rm / sobrescrita com mv)". O fato de rmdir falhar a menos que esteja vazio não é um defeito, mas uma válvula de segurança contra exclusão acidental.

Usando cp / mv / rm

cp - Cópia e Diferenças de Opções

cp duplica arquivos e diretórios. Diretórios requerem -r (recursivo). Para backups, use -a, que também preserva atributos.

cp file1.txt file2.txt
cp -r src/ backup/
cp -a src/ archive/
$ ls -l file2.txt
-rw-r--r-- 1 user user 0 May 30 10:00 file2.txt

As principais opções significam o seguinte. Isso assume o cp do GNU coreutils.

Opção Significado
-r, -R Copiar diretórios recursivamente
-a Modo archive. Equivalente a -dR --preserve=all (manter atributos)
-i Perguntar antes de sobrescrever
-p Preservar atributos como mtime, proprietário e permissões
-u Copiar somente quando o destino e mais antigo ou inexistente

-r significa "copiar o conteúdo", enquanto -a significa "copiar o conteúdo e preservar completamente atributos, links simbólicos e timestamps". Lembre-se de -r para uma cópia simples e -a para um backup.

-u (update) é útil para sincronização diferencial. cp -au src/ dst/ copia "somente arquivos mais novos preservando atributos", utilizável como um backup simples.

mv - Mover e Renomear

mv serve tanto para mover quanto para renomear. mv antigo novo no mesmo diretório é uma renomeação, e mv arquivo dir/ para outro diretório é uma movimentação. Adicione -i quando sobrescrever for arriscado.

mv draft.txt report.txt
mv report.txt /home/user/docs/
mv -i report.txt /home/user/docs/
$ mv -i report.txt /home/user/docs/
mv: overwrite '/home/user/docs/report.txt'? n
Opção Significado
-i Perguntar antes de sobrescrever
-f Forçar sobrescrita sem perguntar (cancela o -i)

Diferente do cp, o mv não precisa de -r para mover um diretório. Dentro do mesmo sistema de arquivos, ele apenas reescreve as informações de caminho sem mover os dados em si, portanto é rápido.

rm - Exclusão e o Perigo do -rf

rm exclui arquivos. Use -r para excluir diretórios e -f para forçar a exclusão sem perguntar. Não existe "lixeira" com rm; exclusão significa remoção imediata.

rm unwanted.txt
rm -i unwanted.txt
rm -r olddir/
$ rm -i unwanted.txt
rm: remove regular file 'unwanted.txt'? y
Opção Significado
-r, -R Excluir diretórios recursivamente
-f Suprimir verificações de existência e prompts; forçar
-i Confirmar cada item antes de excluir

touch / mkdir / rmdir / file

touch - Criar Arquivos Vazios e Atualizar Timestamps

touch cria um arquivo inexistente como vazio, e para um arquivo existente atualiza os tempos de acesso e modificação para o horário atual (sem alterar o conteúdo).

touch newfile.txt
touch existing.txt
touch -c missing.txt
$ ls -l --time-style=+%H:%M newfile.txt
-rw-r--r-- 1 user user 0 10:05 newfile.txt
Opção Significado
-a Atualizar somente o tempo de acesso
-m Atualizar somente o tempo de modificação
-c Não criar o arquivo se ele não existir
-t Definir para o horário especificado ([[CC]YY]MMDDhhmm[.ss])

Executar touch em um arquivo existente não apaga dados. Também é usado para manipular o tempo de modificação, como forçar uma reconstrução (verificação de timestamp do make).

mkdir / rmdir - Criar e Excluir Diretórios

mkdir cria um diretório. Para uma hierarquia profunda cujos pais não existem, use -p para criá-los todos de uma vez. rmdir exclui somente um diretório vazio.

mkdir project
mkdir -p project/src/lib
rmdir project/src/lib
$ rmdir project
rmdir: failed to remove 'project': Directory not empty

Sem -p, você não pode criar um diretório sob um pai inexistente e recebe um erro. Que rmdir "falhe a menos que esteja vazio" é um mecanismo de segurança; para excluir conteúdo e tudo, use rm -r (que é correspondentemente mais perigoso).

file - Determinar o Tipo de Arquivo pelo Conteúdo

file determina o tipo de um arquivo examinando seu conteúdo, não sua extensão. Ele pode ver além de uma extensão falsificada e identificar a entidade real.

file report.pdf script.sh archive.gz photo
report.pdf:  PDF document, version 1.7
script.sh:   Bourne-Again shell script, ASCII text executable
archive.gz:  gzip compressed data
photo:       JPEG image data, JFIF standard 1.01

Mesmo photo sem extensão é identificado como JPEG. Verificar o tipo com file antes de abrir com cat e obter saída ilegível é um hábito seguro.

Wildcards e Expansão do Shell

Wildcards (globs) são um mecanismo para especificar padrões de nomes de arquivo em massa. O ponto-chave é que é o shell, não o cp ou rm, que os expande. O shell substitui o padrão por nomes de arquivo reais antes de passá-los ao comando.

Padrão Corresponde a Exemplo
* Qualquer string de zero ou mais caracteres *.txt -> todos os .txt
? Qualquer caractere único file?.txt -> file1.txt, fileA.txt
[abc] Qualquer um dos caracteres entre colchetes file[12].txt -> file1.txt, file2.txt
[a-z] Qualquer caractere único no intervalo [a-c]* -> nomes que começam com a/b/c
[!abc] Qualquer caractere único não entre colchetes file[!0].txt -> não file0.txt

Brace expansion { } é diferente dos globs: ela gera strings mecanicamente independentemente de os arquivos existirem.

echo file{A,B,C}.txt
echo {1..3}.log
mkdir -p project/{src,test,docs}
fileA.txt fileB.txt fileC.txt
1.log 2.log 3.log

{A,B,C} é uma lista separada por vírgulas e {1..3} é uma sequência numérica. mkdir -p project/{src,test,docs} cria três diretórios de uma vez.

Brace expansion cria strings mesmo se nenhum arquivo existir (generativa). Globs * ? [ ], por outro lado, correspondem a nomes de arquivo existentes (busca). *.txt não corresponde a nada se não houver .txt, e no bash padrão a própria string do padrão é passada ao comando. Tenha isso em mente.

ls *.nonexistent
echo *.nonexistent
ls: cannot access '*.nonexistent': No such file or directory
*.nonexistent

Quando um glob não corresponde a nada, o bash por padrão passa o padrão como está (echo imprime essa string, e ls diz "no such file"). Você pode mudar isso para "expandir para vazio quando houver zero correspondências" configurando shopt -s nullglob.

Erros Comuns e Correções

Aqui estão os pontos que causam problemas tanto na prática quanto no exame.

  • Esquecer -r para diretório no cp: cp dir/ dst/ gera um erro omitting directory. Sempre use -r ou -a para cópias de diretório.
  • Confundir -r e -a: Use -r para uma cópia simples, e -a para um backup que preserva proprietário, permissões, links e timestamps. Somente com -r, os atributos mudam.
  • Sobrescrever silenciosamente com mv: Por padrão, mv sobrescreve silenciosamente um arquivo existente. Torne -i um hábito para arquivos importantes.
  • Executar rm * no diretório root ou importante: É o shell que expande o glob. Usar echo rm * antes para confirmar o que ele expande é seguro.
  • Confusão com o erro "not empty" do rmdir: Este é o comportamento seguro por design. Para excluir conteúdo e tudo, use rm -r, mas sempre confirme o alvo.

Solução de Problemas

Sintoma: cp diz "omitting directory" e não copia nada

Causa: Tentativa de copiar um diretório sem -r (ou -a)

Verificação:

file src

Correção: Use cp -r src/ dst/ para diretório, ou cp -a src/ dst/ para também manter atributos.

Sintoma: Arquivos desapareceram após executar rm -rf

Causa: rm -rf exclui recursivamente sem confirmação. rm não tem desfazer

Verificação:

echo rm -rf target/

Correção: Use echo antes para inspecionar visualmente a expansão antes de executar. Combine com -i (rm -ri) se não tiver certeza. Arquivos excluídos só podem ser recuperados de um backup.

Sintoma: Um wildcard não corresponde / o padrão é impresso literalmente

Causa: Zero arquivos correspondem. O bash por padrão passa a string do padrão como está

Verificação:

shopt nullglob
ls -d *.txt

Correção: Verifique novamente o diretório de destino e a extensão. Para expandir para vazio quando houver zero correspondências, configure shopt -s nullglob.

Lista de Verificação de Conclusão

  • [ ] Explicou e usou a diferença entre cp -r e cp -a
  • [ ] Habilitou confirmação de sobrescrita/exclusão com mv -i / rm -i
  • [ ] Confirmou a criação de arquivo vazio e atualização de timestamp com touch
  • [ ] Confirmou a diferença entre mkdir -p e rmdir
  • [ ] Escreveu * ? [ ] e brace expansion { } de forma distinta
  • [ ] Entendeu que é o shell que expande os globs

Resumo

Cenário Comando Ponto
Copiar cp -r / cp -a -a preserva atributos também
Mover / renomear mv -i Padrão sobrescreve silenciosamente
Excluir rm -ri Sem desfazer; -rf requer cautela máxima
Criar / atualizar touch / mkdir -p Mantém conteúdo existente intacto
Remover dir vazio rmdir Falha se não estiver vazio (seguro)
Determinar tipo file Pelo conteúdo, não pela extensão
Especificar em massa * ? [ ] { } O shell faz a expansão

Gerenciamento básico de arquivos é a área mais frequentemente usada no LPIC-1. Uma vez que você solidifique isso, avance para o mecanismo de links que aponta para entidades de arquivo, e para o FHS e localização de arquivos, para completar o quadro.

Próximas Leituras