Carregando
0x180Lição 25 de 28

Não apague a produção

Aprenda os hábitos que impedem que um comando errado arruíne a sua semana.

22 min Questionário com 5 perguntas 1 exercício de código
Ao final desta lição, você saberá
  • Pré-visualizar comandos destrutivos antes de rodá-los
  • Explicar como uma variável vazia ou um espaço perdido vira um desastre
  • Revisar scripts com o ShellCheck e avaliar o curl | bash

O shell faz exatamente o que você manda, na hora, sem desfazer. A maioria dos desastres famosos de shell se resume a alguns pequenos erros, e alguns hábitos impedem quase todos.

O desastre de um caractere

Aqui está uma linha de um tipo real de script de limpeza. O que pode dar errado?

rm -rf "$BUILD_DIR"/*

Se BUILD_DIR estiver vazia ou não definida, o Bash roda alegremente rm -rf /*. Um erro de digitação no nome de uma variável também faz isso, porque o Bash trata variáveis desconhecidas como vazias. Duas defesas:

  • ${BUILD_DIR:?} para o script com um erro se a variável estiver vazia.
  • set -u faz qualquer variável não definida ser um erro.

E um espaço perdido é igualmente ruim: rm -rf / tmp/build apaga / e tmp/build.

Experimente

Até 15 XP

Quase acidente na câmara de ar

Você está limpando a pasta temporária da estação. Tudo aqui é simulado, então cometa os seus erros agora.

Missão 1 de 4

Veja o perigo

Hopper: “Defina TARGET=cache e depois pré-visualize a exclusão colocando echo na frente: echo rm -r $TARGET/*”

Shell simulado. Tente ls, ou digite help para ver os comandos.

/home/crew/work
  • cache
    • a.tmp
    • b.tmp
  • my
  • my notes.txt
  • precious
    • mission-data.db
Seta para cima: histórico. Tab: completar. Ctrl-L: limpar. Ctrl-C: cancelar.
  1. Veja o perigo
  2. Conheça o erro de digitação
  3. Acrescente a proteção
  4. Coloque o nome entre aspas

Hábitos que salvam você

  • Pré-visualize: coloque echo na frente, ou rode ls com o mesmo padrão antes.
  • Coloque aspas em toda variável: "$file".
  • Use set -euo pipefail nos scripts, e -- antes de nomes de arquivos que possam começar com traço.
  • Confira onde você está: cd /some/dir && rm -r * não apaga nada se o cd falhar, mas cd /some/dir; rm -r * apaga a partir de onde quer que você estivesse.
  • Rode o ShellCheck em todo script. Ele pega a maior parte do que esta aula aborda.
  • Cuidado com curl ... | bash: você está rodando código que não leu. Baixe, leia e depois rode.

Experimente

Até 15 XP

Revise este script de limpeza

Você está revisando o pull request de um colega. Clique em cada linha que poderia causar um desastre.

cleanup.sh (rodada 1 de 1)Sinais encontrados 0/0

Clique em todos os trechos suspeitos. São 4.

#!/bin/bash cd $DEPLOY_DIR rm -rf $OLD_RELEASE/* for f in $(ls *.log); do gzip "$f" done curl -s https://get.example.test/install.sh | sudo bash

Principais conclusões

  • Não há desfazer, então pré-visualize com echo ou ls.

  • Coloque aspas nas variáveis e proteja-as com ${var:?}.

  • Encadeie com && para que uma falha interrompa o passo seguinte.

  • Rode o ShellCheck e leia os scripts antes de passá-los para o bash por um pipe.

Quiz da aula

5 perguntas · aprovação com 4 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Pratique: escreva código em scripts Bash

Escreva um script no editor e execute-o de verdade com entradas de exemplo. Cada execução ganha um sandbox Linux novo com Bash 5.2 e as ferramentas GNU no Wandbox, um serviço público gratuito, então experimente à vontade, até com rm. Seu script e a entrada de teste são enviados para lá.

Exercício 1

Um limpador de ensaio

+25 XP

Escreva uma função clean que recebe uma pasta. Ela precisa parar com um erro se a pasta estiver vazia ou faltando, usando ${1:?}. Ela não apaga nada: para cada arquivo .tmp da pasta, imprime would delete NAME, e precisa lidar com nomes que têm espaços. O código inicial a chama para você.

  • Pré-visualiza com segurança
script.sh
Carregando editor…

Seu script roda com Bash 5.2 e ferramentas GNU no Wandbox, um serviço público gratuito, em um sandbox novo a cada execução. Seu script e a entrada de teste são enviados a esse serviço.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…