Gerenciamento Basico de Arquivos - cp, mv, rm, touch e Wildcards
O Que Voce Vai Alcancar
- Usar as principais opcoes de
cp/mv/rm(-r-a-i-p-u-f) adequadamente - Criar arquivos vazios e atualizar timestamps com
touch - Criar e remover diretorios com seguranca usando
mkdir -p/rmdir - Escrever wildcards (
*?[ ][!...]) e brace expansion ({ }) corretamente - Explicar que e o shell, e nao o comando, que expande os globs
Este e o nucleo do objetivo 103.3 do LPIC-1 "Realizar gerenciamento basico de arquivos". Domine os padroes para executar as operacoes de arquivo que compoe a maior parte do trabalho diario sem acidentes.
Qual Comando e Opcao Escolher
Escolha operacoes de arquivo por "o que voce quer fazer" e "como prevenir acidentes". A tabela abaixo e o ponto de partida.
| O que voce quer | Comando | Habito de seguranca |
|---|---|---|
| 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 |
Mantem o conteudo existente intacto |
| Criar diretorio | mkdir -p |
Criar pais de uma vez |
| Remover diretorio vazio | rmdir |
Falha se nao estiver vazio (seguro) |
Na duvida, adote como padrao "adicionar -i em operacoes destrutivas (rm / sobrescrita com mv)". O fato de rmdir falhar a menos que esteja vazio nao e um defeito, mas uma valvula de seguranca contra exclusao acidental.
Usando cp / mv / rm
cp - Copia e Diferencas de Opcoes
cp duplica arquivos e diretorios. Diretorios requerem -r (recursivo). Para backups, use -a, que tambem 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 opcoes significam o seguinte. Isso assume o cp do GNU coreutils.
| Opcao | Significado |
|---|---|
-r, -R |
Copiar diretorios recursivamente |
-a |
Modo archive. Equivalente a -dR --preserve=all (manter atributos) |
-i |
Perguntar antes de sobrescrever |
-p |
Preservar atributos como mtime, proprietario e permissoes |
-u |
Copiar somente quando o destino e mais antigo ou inexistente |
-r significa "copiar o conteudo", enquanto -a significa "copiar o conteudo e preservar completamente atributos, links simbolicos e timestamps". Lembre-se de -r para uma copia simples e -a para um backup.
-u (update) e util para sincronizacao diferencial. cp -au src/ dst/ copia "somente arquivos mais novos preservando atributos", utilizavel como um backup simples.
mv - Mover e Renomear
mv serve tanto para mover quanto para renomear. mv antigo novo no mesmo diretorio e uma renomeacao, e mv arquivo dir/ para outro diretorio e uma movimentacao. 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
| Opcao | Significado |
|---|---|
-i |
Perguntar antes de sobrescrever |
-f |
Forcar sobrescrita sem perguntar (cancela o -i) |
Diferente do cp, o mv nao precisa de -r para mover um diretorio. Dentro do mesmo sistema de arquivos, ele apenas reescreve as informacoes de caminho sem mover os dados em si, portanto e rapido.
rm - Exclusao e o Perigo do -rf
rm exclui arquivos. Use -r para excluir diretorios e -f para forcar a exclusao sem perguntar. Nao existe "lixeira" com rm; exclusao significa remocao imediata.
rm unwanted.txt rm -i unwanted.txt rm -r olddir/
$ rm -i unwanted.txt rm: remove regular file 'unwanted.txt'? y
| Opcao | Significado |
|---|---|
-r, -R |
Excluir diretorios recursivamente |
-f |
Suprimir verificacoes de existencia e prompts; forcar |
-i |
Confirmar cada item antes de excluir |
rm -rf exclui uma arvore de diretorios inteira de uma vez sem confirmacao. Um erro de digitacao no argumento (por exemplo, um espaco perdido apos / como em rm -rf / tmp/foo) pode destruir o sistema inteiro. Sempre confirme visualmente os caminhos de destino antes de executar, e combine com -i se nao tiver certeza.
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 modificacao para o horario atual (sem alterar o conteudo).
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
| Opcao | Significado |
|---|---|
-a |
Atualizar somente o tempo de acesso |
-m |
Atualizar somente o tempo de modificacao |
-c |
Nao criar o arquivo se ele nao existir |
-t |
Definir para o horario especificado ([[CC]YY]MMDDhhmm[.ss]) |
Executar touch em um arquivo existente nao apaga dados. Tambem e usado para manipular o tempo de modificacao, como forcar uma reconstrucao (verificacao de timestamp do make).
mkdir / rmdir - Criar e Excluir Diretorios
mkdir cria um diretorio. Para uma hierarquia profunda cujos pais nao existem, use -p para cria-los todos de uma vez. rmdir exclui somente um diretorio vazio.
mkdir project mkdir -p project/src/lib rmdir project/src/lib
$ rmdir project rmdir: failed to remove 'project': Directory not empty
Sem -p, voce nao pode criar um diretorio sob um pai inexistente e recebe um erro. Que rmdir "falhe a menos que esteja vazio" e um mecanismo de seguranca; para excluir conteudo e tudo, use rm -r (que e correspondentemente mais perigoso).
file - Determinar o Tipo de Arquivo pelo Conteudo
file determina o tipo de um arquivo examinando seu conteudo, nao sua extensao. Ele pode ver alem de uma extensao 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 extensao e identificado como JPEG. Verificar o tipo com file antes de abrir com cat e obter saida ilegivel e um habito seguro.
Wildcards e Expansao do Shell
Wildcards (globs) sao um mecanismo para especificar padroes de nomes de arquivo em massa. O ponto-chave e que e o shell, nao o cp ou rm, que os expande. O shell substitui o padrao por nomes de arquivo reais antes de passa-los ao comando.
| Padrao | Corresponde a | Exemplo |
|---|---|---|
* |
Qualquer string de zero ou mais caracteres | *.txt -> todos os .txt |
? |
Qualquer caractere unico | file?.txt -> file1.txt, fileA.txt |
[abc] |
Qualquer um dos caracteres entre colchetes | file[12].txt -> file1.txt, file2.txt |
[a-z] |
Qualquer caractere unico no intervalo | [a-c]* -> nomes que comecam com a/b/c |
[!abc] |
Qualquer caractere unico nao entre colchetes | file[!0].txt -> nao file0.txt |
Brace expansion { } e 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} e uma lista separada por virgulas e {1..3} e uma sequencia numerica. mkdir -p project/{src,test,docs} cria tres diretorios 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 nao corresponde a nada se nao houver .txt, e no bash padrao a propria string do padrao e passada ao comando. Tenha isso em mente.
ls *.nonexistent echo *.nonexistent
ls: cannot access '*.nonexistent': No such file or directory *.nonexistent
Quando um glob nao corresponde a nada, o bash por padrao passa o padrao como esta (echo imprime essa string, e ls diz "no such file"). Voce pode mudar isso para "expandir para vazio quando houver zero correspondencias" configurando shopt -s nullglob.
Erros Comuns e Correcoes
Aqui estao os pontos que causam problemas tanto na pratica quanto no exame.
- Esquecer
-rpara diretorio nocp:cp dir/ dst/gera um erroomitting directory. Sempre use-rou-apara copias de diretorio. - Confundir
-re-a: Use-rpara uma copia simples, e-apara um backup que preserva proprietario, permissoes, links e timestamps. Somente com-r, os atributos mudam. - Sobrescrever silenciosamente com
mv: Por padrao,mvsobrescreve silenciosamente um arquivo existente. Torne-ium habito para arquivos importantes. - Executar
rm *no diretorio root ou importante: E o shell que expande o glob. Usarecho rm *antes para confirmar o que ele expande e seguro. - Confusao com o erro "not empty" do
rmdir: Este e o comportamento seguro por design. Para excluir conteudo e tudo, userm -r, mas sempre confirme o alvo.
Solucao de Problemas
Sintoma: cp diz "omitting directory" e nao copia nada
Causa: Tentativa de copiar um diretorio sem -r (ou -a)
Verificacao:
file src
Correcao: Use cp -r src/ dst/ para diretorio, ou cp -a src/ dst/ para tambem manter atributos.
Sintoma: Arquivos desapareceram apos executar rm -rf
Causa: rm -rf exclui recursivamente sem confirmacao. rm nao tem desfazer
Verificacao:
echo rm -rf target/
Correcao: Use echo antes para inspecionar visualmente a expansao antes de executar. Combine com -i (rm -ri) se nao tiver certeza. Arquivos excluidos so podem ser recuperados de um backup.
Sintoma: Um wildcard nao corresponde / o padrao e impresso literalmente
Causa: Zero arquivos correspondem. O bash por padrao passa a string do padrao como esta
Verificacao:
shopt nullglob ls -d *.txt
Correcao: Verifique novamente o diretorio de destino e a extensao. Para expandir para vazio quando houver zero correspondencias, configure shopt -s nullglob.
Lista de Verificacao de Conclusao
- [ ] Explicou e usou a diferenca entre
cp -recp -a - [ ] Habilitou confirmacao de sobrescrita/exclusao com
mv -i/rm -i - [ ] Confirmou a criacao de arquivo vazio e atualizacao de timestamp com
touch - [ ] Confirmou a diferenca entre
mkdir -permdir - [ ] Escreveu
*?[ ]e brace expansion{ }de forma distinta - [ ] Entendeu que e o shell que expande os globs
Resumo
| Cenario | Comando | Ponto |
|---|---|---|
| Copiar | cp -r / cp -a |
-a preserva atributos tambem |
| Mover / renomear | mv -i |
Padrao sobrescreve silenciosamente |
| Excluir | rm -ri |
Sem desfazer; -rf requer cautela maxima |
| Criar / atualizar | touch / mkdir -p |
Mantem conteudo existente intacto |
| Remover dir vazio | rmdir |
Falha se nao estiver vazio (seguro) |
| Determinar tipo | file |
Pelo conteudo, nao pela extensao |
| Especificar em massa | * ? [ ] { } |
O shell faz a expansao |
Gerenciamento basico de arquivos e a area mais frequentemente usada no LPIC-1. Uma vez que voce solidifique isso, avance para o mecanismo de links que aponta para entidades de arquivo, e para o FHS e localizacao de arquivos, para completar o quadro.