diff -yオプションの使い方を完全ガイド!左右に並べてファイル差分を表示する方法
生徒
「二つのテキストファイルの中身が、どこが違うのかパッと見て確認したいのですが、何か良い方法はありますか?」
先生
「そんなときはLinuxのdiffコマンドに-yオプションをつけて使ってみましょう。ファイル同士を左右に並べて比較できるんですよ。」
生徒
「左右に並ぶと、どこを修正したか一目でわかりそうですね!操作は難しいですか?」
先生
「いいえ、とても簡単です。差分がある場所に特別な記号が出るので、それさえ覚えれば誰でも使いこなせます。一緒に見ていきましょう。」
1. diffコマンドと-yオプションとは?
Linux(リナックス)を使っていると、複数のファイルを比較して「どこが違うのか」を調べたい場面がよくあります。これを「差分(さぶん)をとる」と言います。プログラムのコードを書き換えたときや、設定ファイルの一部を変更したときに、元のファイルと新しいファイルを比べる作業はエンジニアにとって日常茶飯事です。
通常、diffコマンドだけで比較すると、変更箇所が上下に並んで表示されるため、慣れていない人には少し読みづらく感じることがあります。そこで便利なのが「-y」というオプションです。
このオプションをつけると、ターミナルの画面を左右二分割して、左側に「比較元(ひかくもと)」のファイル、右側に「比較先(ひかくさき)」のファイルを表示してくれます。まるで間違い探しをしているような感覚で、直感的に違いを見つけ出すことができる優れた機能です。
2. 基本的な使いかたと画面の見かた
まずは、一番シンプルな使いかたを確認しましょう。コマンドを入力する場所を「ターミナル」や「コマンドライン」と呼びます。ここに命令を書き込んでキーボードのエンターキーを押すことで、パソコンが処理を実行します。
比較をするために、まずは「file1.txt」と「file2.txt」という二つのファイルがあると考えてください。これらを左右に並べて比較するコマンドは以下の通りです。
diff -y file1.txt file2.txt
リンゴ リンゴ
バナナ | オレンジ
スイカ スイカ
この結果を見てみましょう。真ん中に「|(縦棒)」という記号が表示されていますね。これが差分を表す重要なサインです。記号の種類には主に以下の三つがあります。
- 空白(記号なし):左右の行が全く同じであることを示します。
- |(縦棒):左右の行で内容が「変更」されていることを示します。
- <(左矢印):左のファイルにだけ行が存在することを示します。(右側から削除された)
- >(右矢印):右のファイルにだけ行が存在することを示します。(新しく追加された)
3. 実際にファイルを準備して比較してみよう
プログラミング未経験の方は、実際に手を動かすのが上達への近道です。ここでは、野菜のリストを書いた二つのファイルを作って、その差分を確認する流れをシミュレーションしてみましょう。まずは中身の違う二つのファイルを用意します。
左側のファイル(yasai1.txt)には「トマト、レタス、キュウリ」と書き、右側のファイル(yasai2.txt)には「トマト、キャベツ、キュウリ、ナス」と書いたとします。
diff -y yasai1.txt yasai2.txt
トマト トマト
レタス | キャベツ
キュウリ キュウリ
> ナス
実行結果を詳しく解説します。二行目の「レタス」と「キャベツ」の間には「|」があります。これは「中身が変わったよ」という意味です。そして四行目には、右側にだけ「ナス」があり、その前に「>」がついています。これは「右側のファイルに新しい行が増えたよ」ということを教えてくれているのです。
4. 表示幅を調整する--widthオプション
パソコンの画面サイズによっては、左右に並べたときに文字が重なってしまったり、逆に隙間が空きすぎて見づらくなったりすることがあります。そんなときに役立つのが--width(ウィズ)という設定です。
これは「一行に何文字分表示するか」を指定するものです。標準では130文字分くらいの幅が確保されますが、短い単語だけの比較なら幅を狭くしたほうがスッキリします。逆に長い文章やプログラムのコードを比較するときは、幅を広く取ると文字化けや折り返しを防げます。
diff -y --width=40 sample1.txt sample2.txt
PHP PHP
Laravel | Django
MySQL MySQL
上記のように--width=40と指定すると、全体の横幅を40文字分にギュッと凝縮して表示してくれます。自分の見やすい幅に調整することで、作業効率がぐんと上がります。特にノートパソコンの小さな画面で作業するときに重宝するテクニックです。
5. 差分がない行を表示しない--suppress-common-lines
数百行、数千行もある大きなファイルを比較する場合、同じ場所まで全て表示されると、肝心の「違う場所」が埋もれてしまいます。そこで、「同じ行は隠して、違う行だけを表示したい!」という要望に応えるのが--suppress-common-lines(サプレス・コモン・ラインズ)という長い名前のオプションです。
名前は長いですが、機能はとてもシンプルです。「suppress」は「抑制する」、「common lines」は「共通の行」という意味です。つまり、共通している部分は表示をガマンして、変化があった部分だけを抽出してくれます。
diff -y --suppress-common-lines list1.txt list2.txt
Aomori | Akita
Tokyo | Osaka
このように、変化があった行だけがピックアップされるので、大量のデータの中から修正箇所だけを特定したいときに非常に強力な武器になります。初心者の方も、このオプションを知っているだけで「Linuxを使いこなしている」という感じが出ますよ。
6. 大文字と小文字を区別せずに比較する-iオプション
パソコンの世界では、アルファベットの大文字「A」と小文字「a」は、別の文字として扱われます。しかし、文章のチェックをしているときなどは、「大文字か小文字かはどうでもいいから、スペルが合っているかだけ確認したい」という時もありますよね。
そんな時は、-iオプションを組み合わせましょう。この「i」は「ignore case(イグノア・ケース:大文字小文字を無視する)」の頭文字です。これを-yと一緒に使うことで、「左右に並べつつ、大文字小文字の違いはスルーする」という柔軟な比較が可能になります。
diff -yi file_A.txt file_B.txt
LINUX linux
COMMAND command
Standard Standard
もし-iをつけなければ、これらは全て「違いがある(|)」として判定されてしまいます。設定ファイルの種類によっては大文字小文字が重要な意味を持つこともありますが、まずは「だいたい合っているか」を調べたいときに便利な機能です。
7. 空白やタブの違いを無視する-Wオプション
文章の中に半角スペースが一つ入っているか、二つ入っているかといった些細な違いを無視したいこともあります。特にプログラムの世界では、行の先頭に空白を入れて見栄えを整える「インデント」という文化がありますが、この空白の数の違いで差分が出てしまうと本質的なエラーが見つけにくくなります。
-W(大文字のダブリュー)や-bオプションを使うと、空白の数による違いを無視してくれます。これによって、見た目の微調整による差分を除外し、本当に「文字の中身」が変わった場所だけを特定できるようになります。
diff -y -W text1.txt text2.txt
Apple Apple
Orange Orange
Strawberry Strawberry
このように、片方の行だけ少し右にズレていても、-Wを使えば同じものとして扱ってくれます。文字が並んでいる位置を気にする必要がなくなり、純粋な内容の比較に集中できるようになります。複数のオプションを組み合わせて使うことで、自分の思い通りの比較結果を得られるようになります。
8. ルート権限が必要なファイルの比較
Linuxには、一般ユーザーでは見ることができない「大切な設定ファイル」がいくつか存在します。これをシステムの重要人物である「ルート(root)」という特別なユーザー権限で扱うことがあります。こうした重要なファイルを比較する際は、コマンドの先頭にsudo(スードゥー)という魔法の言葉をつけて実行します。
これは「管理者として実行するよ」という宣言です。これを使わないと、権限がないためにファイルが開けず、エラーになってしまうことがあります。基本的な使いかたは同じですが、実行時にパスワードを求められるのが特徴です。
sudo diff -y /etc/host.conf /etc/host.conf.bak
multi on multi on
order hosts | order bind
システムの設定ファイルを書き換える前にバックアップ(コピー)を取っておき、作業が終わったあとにこのコマンドを使って「予定通りの場所だけが変わっているか」を確認するのは、プロのエンジニアが必ず行う安全確認の手順です。初心者のうちから、この「変更前後の比較」の癖をつけておくと、トラブルを未然に防げるようになりますよ。
まとめ
Linux(リナックス)のコマンドライン操作において、ファイルの変更箇所を特定する作業は非常に重要です。今回の記事では、diffコマンドの強力なオプションである-y(サイド・バイ・サイド表示)を中心に、実務で役立つテクニックを詳しく解説しました。
diff -yオプションのメリットをおさらい
通常の比較では、変更内容が上下にバラバラに表示されるため、大規模なソースコードや設定ファイルを扱う際に「どの行がどの行に対応しているのか」を見失いがちです。しかし、-yオプションを使用することで、ターミナル画面が瞬時に二分割され、直感的なビジュアル比較が可能になります。これは、WindowsやMacでGUIの比較ツール(WinMergeやVS CodeのDiff機能など)を使っている感覚に近く、CUI環境(黒い画面)での作業効率を劇的に向上させます。
覚えておきたい差分記号の役割
実行結果の真ん中に表示される記号の意味を正しく理解することが、マスターへの第一歩です。
| 記号 | 意味 | 解説 |
|---|---|---|
| (空白) | 一致 | 左右のファイルで内容が完全に同じです。 |
| | | 変更 | 同じ行ですが、内容が書き換えられています。 |
| < | 削除 | 左のファイルにのみ存在し、右側にはありません。 |
| > | 追加 | 右のファイルに新しく行が付け加えられました。 |
実務で役立つ組み合わせコマンド例
現場では、単純な比較だけでなく、不要な情報を削ぎ落とすカスタマイズが求められます。ここでは、本記事で紹介したオプションを組み合わせた応用例を紹介します。例えば、設定ファイルのバックアップと比較する際、コメントアウトや空白のズレを無視して、本質的な変更点だけを抽出したい場合に有効です。
diff -y -i -W --suppress-common-lines config.conf config.conf.bak
ServerName example.com | ServerName test.local
MaxClients 150 | MaxClients 100
上記のコマンドは、「左右に並べ(-y)」、「大文字小文字を区別せず(-i)」、「空白の差を無視し(-W)」、「同じ行は表示しない(--suppress-common-lines)」という、まさに「違いだけを浮き彫りにする」設定です。これをマスターすれば、ログファイルの解析やプログラムのデバッグ作業が驚くほどスムーズになります。
システム管理におけるroot権限での比較
サーバーの保守運用では、一般ユーザーではアクセスできない領域のファイルを扱うことが多々あります。その際は、管理者権限(root)を一時的に借りるsudoを利用しましょう。特にネットワーク設定やユーザー管理に関するファイルは、一文字のミスがシステム全体の停止に繋がるため、diff -yによる最終確認は必須の工程と言えます。
sudo diff -y /etc/ssh/sshd_config /etc/ssh/sshd_config.old
Port 22 | Port 2022
PermitRootLogin yes | PermitRootLogin no
このように、Linuxコマンドは一つ一つのオプションをパズルのように組み合わせることで、その真価を発揮します。まずは手元のテキストファイルで何度も練習し、記号の意味を身体で覚えましょう。
生徒
「先生、ありがとうございました!diff -yを使うと、まるで専用の比較ソフトを使っているみたいに画面が見やすくなって感動しました。特に中央の縦棒(|)や矢印の記号が、どちらのファイルに何が起きたのかを正確に示してくれるのが分かりやすいですね。」
先生
「それは良かったです。視覚的に情報を整理することは、エンジニアのミスを減らすためにとても大切なスキルなんですよ。ちなみに、さっき紹介したオプションの中で、どれが一番使えそうかな?」
生徒
「そうですね、--suppress-common-linesが一番気に入りました!長いプログラムだと、変更していない場所をスクロールして飛ばすのが大変だったので、違いがある場所だけをピンポイントで出せるのは魔法みたいです。」
先生
「お目が高い!実は現場のプロも、何千行もあるログファイルを比較するときは必ずそのオプションを使います。あとは、画面の横幅に合わせて--widthで調整するのも忘れないでくださいね。文字が重なってしまうと、せっかくのサイド・バイ・サイド表示が台無しになってしまいますから。」
生徒
「はい、幅の調整もセットで覚えます!あと、sudoを使ってルート権限のファイルを比較する方法も勉強になりました。システム設定を変えるときは、必ず変更前のバックアップを取ってから、diff -yで確認する習慣をつけます!」
先生
「その意気です。安全な操作こそが、優れたエンジニアへの近道ですよ。これからもLinuxの便利なコマンドを一つずつ自分の武器にしていきましょう。次はファイルの内容を結合するコマンドや、特定の文字列を検索するコマンドについても学んでいくと、さらに世界が広がりますよ!」
生徒
「はい!もっとたくさんのコマンドを覚えて、黒い画面を自由自在に操れるようになりたいです。これからもよろしくお願いします!」