Linux ファイル差分の表示

LinuxBeginner
オンラインで実践に進む

はじめに

ファイルを比較する能力は、開発者、システム管理者、および設定ファイルやコードを扱うすべての人にとって重要なスキルです。複数バージョンのファイルを管理する際に、それらの間の違いを特定することは、デバッグ、変更の追跡、およびコンテンツの効率的なマージに役立ちます。

この実験では、Linux でファイル比較ツールを使用してテキストファイル間の違いを特定する方法を学びます。まず、diff コマンドを使用した基本的なファイル比較から始め、次に、ファイルを並べて比較および編集するための視覚的なインターフェイスを提供する、より強力な vimdiff ツールを探索します。

これらのスキルは、Linux 環境におけるバージョン管理、コードレビュー、および設定問題のトラブルシューティングに不可欠です。

比較用のサンプルファイルの作成

このステップでは、後でさまざまなツールを使って比較するための、2 つの似たテキストファイルを作成します。わずかな違いがあるサンプルファイルを作成することで、比較ツールがこれらの違いをどのように強調表示するかを理解するのに役立ちます。

まず、プロジェクトディレクトリを作成し、そこに移動しましょう。

mkdir -p ~/project
cd ~/project

このコマンドは、ホームディレクトリに project という名前のディレクトリを作成し(まだ存在していない場合)、現在の作業ディレクトリをそこに変更します。

次に、少し内容が異なる 2 つのサンプルテキストファイル file1.txtfile2.txt を作成しましょう。

echo "The quick brown fox jumps over the lazy dog" > file1.txt
echo "The quick brown lynx jumps over the lazy dog" > file2.txt

これらのコマンドは、echo コマンドを使ってテキストをファイルに書き込みます。> 記号は出力を指定されたファイルにリダイレクトします。

各ファイルの内容を確認しましょう。

cat file1.txt

以下の出力が表示されるはずです。

The quick brown fox jumps over the lazy dog

次に、2 番目のファイルを確認します。

cat file2.txt

以下の出力が表示されるはずです。

The quick brown lynx jumps over the lazy dog

2 つのファイルは、1 つの単語を除いて同一であることに注意してください。file1.txt には "fox" が含まれていますが、file2.txt には "lynx" が含まれています。このわずかな違いは、比較ツールを使用すると簡単に識別できます。

diff を使った基本的なファイル比較

vimdiff に入る前に、基本的な diff コマンドから始めましょう。diff コマンドは、ファイルを行ごとに比較するための標準的な Linux ユーティリティです。

作成した 2 つのファイルを比較するには、以下のコマンドを実行します。

diff file1.txt file2.txt

以下のような出力が表示されるはずです。

1c1
< The quick brown fox jumps over the lazy dog
---
> The quick brown lynx jumps over the lazy dog

この出力が何を意味するかを理解しましょう。

  • 1c1 は、最初のファイルの 1 行目を変更(c)して 2 番目のファイルの 1 行目と一致させる必要があることを示します。
  • < で始まる行は、最初のファイルの内容を示します。
  • 3 つのダッシュ --- は、2 つのファイルの内容を区切ります。
  • > で始まる行は、2 番目のファイルの内容を示します。

diff コマンドにはいくつかの便利なオプションがあります。たとえば、違いを並べて表示するには、以下のコマンドを実行します。

diff -y file1.txt file2.txt

以下のような出力が表示されるはずです。

The quick brown fox jumps over the lazy dog      |    The quick brown lynx jumps over the lazy dog

より統一的で文脈を考慮した表示をするには、以下のコマンドを実行します。

diff -u file1.txt file2.txt

これは、パッチやバージョン管理システムで一般的に使用される形式で出力を生成します。

diff は迅速な比較に便利ですが、対話的な作業には限界があります。ここで vimdiff が登場します。次のステップで詳しく見ていきましょう。

vimdiff を使用した視覚的な比較

ここでは、vimdiff を使ってファイルを比較する、より視覚的な方法を探ってみましょう。vimdiff コマンドは、複数のファイルを開いた Vim を起動し、それらを並べて表示し、違いを強調表示します。

以下のコマンドを実行して、vimdiff で 2 つのファイルを比較しましょう。

vimdiff file1.txt file2.txt

