Linux: Operações com Arquivos e Diretórios
No terminal Linux, criar, copiar, mover e excluir arquivos é apenas alguns toques de tecla — mais rápido e preciso do que usar o mouse.
📋 Pré-requisitos: Você deve primeiro concluir
- Aula 4: Navegação no Sistema de Arquivos
1. O Que Você Vai Aprender
- touch: criar arquivos e atualizar timestamps
- mkdir: criar diretórios (incluindo -p para recursivo)
- cp: copiar arquivos e diretórios
- mv: mover e renomear
- rm: exclusão segura (incluindo alerta de risco com -rf)
2. Alex Aprende a Criar uma Estrutura de Projeto Inteira em Uma Linha
(1) O Problema: Criar Diretórios Camada por Camada com Cliques Direitos
Alex queria criar a estrutura de diretórios de um projeto: myblog/src/css, myblog/src/js, myblog/docs. No Windows precisava clicar com o botão direito → Nova Pasta, criando cada camada manualmente — trabalho repetitivo toda vez.
(2) Um Comando Cria a Estrutura Inteira
O engenheiro sênior Bob digitou uma linha no terminal:
mkdir -p myblog/{src/{css,js,img},docs}
Depois de apertar Enter, tree myblog mostrou:
myblog/
├── src/
│ ├── css/
│ ├── js/
│ └── img/
└── docs/
Alex ficou maravilhado. Finalmente entendeu por que os desenvolvedores adoram o terminal.
(3) O Benefício: Eficiência Operacional Dispara
Depois de aprender os cinco comandos de operação de arquivos, a velocidade do Alex para criar e organizar arquivos foi de "minutos" para "segundos".
3. Pontos-Chave
(1) touch — Criar Arquivos ou Atualizar Timestamps
touch filename
Se o arquivo não existir, touch cria um arquivo vazio. Se existir, os horários de acesso e modificação são atualizados para o horário atual.
(2) mkdir — Criar Diretórios
mkdir dirname # Criar um único diretório
mkdir -p a/b/c # Criação recursiva (cria automaticamente os diretórios pai se não existirem)
mkdir dir1 dir2 dir3 # Criar vários diretórios de uma vez
mkdir -p src/{css,js} # Expansão de chaves para criação em lote
mkdir -p combinado com a expansão de chaves {a,b,c} é uma combinação poderosa do bash — mkdir -p projeto/{src/{css,js},docs} cria toda uma árvore de diretórios do projeto em uma única linha, muito mais rápido do que criar cada camada individualmente.
(3) cp — Copiar
cp source destination # Copiar um arquivo
cp -r source_dir dest_dir # Copiar diretório recursivamente
cp -i source destination # Modo interativo (confirma antes de sobrescrever)
cp -u source destination # Copiar apenas se a origem for mais recente
cp -v source destination # Mostrar progresso da cópia
cp -p source destination # Preservar atributos do arquivo (permissões/timestamps)
(4) mv — Mover e Renomear
mv oldname newname # Renomear
mv file.txt /caminho/para/destino/ # Mover arquivo para outro diretório
mv dir1 dir2 # Renomeia se dir2 não existir; move para dentro se existir
mv -i source dest # Confirmar antes de sobrescrever
mv -u source dest # Mover apenas se a origem for mais recente
(5) rm — Excluir
rm file.txt # Excluir um arquivo
rm -r dirname # Excluir diretório recursivamente
rm -f file.txt # Forçar exclusão (sem prompt de confirmação)
rm -i file.txt # Modo interativo (confirmar antes de excluir)
rm -rf dirname # Exclusão recursiva forçada (⚠️ combinação perigosa)
rm -rf / excluirá todo o sistema. Nunca execute rm -rf / como root. Adote o hábito de usar -i nas operações do dia a dia.
rm -rf não vão para a lixeira e não podem ser recuperados por meios normais. Antes de usar rm -rf, sempre confirme seu diretório atual (pwd) e o caminho que está excluindo, para evitar exclusão acidental. Considere adicionar alias rm='rm -i' ao seu .bashrc como rede de segurança.
(6) Links Físicos vs Links Simbólicos
| Característica | Link físico (hard link) | Link simbólico (symlink) |
|---|---|---|
| Comando | ln target link_name |
ln -s target link_name |
| Inode | Igual ao do arquivo original | Diferente |
| Entre sistemas de arquivos | Não | Sim |
| Pode linkar diretórios | Não | Sim |
| Após excluir o original | O link continua funcionando | O link quebra (link pendente) |
| Tamanho do arquivo | Igual ao do original | Armazena apenas a string do caminho |
# Link físico
ln original.txt hardlink.txt
# Link simbólico
ln -s /usr/bin/python3 python3
(7) ▶ Exemplo: Criar Arquivos e Diretórios
# Criar arquivos vazios
touch index.html
touch style.css script.js # Criar vários de uma vez
# Criar diretórios
mkdir projetos
mkdir -p projetos/web/src/css # Criar recursivamente diretórios aninhados
# Expansão de chaves (recurso do bash)
mkdir -p {2024,2025,2026}/{01,02,03}
# Cria: 2024/01, 2024/02, 2024/03, 2025/01, ...
Saída:
TEXT2024: 01 02 03 2025: 01 02 03 2026: 01 02 03
(8) ▶ Exemplo: Copiar Arquivos
# Copiar um único arquivo
cp index.html index.backup.html
# Copiar um diretório (requer -r)
cp -r projetos projetos-backup
# Modo interativo para evitar sobrescrita acidental
cp -i importante.txt /backup/
# Preservar atributos do arquivo
cp -p config.conf /backup/
Saída:
TEXTcp: overwrite '/backup/importante.txt'? n
(9) ▶ Exemplo: Mover e Renomear
# Renomear um arquivo
mv relatorio-antigo.md relatorio-2026.md
# Mover para outro diretório
mv relatorio.md ~/Documents/relatorios/
# Renomear em lote (usando um loop)
for f in *.html; do mv "$f" "${f%.html}.htm"; done
Saída:
TEXT(Sem saída, o arquivo foi renomeado)
(10) ▶ Exemplo: Exclusão Segura
# Segurança em primeiro lugar: modo interativo
rm -i arquivo.txt
# Excluir um diretório vazio
rmdir diretorio-vazio
# Excluir um diretório não vazio
rm -r projeto-antigo/
# Usar com cautela (exclui sem pedir confirmação)
rm -f temp.log
(11) ▶ Exemplo: Operações em Lote com Curingas
# Copiar todos os arquivos .jpg
cp *.jpg ~/Pictures/
# Excluir todos os arquivos temporários .tmp
rm *.tmp
# Mover arquivos que começam com 2024
mv 2024* ~/arquivo/
# Listar arquivos que terminam com um dígito
ls *[0-9]
Saída:
TEXTrelatorio2024.md log2025.txt backup1.tar.gz
(12) ▶ Exemplo Abrangente: Criar uma Estrutura Completa de Diretórios de Projeto
# Alex cria o projeto de blog dele (uma linha faz tudo)
mkdir -p myblog/{src/{css,js,img},docs,scripts,test}
# Criar um arquivo HTML index dentro de src
touch myblog/src/index.html
# Copiar como backup
cp -r myblog myblog-backup
# Renomear o diretório de backup
mv myblog-backup myblog-2026-07
# Ver a estrutura final
find myblog -type f -o -type d | sort
❓ Perguntas Frequentes
P:
rm -rf /realmente exclui todo o sistema? R: \1
P: Qual é a diferença entre cp e mv ao operar em diretórios? R:
cpexige a flag-rpara copiar diretórios (recursivo).mvnão precisa — mover um diretório usa o mesmo comando de mover um arquivo. Se o diretório de destino não existir,mvrenomeia; se existir, a origem é movida para dentro dele.
P: Como lidar com nomes de arquivo que contêm espaços? R: \1
P: Como renomear vários arquivos em lote? R: Use um loop
for:for f in *.jpg; do mv "$f" "prefixo_$f"; done, ou a ferramenta dedicadarename:rename 's/\.jpg$/\.png/' *.jpg.
P: O que acontece se eu excluir o arquivo original de um link simbólico? R: O symlink se torna um "link quebrado" —
ls -lmostrará o nome piscando em vermelho, e acessá-lo gerará um erroNo such file or directory. Links físicos não são afetados (porque apontam diretamente para o inode do arquivo original).
📖 Resumo
touchcria arquivos vazios;mkdir -pcria diretórios aninhadoscp -rcopia diretórios;mvmove ou renomeia;rm -rexclui diretórios- A expansão de chaves
{a,b,c}permite criação em lote lncria links físicos;ln -scria links simbólicosrm -rfé uma combinação perigosa — sempre confirme seu diretório atual e identidade antes de executar
📝 Exercícios
- Básico (Dificuldade ⭐): Use
mkdir -ppara criar a árvore de diretórioslinux/tarefas/{t1,t2,t3}/{src,docs}, e use expansão de chaves para criarmain.pyem cada subdiretório src de t - Intermediário (Dificuldade ⭐⭐): Copie t3 como t4 e verifique, depois exclua t1/src/main.py e use
rm -rpara excluir o diretório t2 inteiro - Avançado (Dificuldade ⭐⭐⭐): Crie um link simbólico apontando para
/etc/hostnamee verifique-o, depois escreva um one-liner usandofindpara localizar todos os arquivosmain.pyque você criou e renomeie-os em lote paramain.sh