linux.playground

trilha / arco 2 · mexer em arquivo

o que é rm e o que ele faz

o script tinha uma variável com o caminho da pasta a limpar. a variável veio vazia. o rm recebeu o que sobrou da linha, e o que sobrou foi a raiz do sistema.

em poucos minutos: o que o rm faz, por que não existe lixeira, e como conferir a variável antes de apagar. a pílula fica no final.

o vídeo desta aula sai em breve.
a aula já funciona: lê, treina no terminal e faz o quiz.

escolhe a camada

em uma frase

é rasgar a página do caderno. não tem lixeira, e o rm não pergunta se era a página certa.

para quem está começando

apaga arquivos. para pasta, precisa de uma opção: -d para pasta vazia, -r para pasta com coisas dentro. o rm não move nada para lixeira nenhuma.

a fonte da verdade

o rm pede ao kernel para apagar o nome na pasta, e quando nenhum nome aponta mais para o inode, o espaço volta. quem expande o asterisco é o bash, antes do rm: o rm só recebe a lista pronta.

o número por trás do nome

o rm -f devolve 0 mesmo quando o arquivo não existe: o 0 não quer dizer que apagou. e a proteção --preserve-root só segura o rm -rf / literal, não o /* que a variável vazia vira.

agora você

terminal fechado

um linux de verdade, só seu, apagado quando você sai.

  1. apaga o velho.txt e confere que ele sumiu.

    rm velho.txt && ls

  2. tenta apagar a pasta-vazia só com rm, sem opção. o que acontece?

  3. apaga a pasta vazia com a opção própria para isso e confere.

    rm -d pasta-vazia && ls

  4. apaga a pasta projeto-velho com tudo dentro, listando o que apagou.

    rm -rv projeto-velho

  5. agora a variável vazia, só com echo na frente: nada vai ser apagado, só mostrado. veja o que o rm receberia.

    DIR=""; echo rm -rf "$DIR"/*

cuidado: rm -rf "$DIR"/* com DIR vazio vira /*

o arquivo ~/limpar.sh apaga o conteúdo da pasta que você passar como argumento. por segurança, ele está em modo de teste: tem um echo na frente do rm, então só mostra o que apagaria. só que ele não confere o argumento. rodando sem nada, o DIR fica vazio e o "$DIR"/* vira /*. passo 1: veja o que ele faria. rode ~/limpar.sh (sem nada depois). repare que o rm receberia a raiz inteira. passo 2: conserte o script. abra com nano ~/limpar.sh. para salvar: ctrl+o e enter. para sair: ctrl+x. não tire o echo. passo 3: teste. rode ~/limpar.sh sem argumento de novo: ele tem que parar com erro e não mostrar rm nenhum.

a pílula

rm arquivoapaga, sem lixeira
rm -r pastaapaga a pasta e tudo dentro
echo rm -rf "$DIR"/*mostra o que o rm receberia

confere a variável antes de apagar.

quiz

1. o que o rm -rf "$DIR"/* recebe quando o DIR está vazio?
2. como fazer o script parar quando a variável está vazia?
3. antes de rodar um rm -rf com variável, qual a forma segura de conferir?

próxima: o que é find e o que ele faz