Vim で両方のファイルが開かれ、並べて表示されるはずです。ファイル間の違いが強調表示されるため、"fox" から "lynx" への変更を簡単に見つけることができます。

vimdiff は特に便利です。なぜなら、

  1. 違いを視覚的に表現します。
  2. 比較しながらファイルを編集できます。
  3. 違い間をジャンプするためのナビゲーションツールを提供します。

Vim が初めての方には、以下の基本的なことを知っておくと良いでしょう。

  • Vim には異なるモード(ノーマル、挿入、ビジュアル)があります。
  • Vim を最初に開くと、ノーマルモードになります。
  • 変更を保存せずに Vim を終了するには、:q! と入力して Enter キーを押します。
  • 保存して終了するには、:wq と入力して Enter キーを押します。

まずは、vimdiff で違いがどのように強調表示されるかを観察してみましょう。終了する準備ができたら、:q! と入力して Enter キーを押します。すべてのファイルを終了するか確認するメッセージが表示された場合は、:qa! と入力して Enter キーを押します。

:qa!

このコマンドは、Vim に変更を保存せずにすべての開いているファイルを終了するよう指示します。

vimdiff でのナビゲーションと編集

これまでに vimdiff がファイルの違いをどのように表示するかを見てきました。次に、違い間を移動して編集する方法を学んでいきましょう。

vimdiff で再度ファイルを開きます。

vimdiff file1.txt file2.txt

違い間のナビゲーション

vimdiff では、以下のコマンドを使って違い間を移動できます。

  • ]c - 次の違いにジャンプ
  • [c - 前の違いにジャンプ

ノーマルモードで ]c と入力して(ノーマルモードでない場合は最初にエスケープキーを押します)、ファイル内の違いに移動してみましょう。

ファイル間でのテキストのコピー

vimdiff の強力な機能の 1 つは、一方のファイルから他方のファイルにテキストをコピーする機能です。以下のコマンドを使ってこれを行うことができます。

  • do (diff obtain) - 他のファイルの変更を現在のファイルに取り込む
  • dp (diff put) - 現在のファイルの変更を他のファイルに反映する

左側のファイルの違い部分にカーソルを合わせ、do と入力して右側のファイルのテキストを取り込んでみましょう。次に、右側のファイルにカーソルを合わせ、dp と入力して右側のファイルのテキストを左側のファイルに反映させてみましょう。

直接編集

通常の Vim と同じように、vimdiff でも直接ファイルを編集することができます。

  1. i を押して挿入モードに入ります。
  2. 変更を加えます。
  3. エスケープキーを押してノーマルモードに戻ります。
  4. :w と入力して変更を保存します。

vimdiff の終了

vimdiff の操作を終えたら、変更を保存せずに終了します。

:qa!

終了前に変更を保存したい場合は、各ファイルに対して以下のコマンドを使用します。

:wq

または、すべてのファイルを一度に保存して終了するには、以下のコマンドを使用します。

:wqa

vimdiff は、Vim の機能とファイル比較機能を組み合わせた強力なツールであり、コードレビュー、トラブルシューティング、変更のマージに最適です。

まとめ

この実験では、Linux 環境で 2 つの異なるツールを使ってファイルを比較する方法を学びました。

  1. diff - 基本的なファイル比較を行うコマンドラインユーティリティで、違いを行ごとに表示します。このツールは迅速な比較に最適で、様々な形式で違いを出力することができます。

  2. vimdiff - Vim テキストエディタをベースとした、より高度な視覚的な比較ツールです。違いを強調表示した並列比較を提供し、ファイルの対話的な編集とマージを可能にします。

これらのファイル比較スキルは、ソフトウェア開発やシステム管理における多くのタスクに不可欠です。具体的には以下のようなタスクが挙げられます。

  • コード変更のデバッグ
  • 設定ファイルの違いのレビュー
  • バージョン管理の競合の管理
  • 出力ログや結果の比較

これらのツールを習得することで、ファイル間の違いをより効率的に特定して解決することができ、作業時間を短縮し、エラーを減らすことができます。

さらなる練習として、より大きなファイルを比較したり、ファイル間により複雑な違いを作成して、これらのツールが様々なシナリオをどのように処理するかを確認してみてください。