ファイル内容の表示と比較

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

はじめに

Linux でのファイル操作に関する実践的な実験へようこそ!Linux が初めての方でも心配いりません。各ステップを丁寧に案内します。この実験では、ファイルの内容を表示する方法、ファイルの一部を特定して確認する方法、そしてファイル同士を比較する方法を学びます。これらは、Linux のファイルシステムを自在に扱い、理解するために不可欠な基本スキルです。

ファイル内容の出力

まず、デスクトップ上でターミナルを開くか、実験環境のターミナルタブに切り替えてください。

Terminal window screenshot

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

では、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

ここで、-n1head コマンドに対して「最初の 1 行だけを表示する」ように伝えるオプションです。この 1 を任意の数字に変えることで、表示する行数を変更できます。

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

これはファイルの最初の 1 行だけです。オプションを指定せずに head を実行した場合、デフォルトではファイルの最初の 10 行が表示されます。

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

再び head コマンドを使いますが、今度は行数ではなく、ファイルの先頭から指定した「バイト数」分を表示してみましょう。

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

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

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

これはファイルの最初の 1 文字です。テキストファイルでは、通常 1 文字が 1 バイトとして扱われます。

ファイルの末尾部分を出力する

続いて tail コマンドに進みましょう。予想がつくかもしれませんが、tailhead の逆で、ファイルの末尾(お尻の部分)を表示します。

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

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

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

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

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

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

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

何も出力されないように見えるかもしれません。これは、ファイルの最後の文字が「改行文字(目に見えない文字)」である可能性が高いためです。

  1. 代わりに、最後の 2 バイトを表示してみましょう。以下のコマンドを入力して Enter を押します。
tail -c2 /tmp/hello
  1. 今度は次のように表示されるはずです。
!

-c2 オプションは、ファイルの最後の 2 バイト(文字)を表示するよう指示しています。この場合、ファイル内の最後の可視文字である「感嘆符(!)」が表示されています。

ファイルの比較

ここでは、diff コマンドを使って 2 つのファイルを比較し、その違いを確認する方法を学びます。

  1. まず、正しいディレクトリにいることを確認しましょう。以下のコマンドを入力して Enter を押します。
cd ~/project

これにより、現在の作業ディレクトリがホームディレクトリ内の project フォルダに切り替わります。~ 記号はホームディレクトリを指すショートカットです。

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

これは file1file2 の内容を比較するよう diff に指示しています。

  1. 以下のような出力が表示されるはずです。
1c1
< this is file1
---
> this is file2

この出力の意味を解説します。diff コマンドは、1 番目のファイルを 2 番目のファイルと同一にするためにどのような変更が必要かを出力します。どちらのファイルが先に作成されたかは関係なく、コマンド実行時の内容を比較します。

  • 1c1: 1 番目のファイルの 1 行目を、2 番目のファイルの 1 行目に合わせるために change(変更)する必要があることを示しています。
  • < this is file1: < 記号は、1 番目のファイル(file1)の行であることを示します。
  • ---: file1file2 の内容を区切る線です。
  • > this is file2: > 記号は、2 番目のファイル(file2)の行であることを示します。

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

ディレクトリの比較

最後に、diff コマンドを使ってディレクトリ(フォルダ)全体を比較してみましょう。

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

-r オプションは「再帰的(recursively)」に比較することを意味し、サブディレクトリの中身まで含めて比較します。~/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)、マニュアルページを確認できることを覚えておいてください。そこには、各コマンドで利用可能なすべてのオプションの詳細が記載されています。

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