Linuxコマンド【 diff 】2つのファイルの差分を出力する
当ページのリンクには広告が含まれています。
diffコマンドは、2つのファイルを比較するコマンドで、ファイル間の差分を出力します。
diffコマンド
書式
diff [オプション] オリジナルファイル 新しいファイル
オプション
-b | スペースの数が違うだけの場合は無視します。 |
-c | context出力形式で出力します。 |
-e | edスクリプト形式で出力します。 |
-i | 大文字と小文字の区別を無視します。 |
-n | RCS形式で出力します。 |
-q | ファイルが違うかどうかだけを報告します。 |
-r | ディレクトリを比較するときサブディレクトリも再帰的に比較します。 |
-s | ファイルに違いがない場合も報告します。 |
-u | unified出力形式で出力します。 |
オプションなしでファイルの比較
オプションなしのdiffコマンドの出力には、行番号、a/d/cのアルファベットと大なり小なり(>、<)が表示されます。a は追加(added)、d は削除(deleted)、c は変更(changed)を意味し、「<」は左側のオリジナルファイル、「>」は右側の新しいファイルの差分を表します。
例として、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と表示された場合、比較したファイルの中身は同じものになります。
関連コマンド
ファイル/ディレクトリ の人気記事
- Linuxコマンド【 chown 】ファイルの所有者やグループを変更する
- Linuxコマンド【 gzip 】ファイルを圧縮・展開する
- Linuxコマンド【 rsync 】高速にファイルを同期・転送する(バックアップ)
- Linuxコマンド【 zip 】ファイルを圧縮する
- ファイルの解凍・圧縮 - Linuxコマンド一覧(.zip .gz .Z .bz2 tar.gz .tgz tar.Z .taz .tar.bz2 .tbz2)
- Linuxコマンド【 ls 】ファイルとディレクトリのリストを表示する
- Linuxコマンド【 tar 】アーカイブを作成・展開する
- umask - ファイル作成時のパーミションを表示・変更 - Linuxコマンド
- manコマンドの表示を日本語にする方法
- Linuxコマンド【 diff 】2つのファイルの差分を出力する