「Linux標準教科書」の第5章は「基本的なコマンド2」です。
ここでは、主にテキストファイルを処理するのに便利なコマンドが紹介されています。
今回は、その中のdiffコマンドを勉強したので、私なりにまとめて紹介します。
「Linux標準教科書」を読んで分からなかったところは別で調べて、自分で分かるように付け足したりしてまとめましたので、「Linux標準教科書」の勉強の補助として私の記事を利用していただけると幸いです。
diffコマンド(ファイルの比較)
diffコマンドは、ファイルの比較(変更の有無の調査)をするコマンドです。
結果はターミナルに標準出力されるだけですが、リダイレクトすればファイルに出力することも可能です。
プログラムを更新した時にどこを変更したかをリストにする場合や、2つのファイルの内容が一致しているかを確認する場合などに使用します。
diffコマンドがどのように実行されるか確認するため、以下の内容でdifftest1というファイルを作成します。
あいうえお
acbde
さしすせそ
たちつてと
なにnuねの
はひふへほ
まみむめも
次に、比較用のdifftest2というファイルを以下の通り作成します。
あいうえお
acbde
さしすせそ
たちつてと
なにnuねの
はひふへほ
まみむめも
fghij
2行目を「かきくけこ」から「abcde」に、
5行目の「ぬ」を「nu」に変更し、
8行目に「fghij」を追加しています。
これで準備は完了しました。
実際に試してみましょう。
書式は以下の通り。
$ diff 比較元のファイル名 比較先のファイル
これを実行すると比較した結果が、
1行目が、差異のあった行番号を、
2行目の先頭に「< 」が付いた行が、比較元のファイルの差異のあった行の内容。
3行目の「—」で区切られて、
4行目の先頭に「> 」が付いた行が、比較先のファイルの差異のあった行の内容
という順番で、差異のあった数だけ表示されます。
なお、追加になった行は、比較元のファイルの表示はなく、「> 」の付いた行だけ表示されます。
下の画像は、実際にdifftest1とdifftest2に対してオプションなしでdiffコマンドを実行した結果です。
difftest2には3箇所変更を加えているため、先ほど紹介した通りの順番で3つ表示されています。
diffコマンド(ファイルの比較)-uオプションでunified形式の出力
diffコマンドはオプションを付けることで、差異の表示方法を変更することができます。
その中で-uオプションは、unified形式で比較の結果を表示させるオプションで、以下のようにオプションを付けます。
$ diff -u 比較元のファイル名 比較先のファイル
オプションなしのときと、unified形式のときでは比較の結果の表示方法が違います。
unified形式だと、
1行目の先頭に「—」が付いている行が、比較元のファイル名とタイムスタンプが、
2行目の先頭に「+++」が付いている行が、比較先のファイル名とタイムスタンプが表示され、
3行目の「@@」ではさまれている行が、次の行から表示される差異のあった行を含めた比較元のファイルの最初の行番号と最終の行番号、比較先のファイルの最初の行番号と最終の行番号を表示しています。
その次の行からは差分の内容が表示されているのですが、
先頭に「-」が付いている行が、比較の結果なくなっている(削除されている)内容を、
先頭に「+}が付いている行が、比較の結果追加になっている内容を、
先頭に半角スペースが付いている行は、差異のなかったということを意味しています。
実際に-uオプションを付けて実行した結果は、以下の通り。
diffコマンド(ファイルの比較)-cオプションでcontext形式の出力
-cオプションは、context形式で比較の結果を表示させるオプションで、以下のようにオプションを付けます。
$ diff -c 比較元のファイル名 比較先のファイル
unified形式のときと似ている部分もありますが、比較の結果の表示方法が違います。
context形式だと、
1行目の先頭に「***」が付いている行が、比較元のファイル名とタイムスタンプが、
2行目の先頭に「—」が付いている行が、比較先のファイル名とタイムスタンプが表示されています。
3行目の「 」はただの区切りで、「***」ではさまれている行が、次の行から表示される差異のあった行を含めた比較元のファイルの最初の行番号と最終の行番号を、
次の行からは上記で宣言されている行の内容が表示され、
先頭に「!」がある行が変更のあった行を、
先頭に「-」がある行が削除された行を意味しています。
その後にある「—」ではさまれている行が、次の行から表示される差異のあった行を含めた比較先のファイルの最初の行番号と最終の行番号を表示しています。
その次の行からの表示で、
先頭に「+}が付いている行が、比較の結果追加になっている内容を、
先頭に半角スペースが付いている行は、差異のなかったということを意味しています。
実際に-cオプションを付けて実行した結果は、以下の通り。
まとめ
今回は、「Linux標準教科書」の第5章のdiffコマンドを勉強したので、私なりにまとめて紹介しました。
「Linux標準教科書」を読んで分からなかったところは別で調べて、自分で分かるように付け足したりしてまとめましたので、「Linux標準教科書」の勉強の補助として私の記事を利用していただけると幸いです。