Nesta aula, você aprenderá os comandos fundamentais para criar, copiar, mover e remover arquivos e diretórios no terminal Linux. Essas operações são a base do gerenciamento de arquivos em scripts e na linha de comando, e dominá-las é essencial para qualquer profissional de TI. Vamos explorar cada comando com exemplos práticos, flags comuns e boas práticas para evitar erros.

Além de entender a sintaxe, você verá como combinar esses comandos com curingas e opções para automatizar tarefas repetitivas. Ao final, terá confiança para manipular arquivos e diretórios de forma segura e eficiente.

cp, mv, rm

Os comandos cp (copy), mv (move) e rm (remove) são os mais utilizados para manipular arquivos e diretórios. Eles permitem copiar, renomear/mover e excluir itens, respectivamente. A sintaxe básica é: comando origem destino (para cp e mv) ou comando alvo (para rm).

cp: Copia arquivos ou diretórios. Por padrão, copia apenas arquivos; para copiar diretórios recursivamente, use a flag -r (ou -R). Outras flags úteis: -i (pergunta antes de sobrescrever), -u (copia apenas se origem for mais recente ou destino não existir), -v (modo verboso). Exemplo: cp -iv arquivo.txt backup/ copia com confirmação e detalhes.

mv: Move ou renomeia arquivos/diretórios. Se o destino for um diretório existente, o item é movido para dentro dele; caso contrário, é renomeado. Flags comuns: -i (pergunta antes de sobrescrever), -u (move apenas se origem for mais recente), -v (verboso). Exemplo: mv -v relatorio.pdf relatorio_antigo.pdf renomeia o arquivo.

rm: Remove arquivos ou diretórios. Cuidado: por padrão, não move para lixeira; a exclusão é permanente. Flags importantes: -i (pergunta antes de cada remoção), -r (remove recursivamente diretórios), -f (força remoção sem perguntar, mesmo se protegido). Exemplo: rm -i arquivo.txt solicita confirmação.

# Exemplos de cp, mv, rm
# Copiar arquivo para diretório
cp documento.txt Documentos/

# Copiar diretório recursivamente
cp -r Projeto/ BackupProjeto/

# Renomear arquivo
mv antigo.txt novo.txt

# Mover arquivo para diretório
mv arquivo.pdf Documentos/

# Remover arquivo com confirmação
rm -i lixo.txt

# Remover diretório recursivamente
rm -r PastaTemp/

mkdir e rmdir

Os comandos mkdir (make directory) e rmdir (remove directory) são específicos para criar e remover diretórios vazios. Eles são mais seguros que rm -r para remoção de diretórios, pois rmdir só remove diretórios vazios, evitando exclusões acidentais de conteúdo.

mkdir: Cria um ou mais diretórios. Flags comuns: -p (cria diretórios pai se necessário, sem erro se já existirem), -v (verboso). Exemplo: mkdir -p projeto/src/css cria toda a estrutura de uma vez. rmdir: Remove diretórios vazios. Se o diretório contiver arquivos, o comando falha. Útil para limpeza segura. Exemplo: rmdir pasta_vazia. Para remover diretórios não vazios, use rm -r com cautela.

# Criar diretório simples
mkdir nova_pasta

# Criar estrutura aninhada
mkdir -p 2025/janeiro/relatorios

# Remover diretório vazio
rmdir nova_pasta

# Tentar remover diretório não vazio (falha)
rmdir pasta_com_arquivos  # Erro: Directory not empty

touch

O comando touch é usado principalmente para criar arquivos vazios ou atualizar o timestamp (data de modificação e acesso) de arquivos existentes. Se o arquivo não existir, ele é criado vazio; se existir, suas datas são atualizadas para o momento atual. É muito útil em scripts para gerar arquivos de log, sinalizar eventos ou simplesmente criar placeholders.

