linux.playground

trilha / arco 2 · mexer em arquivo

o que é diff e o que ele faz

ontem o compose funcionava. hoje não sobe. você mudou alguma coisa e não lembra o quê. antes de debugar, uma pergunta: o que mudou?

em poucos minutos: o que o diff faz, como ler a saída dele, e a opção que esconde exatamente o erro que você procura. 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

é o jogo dos sete erros entre duas versões. o diff acha as diferenças, você decide qual delas quebrou.

para quem está começando

compara dois arquivos linha por linha e mostra só o que é diferente. se são iguais, não mostra nada.

a fonte da verdade

o diff lê os dois arquivos e acha o menor conjunto de linhas que, trocadas, transforma um no outro. o código de saída conta: 0 iguais, 1 diferentes, 2 erro.

o número por trás do nome

7,8c7,8 quer dizer: as linhas 7 e 8 do primeiro arquivo foram trocadas (change) pelas linhas 7 e 8 do segundo. com uma linha só, fica 8c8. a letra é a ação: a de add, c de change, d de delete.

agora você

terminal fechado

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

  1. compara o docker-compose.ok.yml, o que funcionava, com o docker-compose.yml, o que quebrou.

    diff docker-compose.ok.yml docker-compose.yml

  2. o mesmo, no formato unificado, que mostra o contexto em volta da mudança.

    diff -u docker-compose.ok.yml docker-compose.yml

  3. o diff termina com um código de saída. quando os dois arquivos são diferentes, qual número vem?

  4. só quer saber se são diferentes, sem ver as linhas.

    diff -q docker-compose.ok.yml docker-compose.yml

  5. inverte a ordem dos arquivos no formato unificado e repara no que mudou de sinal.

    diff -u docker-compose.yml docker-compose.ok.yml

  6. agora com -w, que ignora espaços, no formato unificado.

    diff -w -u docker-compose.ok.yml docker-compose.yml

cuidado: diff -w esconde a indentação do YAML

o arquivo ~/conferir.sh confere se a cópia do compose no servidor é igual ao original, antes de reiniciar o serviço. ele usa diff -q com a opção -w. só que a cópia do servidor tem um volumes: com a indentação errada, e essa é a única diferença. o -w ignora espaço, então o diff diz que está igual. passo 1: veja a diferença que o script não enxerga. rode diff -u original/compose.yml servidor/compose.yml. depois rode ~/conferir.sh: ele diz que está igual. passo 2: conserte o script. abra com nano ~/conferir.sh. para salvar: ctrl+o e enter. para sair: ctrl+x. passo 3: teste. rode ~/conferir.sh de novo: ele tem que avisar que o servidor está diferente e sair com erro.

a pílula

diff -u antes depoiso que saiu (-) e o que entrou (+)
diff -q a bsó diz se são diferentes
diff -r pasta1 pasta2compara pastas inteiras

antes de debugar, compara com o que funcionava.

quiz

1. o diff mostrou 8c8. o que isso quer dizer?
2. por que o diff -w pode esconder o erro num arquivo YAML?
3. o diff devolve 1 num script. o que isso quer dizer?

próxima aula: uid-e-gid (em produção)