diffコマンドとは?
diffコマンドは2つのファイル内容の違う部分を表示してくれるコマンドです。
diffを使えば変更箇所をわかりやすく表示できます。
どんな時につかう?
diffコマンドはファイルの変更があった時に使います。
例えば下記のようなシチュエーションがあります。
- 設定ファイルの変更を行った時
- ログなど更新されたファイルの変更箇所を調べる
- 攻撃によってファイルの改竄が行われたとき
サーバでの設定ファイルの確認は目視ではなくdiffを使って確認するようにしたいところです。
diffを使うには変更前のファイルが必要なのでこまめにバックアップを残しておく必要がありますので日々バックアップを行うようにしましょう。gitを使っている場合はgit diffというのも使えます。
diffコマンドの使いかた
実際にdiffコマンドを使ってみましょう。
- $ diff 変更前ファイル 変更後ファイル
- $ diff <(コマンド) <(コマンド)
というように使います。
<( ) を使えばコマンド出力もファイルとして扱えるのでdiffで比較できるようになります。
例を見てみましょう。
例1
これは一行目のdiffの一文字目が大文字・小文字で異なっているfile1とfile2があります。
$ cat file1
diff
Diff
diff diff
$ cat file3
Diff
Diff
diff diff
これをdiffで比較してみます。
<diff
の<先程打ったコマンド「diff file1 file3」の左側に打ったfile1にdiffと書いていることを示しています。
また、> Diffは右側のfile3に書いてあるということを表しています。
つまり、「file1にはdiffがあってfile3にはDiffがあるよ」といっています。
一番上には1c1とありますが、これはファイル1の1行目がchangeしてfile3の1行目になっているよということです。
diff file1 file3
1c1
< diff
---
> Diff
diffの結果には
- 1c1→ 左のファイル1行目と→ファイル1行目が変わっている。
- 1a2→左ファイル1行目の後に右ファイル2行目が挿入されている
- 2d1→左のファイル2行目がなくなって右ファイルの1行目直後になっている
例を見てみましょう
$ diff num1 num2
2d1
< b
f $ cat num1
a
b
c
$ cat num2
a
c
$ diff num1 num2
1a2
> g
$ cat num1
a
b
c
$ cat num2
a
g
b
c
diffを見やすくする
変更点が多くなるとdiffコマンドでは変更箇所がわかりにくくなります。
オプションをつけて実行すると変更箇所がわかりやすくなるのでその例を紹介します。
横並びで表示する-yオプション
横並びでどこが変更されたかをわかりやすく表示するにはyオプションを使用します。
$ diff num1 num2 -y
a a
b <
c c
pi@raspberrypi:~/diff $ diff file1 file2 -y
diff diff
Diff | diff
diff diff | diff diff
a a
b b
c c
-wでスペースの違いは無視する
ファイルによっては改行やスペースの違いは気にしない、同じものとして扱ってほしい!ということがあります。
しかし、diffではスペースが一つはいっても違うものとして認識されてしまいます。
そんなときはオプションでw, bを使いましょう。
-wを使うとスペースは無視されます。改行は無視されません。
また、-bを使う場合はスペースの数だけ違う場合は無視されます。
大文字小文字を無視する -i
-iオプションを利用すると英語の大文字と小文字を無視します。
改行の違いを無視する -B
改行が追加されたり、削除された変更については無視します。
vimdiff ビジュアルでわかりやすく表示
vimdiffはdiffの結果をビジュアル的に見やすく表示するコマンドです。変化があった行に関しては色付きの背景で表示、変化があった箇所はハイライトされています。変化は左右を見比べればわかります。$ vimdiff 左ファイル 右ファイル
という位置関係です。