Flags comuns: -a (altera apenas o tempo de acesso), -m (altera apenas o tempo de modificação), -t (define um timestamp específico no formato [[CC]YY]MMDDhhmm[.ss]). Exemplo: touch -t 202501011200.00 arquivo.txt define a data para 1º de janeiro de 2025, 12:00.

# Criar arquivo vazio
touch novo_arquivo.txt

# Atualizar timestamp de arquivo existente
touch existente.txt

# Criar múltiplos arquivos
touch arquivo1.txt arquivo2.txt arquivo3.txt

# Definir timestamp específico
touch -t 202412312359.59 ultimo_dia_ano.txt

Cuidados com rm

O comando rm é poderoso e perigoso. Uma exclusão acidental pode ser catastrófica, especialmente se usada com -rf (recursivo e forçado) em diretórios importantes. Diferente de interfaces gráficas, o terminal não tem lixeira — a exclusão é imediata e irreversível (a menos que você tenha backups ou snapshots de sistema de arquivos).

Boas práticas: sempre use a flag -i para confirmar remoções, especialmente em scripts ou quando estiver começando. Evite usar rm -rf com curingas como rm -rf * sem verificar o diretório atual. Considere usar trash-cli (que move para lixeira) em vez de rm para maior segurança. Em scripts críticos, valide o caminho antes de remover. Exemplo: verifique se a variável não está vazia: if [ -n "$DIR" ]; then rm -r "$DIR"; fi.

# Exemplo perigoso: rm -rf *
# NUNCA execute sem ter certeza do diretório atual

# Alternativa segura com confirmação
rm -ri pasta_importante/*

# Uso de trash-cli (se instalado)
trash arquivo.txt

# Script seguro para remover diretório
#!/bin/bash
DIR="$1"
if [ -z "$DIR" ]; then
    echo "Erro: diretório não especificado"
    exit 1
fi
rm -ri "$DIR"

Boas práticas finais

Sempre verifique o diretório atual com pwd antes de operações destrutivas. Use aspas em nomes de arquivos com espaços. Prefira rm -i em scripts interativos e evite rm -f a menos que absolutamente necessário. Para diretórios, rmdir é mais seguro que rm -r se você tem certeza de que estão vazios. Documente comandos complexos em scripts com comentários.

Referências

Exercícios

  1. Crie um diretório chamado exercicio e dentro dele crie três arquivos vazios: a.txt, b.txt, c.txt. Em seguida, copie o arquivo a.txt para o diretório pai com o nome a_copia.txt.

    ✓ Resposta:
    mkdir exercicio
    cd exercicio
    touch a.txt b.txt c.txt
    cp a.txt ../a_copia.txt
  2. Renomeie o arquivo b.txt para b_renomeado.txt dentro do diretório exercicio. Em seguida, mova o arquivo c.txt para o diretório pai.

    ✓ Resposta:
    cd exercicio
    mv b.txt b_renomeado.txt
    mv c.txt ../
  3. Remova o diretório exercicio usando rmdir. Se falhar, explique por que e use o comando adequado para removê-lo.

    ✓ Resposta: rmdir exercicio falha porque o diretório não está vazio (contém b_renomeado.txt). Para remover, use rm -r exercicio ou rm -ri exercicio para confirmar.
  4. Crie um diretório projeto com subdiretórios src e docs usando um único comando. Em seguida, dentro de src, crie um arquivo main.sh com touch.

    ✓ Resposta:
    mkdir -p projeto/src projeto/docs
    touch projeto/src/main.sh
  5. Explique o que o comando rm -rf / faz e por que nunca deve ser executado. Em seguida, escreva um comando seguro para remover um diretório chamado teste com confirmação.

    ✓ Resposta: rm -rf / tenta remover recursivamente e forçadamente todo o sistema de arquivos a partir da raiz, o que destruiria o sistema operacional. Nunca execute isso. Comando seguro: rm -ri teste (pergunta antes de remover cada arquivo/diretório).