ファイルの内容と比較

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

はじめに

Linux でファイルを操作する実践的な実験へようこそ。Linux が初めてでも心配ありません。各ステップを順番に説明します。この実験では、ファイルの内容全体を表示する方法、ファイルの一部を確認する方法、ファイルを比較する方法を学びます。これらは、Linux のファイルシステムを操作し、理解するための基本的なスキルです。

ファイルの内容を表示する

まず、Desktop でターミナルを開くか、実験環境のターミナルタブに切り替えてください。

ターミナルウィンドウのスクリーンショット

ターミナルを開くと、通常は末尾が $ になっているコマンドプロンプトが表示されます。ここにコマンドを入力します。

まず、cat コマンドを使ってファイルの内容を表示します。

  1. ターミナルで次のコマンドを入力し、Enter キーを押します。
cat /tmp/hello

ここで、/tmp/hello は表示するファイルのパスです。/tmp はシステム上のディレクトリ(フォルダー)で、hello はそのディレクトリ内にあるファイル名です。

  1. Enter キーを押すと、ファイルの内容が表示されます。
Hi,
I am Labby!

これは /tmp/hello ファイルに含まれているすべての内容です。cat コマンドによって、ファイルの内容がターミナルに表示されました。

行番号付きでファイルの内容を表示する

次は、cat コマンドの出力に行番号を付けて表示します。

  1. ターミナルで次のコマンドを入力し、Enter キーを押します。
cat -n /tmp/hello

ここでの -n はオプションまたはフラグと呼ばれます。cat に対して、出力するすべての行に行番号を付けるよう指示します。

  1. ファイルの内容が行番号付きで表示されます。
     1 Hi,
     2 I am Labby!

長いファイルを扱うときや、特定の行を参照するときに便利です。

ファイルの先頭行を表示する

次に、head コマンドを使います。名前が示すとおり、head はファイルの先頭部分、つまり「ヘッド」を表示するコマンドです。

  1. ターミナルで次のコマンドを入力し、Enter キーを押します。
head -n1 /tmp/hello

ここで、-n1 は最初の 1 行だけを表示するよう head に指示するオプションです。1 を別の数字に変更すると、その数字の行数を表示できます。

  1. 次のような出力が表示されます。
Hi,

これはファイルの最初の行だけです。-n1 オプションを指定しない場合、head はデフォルトでファイルの先頭 10 行を表示します。

ファイルの先頭の数バイトを表示する

今度は、head コマンドを使って、ファイルの先頭から指定したバイト数を表示します。

  1. ターミナルで次のコマンドを入力し、Enter キーを押します。
head -c1 /tmp/hello

-c1 オプションは、ファイルの最初の 1 バイト(文字)だけを表示するよう head に指示します。-n と同じように、1 を別の数字に変更すると、その数のバイトを表示できます。

  1. 次のような出力が表示されます。
H

これはファイルの最初の文字だけです。テキストファイルでは、通常、1 文字が 1 バイトです。

ファイルの末尾行を表示する

次は、tail コマンドを使います。tailhead と反対に、ファイルの末尾を表示します。

  1. ターミナルで次のコマンドを入力し、Enter キーを押します。
tail -n1 /tmp/hello

head の場合と同様に、-n1 オプションは 1 行だけを表示するよう tail に指示します。ここでは、ファイルの最後の行が表示されます。

  1. 次のような出力が表示されます。
I am Labby!

これはファイルの最後の行です。-n1 オプションを指定しない場合、tail はデフォルトで最後の 10 行を表示します。

ファイルの末尾の数バイトを表示する

head で行った操作と同じように、tail を使ってファイルの末尾から指定したバイト数を表示できます。

  1. まず、最後の 1 バイトを表示してみます。ターミナルで次のコマンドを入力し、Enter キーを押します。
tail -c1 /tmp/hello

何も表示されない場合があります。これは、最後の文字が表示できない改行文字である可能性が高いためです。

  1. 次に、最後の 2 バイトを表示してみます。次のコマンドを入力し、Enter キーを押します。
tail -c2 /tmp/hello
  1. 次のように表示されます。
!

-c2 オプションは、ファイルの最後の 2 バイト(文字)を表示するよう tail に指示します。ここでは、ファイル内で最後に表示できる文字である感嘆符が表示されます。

ファイルを比較する

ここでは、diff コマンドを使って 2 つのファイルを比較し、相違点を確認します。

  1. まず、正しいディレクトリ(フォルダー)にいることを確認します。次のコマンドを入力し、Enter キーを押します。
cd ~/project

このコマンドで、現在のディレクトリをホームディレクトリ内の project フォルダーに変更します。~ はホームディレクトリを表す省略記号です。

  1. 次に、2 つのファイルを比較します。次のコマンドを入力し、Enter キーを押します。
diff file1 file2

このコマンドは、file1file2 の内容を比較します。

  1. 次のような出力が表示されます。
1c1
< this is file1
---
> this is file2

この出力の意味を確認しましょう。diff コマンドは、1 つ目のファイルを 2 つ目のファイルと同じ内容にするために必要な変更を示します。どちらのファイルが先に作成・変更されたかは関係ありません。diff は、コマンドを実行した時点の内容だけを比較します。

  • 1c1:1 つ目のファイルの 1 行目を、2 つ目のファイルの 1 行目と一致するように change(変更)する必要があることを示します。
  • < this is file1< 記号は、1 つ目のファイル(file1)の行であることを示します。
  • ---file1file2 の行を区切るセパレーターです。
  • > this is file2> 記号は、2 つ目のファイル(file2)の行であることを示します。

簡単に言うと、diff は 2 つのファイルで 1 行目の内容が異なることを示しています。file1file2 と同じにするには、this is file1 という行を this is file2 に置き換える必要があります。

ディレクトリを比較する

最後に、diff コマンドを使ってディレクトリ全体を比較します。

  1. ターミナルで次のコマンドを入力し、Enter キーを押します。
diff -r ~/Desktop ~/Code

-r オプションは、サブディレクトリも再帰的に比較するよう diff に指示します。~/Desktop~/Code は、比較する 2 つのディレクトリのパスです。

  1. 次のような出力が表示されることがあります。
Only in /home/labex/Desktop: code.desktop
Only in /home/labex/Desktop: gedit.desktop
Only in /home/labex/Desktop: gvim.desktop
Only in /home/labex/Desktop: xfce4-terminal.desktop

この出力は、Desktop ディレクトリに Code ディレクトリには存在しないファイルが 4 つあることを示しています。

まとめ

お疲れさまでした。これで「ファイルの内容と比較」の実験は完了です。今回学んだ内容を振り返りましょう。

  1. cat を使って、ファイルの内容全体を表示しました。
  2. cat -n を使って、行番号付きでファイルの内容を表示する方法を学びました。
  3. head を使って、行単位およびバイト単位でファイルの先頭を表示しました。
  4. tail を使って、行単位およびバイト単位でファイルの末尾を表示しました。
  5. diff を使って、ファイルの内容を比較する方法を学びました。
  6. 最後に、diff -r を使ってディレクトリ全体を比較しました。

これらのコマンドは、Linux の基本的なツールです。Linux を使い続ける中で、ファイルやディレクトリを確認・比較するために、これらのコマンドを頻繁に使うことになるでしょう。

コマンドの使い方を忘れた場合は、man の後にコマンド名を入力してください(例:man cat)。そのコマンドのマニュアルページが表示され、利用できる各オプションの詳しい情報を確認できます。

さまざまなファイルやディレクトリでこれらのコマンドを練習し、操作に慣れていきましょう。使うほど、自然に扱えるようになります。