お兄ちゃん!
少しだけ内容が違う
二つのファイルがあるんだ
どこが違っているか
調べられないかな?
もちろんできるよ!
今回はファイルの差分を
確認する方法を覚えよう!
diff
コマンドdiff
は
ファイルの差分を表示するよ
difference の略なんだ
diff [オプション]... ファイル...
オプション | 役割 |
---|---|
-u , --unified | unified diff 形式で出力する(後述) |
diff
の基本的な使い方は二つのファイルの比較だよなので ファイル
の箇所は通常は二つ指定すると覚えようここでは差分を出力するために比較する二つのファイル
a.txt
と b.txt
を作成しよう!cat > a.txt << EOF
111
222
333
444
555
666
777
888
999
EOF
cat > b.txt << EOF
111
333
444
555
656
777
888
999
000
EOF
ヒアドキュメントでファイルを作っているんだね
a.txt
と b.txt
…微妙に内容が違うみたいだよその違いを
diff
に判定させてみよう!diff a.txt b.txt
うん!実行するね!
2d1
< 222
6c5
< 666
---
> 656
9a9
> 000
複数の行が出力されたよ!二つのファイルの違いを表しているようだけど…
diff
がデフォルトで出力する形式をdiff
形式と呼ぶよそのまんまだね!
2d1
や 6c5
などが差分のある位置を示しているよ左の数字が1番目のファイルの行数右の数字が2番目のファイルの行数真ん中の英字がどのような差分かを示しているんだ
英字 | 意味 |
---|---|
a | 追加(append) |
d | 削除(delete) |
c | 変更(change) |
その位置の表す行の下に続いて差分の内容が示されているんだ
記号 | 意味 |
---|---|
< | 1番目のファイルにあり2番目のファイルにない行 |
> | 2番目のファイルにあり1番目のファイルにない行 |
さっきの
diff
の出力は差分の位置を表す行が三つあるね!ということはこれらを区切りにして以下の三つの差分を表しているんだ!2d1
< 222
6c5
< 666
---
> 656
9a9
> 000
そういうことだね一つずつ差分の出力内容を見ていこう!
2d1
< 222
d
は delete だったよね2番目のファイルと比較すると1番目のファイルから行がなくなっているんだ!そうだね1番目のファイルの2行目から
222
という行がなくなっていることを表しているよ!2番目のファイルではその位置は1行目ということだね6c5
< 666
---
> 656
c
は change で---
は見やすくするための区切りだよ1番目のファイル6行目の 666
が2番目のファイル5行目の 656
がそれぞれ変わっていることを表しているよ9a9
> 000
a
は append ね1番目のファイルには無いけど2番目のファイルに行が追加されているんだ!そのとおり!1番目のファイルの9行目の位置に2番目のファイルの9行目の
000
が追加されていることを表しているよ読み方さえ分かればテキストだけでシンプルに差分を表現してくれているとわかるね!
今回は
diff
で二つのファイルの差分を確認できると学んだよ!最初にみどりが困っていたように2つファイルの違いを調べる用途なら大抵どんなことにも使えるよ!
よく使われる場面は設定変更の確認だよオリジナルの設定からどんな変更をしたかを調べるのに便利なんだ!