/ファイルの差分を見る!diffコマンドの詳細まとめ【Linuxコマンド集】2016.09.11ファイルの差分を見る!diffコマンドの詳細まとめ【Linuxコマンド集】LinuxコマンドTweetPocketdiffはファイル同士の差分を表示するLinuxコマンドだ。プログラムの更新時にどこを変更したかをリストするなど多くのシチュエーションで活躍する便利なコマンドだ。Linuxを扱うエンジニアであれば、使う機会が頻繁にあるだろう。詳細を含めてdiffコマンドについてまとめてみた。コマンド実行例についてもすべてまとめているので、参考になるだろう。使い方は、次のとおりコマンドの後に比較するファイル2つのファイルを指定するだけだ。比較するファイル2例えば、workディレクトリ内の2つのファイル、test1.datとtest2.datの差異を表示する場合は、次のようになる。work/test2.dattest1.datに対するtest2.datの差異が表示された。結果に2c2と表示されているが、比較するファイル1の2行目が比較するファイル2の2行目に変更(c:Change)されているという意味だ。その下に、差異のあった比較するファイル1の2行目の内容---を挟んで、比較するファイル2の2行目の内容が表示されている上記diffコマンドを試すなら下のコマンドをLinux上で実行すればすぐに再現可能だ。差異が複数行の場合は、どのような表示なるか確認してみよう。比較するファイル2の2行目と3行目の内容を書き換える。work/test2.dat先ほどのdiffコマンドで同様に比較してみる。work/test2.dat結果に2,3c2,3と表示されているが、比較するファイル1の2行目と3行目が比較するファイル2の2行目と3行目に変更(c:Change)されているという意味になる。差異が離れた複数行の場合は、どのような表示なるか確認してみよう。比較するファイル2の1行目と3行目の内容を書き換える。work/test2.dat先ほどのdiffコマンドで同様に比較してみる。work/test2.dat結果が1c1と3c3の2つが表示された。比較するファイル1と比較するファイル2では、1行目同士、3行目同士が変更(c:Change)されているという意味だ。行が削除された場合は、どのような表示なるか確認してみる。比較するファイル2を2行目がないものと置き換える。work/test2.dat先ほどのdiffコマンドで同様に比較してみる。work/test2.dat結果が2d1と表示された。比較するファイル2では、比較するファイル1の2行目が削除(d:Delete)され、以降のテキストが1行の直後まで詰まったという意味だ。行が追加された場合は、どのような表示なるか確認してみよう。比較するファイル2を3行目が追加されたものと置き換える。work/test2.dat先ほどのdiffコマンドで同様に比較してみる。work/test2.dat結果が2a3と表示された。比較するファイル2では、比較するファイル1の2行目の直後に3行目が追加(a:Append)されているという意味だ。行が入れ替わった場合は、どのような表示なるか確認してみよう。比較するファイル2の2行目と3行目を入れ替えたものと置き換える。work/test2.dat先ほどのdiffコマンドで同様に比較してみる。work/test2.dat結果が2d1と3a3の2つが表示された。入れ替わりは、削除と追加で表現される。内容が同一で変更のない場合は、どのような表示なるか念のため、確認しておく。比較するファイル2を比較するファイル1の内容と同一にする。work/test2.dat先ほどのdiffコマンドで同様に比較してみる。work/test2.dat変更がない場合、結果はなにも表示しない。後から詳細をご紹介するが、まずは一覧で確認しておく。-rディレクトリ同士で比較する-sオプション:ファイルが異なるかのみチェックするどこに差異があるかではなく、単純にファイルが同一のものかどうかを表示するオプションだ。比較するファイル2workディレクトリ内の2つのファイル、test1.datとtest2.datの差異を同一かどうかのみ表示する場合は、次のコマンドになる。work/test2.dat同一なので、同一と表示された。work/test2.dat-sオプションの差異があった場合の表示を確認しよう。比較するファイル2の2行目の内容を書き換える。work/test2.datもう一度、先ほどと同様の-sオプションのコマンドで確認してみよう。work/test2.dat異なる部分が差異として表示された。work/test2.dat-qオプション:ファイルが異なるかのみチェックし同一の場合は結果を出力しない-sオプションと同様、どこに差異があるかではなく、単純にファイルが同一のものかどうかを表示する。-qオプションは結果が同じ場合はなにも出力しないオプションだ。比較するファイル2workディレクトリ内の2つのファイル、test1.datとtest2.datの差異を同一かどうかのみ表示する場合は、次のコマンドになる。work/test2.dat異なると表示された。work/test2.dat-qオプションの差異がなかった場合の表示を確認しよう。比較するファイル2を比較するファイル1の内容と同一にする。work/test2.datもう一度、先ほどと同様の-qオプションのコマンドで確認してみる。work/test2.dat同一の場合はなにも表示しない。work/test2.dat-cオプション:結果をコンテキスト形式で表示する結果をコンテキスト形式で表示するオプションだ。結果が同一の場合はなにも表示しない。比較するファイル2workディレクトリ内の2つのファイル、test1.datとtest2.datの差異をコンテキスト形式で表示する場合は、次のコマンドだ。work/test2.dat異なる部分がコンテキスト形式で表示された。コンテキスト形式では、比較するファイル1と比較するファイル2のファイル名とタイムスタンプが表示され、差異のある行は変更された行から前後に数行表示される。差異のある行は「!」でわかるようになっている。上記のオプションは次のコマンド一群でトライできる。work/test2.dat-Cオプション:結果をコンテキスト形式で表示する-cオプション同様、結果をコンテキスト形式で表示するオプションだが、表示する行数を指定できる。結果が同一の場合はなにも表示しない。比較するファイル2workディレクトリ内の2つのファイル、test1.datとtest2.datの差異をコンテキスト形式で表示、差異のあった前後に2行表示する場合は、次のコマンドだ。work/test2.dat異なる部分が前後2行と共にコンテキスト形式で表示された。work/test2.dat-uオプション:結果をユニファイド形式で表示する結果をユニファイド形式で表示するオプションだ。結果が同一の場合はなにも表示しない。比較するファイル2workディレクトリ内の2つのファイル、test1.datとtest2.datの差異をユニファイド形式で表示する場合は、次のコマンドだ。work/test2.dat異なる部分がユニファイド形式で表示された。ユニファイド形式では、比較するファイル1と比較するファイル2のファイル名とタイムスタンプが表示され、変更という表現ではなく、差異のある行は追加が+、削除が-でわかるようになっている。work/test2.dat-yオプション:比較した結果を横並びで表示する比較した結果を横並びで表示するオプションだ。結果が同一でも表示する。比較するファイル2workディレクトリ内の2つのファイル、test1.datとtest2.datの比較結果を横並びで表示する場合は、次のコマンドだ。work/test2.dat比較した結果が横並びで表示された。差異のある行は|でわかるようになっている。work/test2.dat-rオプション:ディレクトリ同士で比較するディレクトリ同士で比較するオプションだ。比較するディレクトリ2workディレクトリ内のdata1ディレクトリとdata2ディレクトリの2つのディレクトリ内のファイル同士を順次比較する場合は、次のようになる。work/data2/比較の結果がオプションなしと同じ形式で表示される。片方にしか存在しないファイルは、片方にのみ存在と表示される。上記のオプションは次のコマンドで演習できる。work/data2/複数のオプションを組み合わせる複数のオプションを組み合わせると、視認性が飛躍的に向上する。workディレクトリ内のdata1ディレクトリとdata2ディレクトリの2つのディレクトリ内のファイル同士を横並びで比較する場合は、次のようにする。work/data2/ファイルごとに順次結果が横並びで表示される。apple.datの差異のある部分に|が表示され、grape.datは差異がなかった。orange.datはdata1ディレクトリにしか存在しなかったという結果が、とてもわかりやすく表現された。ちなみに-yオプションで-cや-uでの形式の変更オプションは同時には使えない。最後にdiffコマンドに関連して、基本的なファイル検索のコマンドも紹介しておくfindファイル名やディレクトリ名、更新日付などで検索する。grepファイル内の文字を検索する。echoまた、本文中でechoコマンドを使っているが、こちらのページを参考にして欲しい。まとめdiffコマンドを使ったファイルやディレクトリの比較の方法を解説してきた。プログラミング中に自分で変更した点がわからなくなったとき、あらかじめバックアップしておいたファイルと比較することで、変更点を簡単に把握できる。自分が作成したファイルを他人に改変してもらって、どこを変えてきたか、いちいち報告を受けなくてもこのコマンドを使えはすぐにわかる。差分の結果をターミナルの画面上でコピーする操作やファイルへリダイレクトすることで変更履歴のドキュメントをすぐに作成でき、また、コンテキスト形式で保存しておけば外部の履歴管理ソフトなどでのバージョン管理の手続きもかなり効率化できる。プログラマだけではなくHTMLおよびCSSのコーダーやデータベース管理者にとっても応用の範囲はかなり広いので、ぜひこの機会に操作方法を把握して欲しい。TweetPocketこのページの続きや関連ページは下記から一覧で確認できます。・「様々な分野や言語の講師にチャレンジしてみたい」という方はぜひIT講師募集のページをご覧ください。リスキルテクノロジーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。IT講師募集のページを見るSNSでもご購読できます。【IT研修専門企業のリスキルテクノロジーです。】エンジニアの入り口に立つために役立つようなコンテンツを日々ご提供していきます。講師や代表やスタッフ陣が毎日楽しく書いています。ご質問・ご指摘等はぜひコメントください。*メールアドレス(公開はされません。*次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。講師スキル向上も目指せますIT講師に応募する。