プロが教える店舗&オフィスのセキュリティ対策術

unixのコマンドにdiffというものがあります。unixだけでなく、Windowsのコマンドでも環境を整えたら使えるようですが。
さて、このdiffですが、動作がイマイチわかりません。2つのテキスト(プログラム)の違いを抽出すると理解しています。たとえば、1000行の文書があり、2つは全く同じですが、片方だけ1行目が空白だったとします。そうしますと、たとえ1行のズレているだけだとしても全部の行が違うわけですから”全部の行が異なる”という結果になるかなと思ったら1行目のカラ行抽出してくれるようです。それはありがたいことですが、厳密性という意味ではヌケがあるように思います(全行ちがうわけなので)。diffではテキストの違いを抽出ということですが、どのようなことが行われると理解すればいいのでしょうか。2つの違いを報告するときの報告の仕方がいろいろあるはずだと思うのですが。

2つのソースプログラムがあり、片方をコピーしてもう片方を作りアレコレ変更しているうちにわからなくなったので比較する、というようなことに使えるでしょうか。変更は行内変更もあれば、行を付け加えたり、削ったりしています。どこを変えたのか分からなくなるので。

よろしくお願いします。

A 回答 (7件)

diffは最長の共通部分が優先されるはずなので、質問者様の考える、1行の差と、ずれた999行なら、999行は同じ、と解釈されるはずです。



オプションには、「空白やタブを無視する」「改行を無視する」「大文字小文字を無視する」というような実装がされていると思いますが、おおむね似たような2つがあって、無視できない差を見つけたい、という用途に使うという感じでしょうか。

質問者様が考えるように、どちらかというと、プログラムの差分を見つけるのに便利なオプションが多いと思います。パッチあてする場合の、パッチ作成に使われたりします。

最近では、プログラムはバージョン管理システムを使って実装することが多いと思いますが、昔は、更新前にコピーして原本を保存することも多かったので、みんながコピーを作ってしまって、どれが最新かわからない、なんて時にも使ったりします。
    • good
    • 0

仕組みとしては、旧から新へどのような操作が行われたか、を基本として調査します。


そのため、以下の様な用途に使えます。

* 変更履歴
バージョン管理システムにて管理しているファイルは、
その変更履歴を全て記録しなければならないため、
diff の結果を差分圧縮として利用しデータ量を削減します。

* パッチ
一般に公開しているプログラムやデータに対して、
ごく一部分だけを修正したい場合は、
diff を利用して作成した修正内容(パッチ)だけを配布します。

* コードレビュー
銀行とか交通管制の用途に使用されるような、高い安全性が要求されるプログラムに対して、
なんらかの改修した際は必ずコードレビューなる検査が入ります。
その検査資料を作成する際に、変更内容のみを提示できる diff が便利です。
    • good
    • 0

意外にもこれまでの回答では言及されていないので補足しますが、diffコマンドではどのオプションでも第1引数のファイルと第2引数のファイルそれぞれの行番号が表示されます。

各オプションの意味はmanを見てください。

・a.txt:
line1
line2
line3
line4
line5

・b.txt:
line1
line2
line3 b.txt
line5
line5b

$ diff a.txt b.txt
3,4c3
< line3
< line4
---
> line3 b.txt
5a5
> line5b

$ diff -u a.txt b.txt
--- a.txt 2015-06-11 02:56:28.000000000 +0900
+++ b.txt 2015-06-11 02:57:00.000000000 +0900
@@ -1,5 +1,5 @@
line1
line2
-line3
-line4
+line3 b.txt
line5
+line5b
    • good
    • 0

「片方のファイルに、どういう修正を加えれば、他方のファイルになるか」を表示するコマンドです。



なので、「先頭に空行1行挿入すればいい」という操作が表示されます。
    • good
    • 0

大雑把には


行単位でどのような操作をしたか
を見つけてくれるツールだと思えばいい.
    • good
    • 0

あなたが直接diffを使う必要はないでしょう。



他のプログラムからdiffが利用されることがあります。例えばソースコードのバージョン管理システムの一つ(RCS)ではソースコードの差分を知るためにdiffが内部で使われています。
diffの存在を意識しなくても、diffを利用したシステムは全く問題なく使えます。


>2つの違いを報告するときの報告の仕方
オプションでdiff標準形式、ユニファイド形式、コンテキスト形式を切り替えられます。
    • good
    • 0

実際にソースコードを見たことがないので正確なところは不明だが、おそらく各行の数行前後を比較対象にしているんじゃないかと思います。


今はdiffよりもsdiffのほうが違いが分かりやすくていいんじゃないでしょうかね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!