今回はLinuxで使用するdiffコマンドについて説明しようと思います。
diffコマンドとは、ファイル内容の違いを確認するために使用するコマンドです。
2つのファイルを比較して内容が異なっていた場合、差異のある文字と何行目なのかを表示します。また、ディレクトリ同士の比較も行うことができ、ディレクトリ内のファイル名一覧に差分があるかどうかを確認することができます。
下記にdiffコマンドの書式及びオプションを表示します。
diff [オプション] ファイル1 ファイル2
オプション
-c・・・違いのある箇所をファイルごとに出力し、!記号で変更箇所を示す。context形式という。
-u・・・違いのある箇所を1つにまとめて、-記号と+記号で変更箇所を示す。unified形式という。
-y・・・ファイル内容を2列で表示する。
-i・・・大文字と小文字の違いを無視する。
-B・・・空白行の有無を無視する。
-w・・・空白を無視して比較する。
-a・・・ファイルを強制的にテキストとみなして1行ずつ比較する。
-r・・・ディレクトリを比較する時、サブディレクトリも再帰的に比較する。
diffコマンドを実際に実行するとどのように表示されるのかを確認してみようと思います。
比較する2ファイル内容は下記のようになります。ファイル名は「file1」、「file2」とします。(3行目と4行目の内容に差分が有ります)
それでは「diff file1 file2」と入力し、実行すると下記画像のような結果が表示されます。
差分のある文字列が表示されました。この表示内容についての説明図を下記に示します。
説明図の通り、「ファイル1の何行目」、「差分記号」、「ファイル2の何行目」と表示された後にそれぞれのファイル内容が表示されます。
今回は差分記号が変更の「c」でしたが、例えばファイル1に対して内容が削除されていた場合は「d」、追加されていた場合は「a」と表示されます。
今度は表示形式を変更してみます。オプション「-c」、「-u」をつけて、context形式、unified形式がどのように表示されるのかを確認してみます。
上記画像のように表示されました。「context形式」は!記号、「unified」形式は-記号と+記号で差分のある箇所を示していることが分かります。
diffコマンドはファイル内容に何も違いが無ければ何も表示されません。
そのため今回は小文字と大文字の差分によるものなので、「-i」オプションをつけた場合は何も表示されません。
参考資料
・【 diff 】コマンド(基本編)――テキストファイルの差分を出力する:Linux基本コマンドTips(102) - @IT (itmedia.co.jp)