blog

Linuxのdiffコマンドの例

ファイルを比較する場合、GUI ベースのソフトウェアを使用するのが一般的です。実際にこの目的でコマンドラインツールを使う人はほとんどいません。この記事では、diff コマンドの使い方をいくつかの例を挙...

Jul 2, 2025 · 5 min. read
シェア

ファイルを比較する場合、GUIベースのソフトウェアを使用するのが一般的です。実際にこの目的でコマンドラインツールを使う人はほとんどいません。コマンドラインを使ってファイル/ディレクトリを比較するのは、些細な作業というほど簡単ではありませんが、Linuxユーザーであれば、コマンドラインを使ってファイルを比較する方法を知っておくべきだと思います。

この記事では、diffコマンドの使い方をいくつかの例とともにご紹介します。

Linux diffコマンド

それでは、diffコマンドについて、いくつかの例を挙げながら理解していきましょう。

つのファイルがあるとします:

$ cat file1 
Hi, 
Hello, 
How are you? 
I am fine, 
Thank you. 
 
 
$ cat file2 
Hello, 
Hi, 
How are you? 
I am fine. 

2つのファイルの間に、いくつかの細かい違いがあることがわかります。では、diff コマンドがどのように違いを見つけるかを見てみましょう。

次のようにdiffコマンドを実行してください:

$ diff file1 file2 
1d0 
< Hi,  
2a2  
> Hi, 
4,5c4 
< I am fine, 
< Thank you. 
---  
> I am fine. 

diffの後にコマンドライン引数として2つのファイル名が続き、出力にdiff比較を生成していることがわかります。この出力は理解しやすいものではありません。これはコンピュータが使うものであり、人間が使うものではないからです。それでも、ステップごとに出力を解読してみましょう:

- 以下のテキストでは、file1 と file2 は旧ファイルと新ファイルとして扱われます。

1d0 
< Hi, 

ここで、1d0行は、2つのファイルの***行を同期させるために、古いファイルの***行を削除する必要があることを意味します。削除が必要な古いファイルの行は、'<' でマークされています。

2a2 
> Hi, 

ここで、2a2行目は、新しいファイルの2行目を古いファイルの2行目の後に追加することを意味します。追加される行は、'>'でマークされた出力の次の行に表示されます。

4,5c4 
< I am fine, 
< Thank you. 
--- 
> I am fine. 

ここで、4,5c4 という行は、古いファイルの 4 行目から 5 行目までが変更され、新しいファイルの 4 行目と置き換える必要があることを意味します。追加された行と削除された行は、それぞれ「>」と「<」で示されます。

つまり、要約すると

  1. diffコマンドの最初の***パラメーターは古いファイルとして扱われ、2番目のパラメーターは新しいファイルとして扱われます。
  2. 1d0、2a2、4、5c4のような表現は、構文的には[古いファイルの行番号または行の範囲][振る舞い][新しいファイルの行番号または行の範囲]としてデコードできます。ここでの「振る舞い」は、追加、削除、変更置換のいずれかです。
  3. <」は削除された行を表し、「>」は追加された行を表します。

ファイルだけでなく、diffコマンドは2つのディレクトリを比較することもできます。例を挙げて説明しましょう。

以下は「new_dir」ディレクトリの内容です:

$ ls new_dir/ 
file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt 
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt 

これが'orig_dir'ディレクトリの中身です:

$ ls orig_dir/ 
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt test 
file2 frnd frnd1.cpp log1.txt log3.txt log5.txt 

以下はdiffコマンドの実行結果です:

$ diff new_dir/ orig_dir/ 
Only in new_dir/: file 
Only in orig_dir/: test 

diffコマンドを使ってこの2つのディレクトリを比較すると、両方のファイルに欠けているファイルが簡単に表示されることがわかります。

コマンドラインでよく使われるオプションをいくつか紹介します:

1.ケースを無視する -i

2つのファイルに同じテキストが含まれていても、ケースが異なれば、diffコマンドはデフォルトで異なるものとして報告します。

例えば

$ cat file1 
HI 
 
$ cat file2 
hi 
 
$ diff file1 file2 
1c1 
< HI 
--- 
> hi 

diffコマンドは大文字と小文字の違いを出力することがわかります。

このデフォルトの動作を削除するには、-i オプションを使用します。

以下はその例です:

$ diff -i file1 file2 
$ 

こうすることで、2つのファイルが同一である場合のデフォルトの動作である、出力が生成されないことを確認できます。

2. -sオプションで2つのファイルを同一と報告

例1の後半で、diffはファイルが同一であればレポートを生成しないことを確認してください。このデフォルトの動作は良いものですが、それでも、特に不慣れな人にとっては非常に分かりにくいものです。したがって、diffコマンドに2つのファイルが異なることを明示的に報告させたい場合は、-sコマンドオプションを使用してください。

例を挙げましょう:

$ diff -is file1 file2 
Files file1 and file2 are identical 

この例の後半で-sオプションを追加したことで、diffコマンドが2つのファイルが同一であることを明示的に報告することがわかります。

3.スペースを無視するには -b を使用します。

もう1つよくあるのは、diffがファイル内にさまざまな数のスペースがあることを報告することです。

$ cat file1 
Hi, how are you? 
 
$ cat file2 
Hi, how are  you? 

2つのファイル***の違いは、file2の'are'と'you'の間の余分なスペースであることに注意してください。さて、diffコマンドを使って2つのファイルを比較すると、出力は次のようになります:

$ diff file1 file2 
1c1 
< Hi, how are you? 
--- 
> Hi, how are  you? 

つまり、diffコマンドは差分を報告することがわかります。しかし、空白を無視したい場合は、-bオプションを使用してください。

$ diff -b file1 file2 
$ 

このようにすると、-bオプションのおかげで、diffコマンドは2つのファイルが同一であると報告することがわかります。

diffコマンドには、追加のコマンドラインオプションも用意されています。完全なリストは参照してください。

via:

Read next

マイクロソフト、Visual Studio 2013とVisual Studio Onlineを発表

北京時間11月13日23:00、MicrosoftはVisual Studio 2013の発表イベントを開催し、その模様は全世界に生中継されました。このカンファレンスでは、Visual Studio 2013と.NET 4.5.1が正式に発表されたほか、Windows Azure上で動作し、クラウドでの開発体験を拡張する新しいクラウドベースの開発者向けサービスであるVisual Studio Onlineも発表されました。

Jul 2, 2025 · 3 min read