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.
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ê
um linux de verdade, só seu, apagado quando você sai.
compara o docker-compose.ok.yml, o que funcionava, com o docker-compose.yml, o que quebrou.
diff docker-compose.ok.yml docker-compose.ymlo mesmo, no formato unificado, que mostra o contexto em volta da mudança.
diff -u docker-compose.ok.yml docker-compose.ymlo diff termina com um código de saída. quando os dois arquivos são diferentes, qual número vem?
só quer saber se são diferentes, sem ver as linhas.
diff -q docker-compose.ok.yml docker-compose.ymlinverte a ordem dos arquivos no formato unificado e repara no que mudou de sinal.
diff -u docker-compose.yml docker-compose.ok.ymlagora 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 depois | o que saiu (-) e o que entrou (+) |
diff -q a b | só diz se são diferentes |
diff -r pasta1 pasta2 | compara pastas inteiras |
antes de debugar, compara com o que funcionava.
quiz
próxima aula: uid-e-gid (em produção)