今日の人気記事

  1. ssh - リモートマシンにSSHでログイン - Linuxコマンド
  2. ファイルの解凍・圧縮 - Linuxコマンド一覧(.zip .gz .Z .bz2 tar.gz .tgz tar.Z .taz .tar.bz2 .tbz2)
  3. tar - アーカイブの作成・展開 - Linuxコマンド
  4. rsync - 高速なファイル同期(バックアップ) - Linuxコマンド
  5. scp – リモートマシンにファイルコピー - Linuxコマンド

diff - 2つのファイルの差分を出力 - Linuxコマンド

スポンサーリンク

diffコマンドは、2つのファイルを比較するコマンドで、ファイル間の差分を出力します。

diffコマンド

書式

diff [オプション] オリジナルファイル 新しいファイル

オプション

-bスペースの数が違うだけの場合は無視します。
-ccontext出力形式で出力します。
-eedスクリプト形式で出力します。
-i大文字と小文字の区別を無視します。
-nRCS形式で出力します。
-qファイルが違うかどうかだけを報告します。
-rディレクトリを比較するときサブディレクトリも再帰的に比較します。
-sファイルに違いがない場合も報告します。
-uunified出力形式で出力します。
スポンサーリンク

オプションなしでファイルの比較

オプションなしのdiffコマンドの出力には、行番号、a/d/cのアルファベットと大なり小なり(>、<)が表示されます。a は追加(added)、d は削除(deleted)、c は変更(changed)を意味し、「<」は左側のオリジナルファイル、「>」は右側の新しいファイルの差分を表します。

使用例 - DebianのAPT用パッケージリストのファイル

DebianのAPT用のパッケージリソースリストのファイル/etc/apt/sources.list を例として、オプションなしでdiffコマンドを実行してみます。

オプションなしでオリジナルファイル(sources.list.org)と新しいファイル(sources.list)を比較します。

$ diff /etc/apt/sources.list.org /etc/apt/sources.list
2,6d1
< 
< # deb cdrom:[Debian GNU/Linux 6.0.4 _Squeeze_ - Official amd64 NETINST Binary-1 20120129-00:39]/ squeeze main
< 
< #deb cdrom:[Debian GNU/Linux 6.0.4 _Squeeze_ - Official amd64 NETINST Binary-1 20120129-00:39]/ squeeze main
< 
15a11
> test

「2,6d1」の部分は、オリジナルファイルの2行目から6行目まで削除(d、delete)し、その部分は新しいファイルの1行目に相当、ということを表します。ちなみに行番号は0から数えます。削除した部分の詳細は、「2,6d1」以下の部分に出力されています。

「15a11」の部分は、新しいファイルの11行目(オリジナルファイルの15行目に相当)に、15a11以下のテキストが追加(a、added)されたことが出力されています。

実際のファイルの中身をみてましょう。

オリジナルファイル(/etc/apt/sources.list.org)

# 

# deb cdrom:[Debian GNU/Linux 6.0.4 _Squeeze_ - Official amd64 NETINST Binary-1 20120129-00:39]/ squeeze main

#deb cdrom:[Debian GNU/Linux 6.0.4 _Squeeze_ - Official amd64 NETINST Binary-1 20120129-00:39]/ squeeze main

deb http://ftp.jp.debian.org/debian/ squeeze main
deb-src http://ftp.jp.debian.org/debian/ squeeze main

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

# squeeze-updates, previously known as 'volatile'
deb http://ftp.jp.debian.org/debian/ squeeze-updates main
deb-src http://ftp.jp.debian.org/debian/ squeeze-updates main

新しいファイル(sources.list)は、Debianインストール後にコメントアウトして残されているcdromの記述と空白行を削除し、末尾にテキスト(test)を追加しています。

#
deb http://ftp.jp.debian.org/debian/ squeeze main
deb-src http://ftp.jp.debian.org/debian/ squeeze main

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

# squeeze-updates, previously known as 'volatile'
deb http://ftp.jp.debian.org/debian/ squeeze-updates main
deb-src http://ftp.jp.debian.org/debian/ squeeze-updates main
test

diffコマンドの出力から差分が読み取れるようになるまで、いろいろ試してみましょう。

ファイルの違いだけを比較

オプション -q でファイルの違いだけを比較します。

$ diff -q /etc/apt/sources.list.org /etc/apt/sources.list
Files /etc/apt/sources.list.org and /etc/apt/sources.list differ

末尾にdifferと表示された場合、比較したファイルの中身は違うものになります。

ファイルが同じかどうかを比較

オプション -s でファイルが同じかどうかを比較します。

$ diff -s /etc/apt/sources.list.org /etc/apt/sources.list
Files /etc/apt/sources.list.org and /etc/apt/sources.list.org are identical

末尾にidenticalと表示された場合、比較したファイルの中身は同じものになります。

関連コマンド

cmp, patch

スポンサーリンク

関連記事と広告