Nesta aula, você aprenderá os comandos fundamentais para criar, copiar, mover e remover arquivos e diretórios no terminal Linux. Dominar essas operações é essencial para administrar sistemas e automatizar tarefas com scripts.

Além da sintaxe básica, veremos opções comuns e boas práticas para evitar acidentes, especialmente com o comando rm. Ao final, você será capaz de gerenciar arquivos e pastas com confiança.

cp, mv, rm

Os comandos cp, mv e rm são os pilares da manipulação de arquivos. cp copia arquivos ou diretórios, mv move (ou renomeia) e rm remove.

cp: Sintaxe básica: cp origem destino. Se o destino for um diretório existente, o arquivo é copiado para dentro dele. Use -r (recursivo) para copiar diretórios inteiros. Exemplo: cp -r /home/user/docs /backup.

# Copiar arquivo para diretório existente
cp arquivo.txt /tmp/

# Copiar diretório recursivamente
cp -r pasta /tmp/

# Copiar preservando atributos (modo, timestamp)
cp -p arquivo.txt novo.txt

mv: Move ou renomeia. Sintaxe: mv origem destino. Se o destino for um diretório, move o arquivo para lá; caso contrário, renomeia. Exemplo: mv arquivo.txt novo_nome.txt.

# Renomear arquivo
mv antigo.txt novo.txt

# Mover arquivo para diretório
mv arquivo.txt /tmp/

# Mover diretório
mv pasta /tmp/

rm: Remove arquivos. Sintaxe: rm arquivo. Use -r para diretórios e -f para forçar (suprimir confirmações). Cuidado: a exclusão é permanente!

# Remover arquivo
rm arquivo.txt

# Remover diretório recursivamente
rm -r pasta/

# Forçar remoção sem confirmação
rm -rf pasta/

mkdir e rmdir

mkdir cria diretórios e rmdir remove diretórios vazios. São comandos simples, mas com opções úteis.

mkdir: Sintaxe: mkdir nome_dir. Use -p para criar diretórios intermediários (pais) automaticamente. Exemplo: mkdir -p a/b/c cria a, depois b dentro de a, depois c dentro de b.

# Criar diretório simples
mkdir nova_pasta

# Criar diretório com subdiretórios
mkdir -p projetos/2024/janeiro

# Definir permissões ao criar (modo octal)
mkdir -m 700 pasta_secreta

rmdir: Remove apenas diretórios vazios. Se o diretório contiver arquivos, o comando falha. Para remover diretórios não vazios, use rm -r.

# Remover diretório vazio
rmdir pasta_vazia

# Tentar remover diretório com conteúdo (falha)
rmdir pasta_cheia  # erro: diretório não vazio

touch

touch é usado principalmente para criar arquivos vazios ou atualizar timestamps (data de modificação e acesso) de arquivos existentes.

Sintaxe: touch arquivo. Se o arquivo não existir, ele é criado. Se existir, seus timestamps são atualizados para o horário atual. Opções comuns: -a (altera apenas acesso), -m (altera apenas modificação), -t (define timestamp específico).

# Criar arquivo vazio
touch novo_arquivo.txt

# Atualizar timestamp de arquivo existente
touch existente.txt

# Definir timestamp específico (formato [[CC]YY]MMDDhhmm[.ss])
touch -t 202401011200.00 arquivo.txt

Cuidados com rm

O comando rm é poderoso e perigoso. Uma exclusão acidental pode ser catastrófica, especialmente com rm -rf. Aqui estão boas práticas:

  • Sempre verifique o diretório atual antes de usar rm -rf *. Use pwd para confirmar.
  • Use opções interativas: -i pergunta antes de cada remoção. Exemplo: rm -i arquivo.txt.
  • Evite usar rm -rf em scripts sem proteção. Considere mover para lixeira (mv para ~/.local/share/Trash) ou usar trash-cli.
  • Cuidado com variáveis vazias: Se uma variável estiver vazia, rm -rf $VAR/* pode se tornar rm -rf /*. Sempre valide variáveis.
  • Use aliases seguros: Adicione alias rm='rm -i' no ~/.bashrc para sempre pedir confirmação.
# Exemplo de risco com variável vazia
pasta=""
rm -rf $pasta/*  # Remove tudo no diretório raiz (se executado como root)

# Uso seguro: validar antes
if [[ -n "$pasta" ]]; then
    rm -rf "$pasta"/*
fi

Boas práticas

Sempre use aspas em caminhos com espaços e valide variáveis. Prefira cp -i e mv -i para evitar sobrescritas acidentais. Considere usar rsync para cópias mais complexas.

Referências

Exercícios

  1. Crie um diretório chamado teste, dentro dele crie um arquivo vazio a.txt usando touch. Depois copie a.txt para b.txt no mesmo diretório.

    ✓ Resposta:
    mkdir teste
    cd teste
    touch a.txt
    cp a.txt b.txt
  2. Usando um único comando mkdir, crie a estrutura de diretórios pasta1/subpasta1/pasta2.

    ✓ Resposta:
    mkdir -p pasta1/subpasta1/pasta2
  3. Renomeie o arquivo dados.txt para backup.txt usando mv.

    ✓ Resposta:
    mv dados.txt backup.txt
  4. Remova o diretório vazio lixo usando rmdir. O que acontece se ele não estiver vazio?

    ✓ Resposta:
    rmdir lixo
    # Se não estiver vazio, exibe erro: "rmdir: failed to remove 'lixo': Directory not empty"
  5. Explique por que o comando rm -rf $DIR/* pode ser perigoso se a variável $DIR estiver vazia ou não definida. Como evitar esse problema?

    ✓ Resposta:Se $DIR estiver vazia, o comando se torna rm -rf /*, que tenta remover tudo a partir da raiz. Para evitar, sempre verifique se a variável não está vazia antes de usar, por exemplo:
    if [[ -n "$DIR" ]]; then
        rm -rf "$DIR"/*
    fi