Linux 講座 / ファイル内容の読み取り - cat, less, more, head, tail

Linuxでファイルの内容を読むときは、短いファイルにはcat、長いファイルを探索するときにはlessやmore、最初または最後の数行だけ確認するときにはheadとtailを使用します。ファイルを画面に出力することと編集することは異なります。この講座では同じ実習ファイルを5つのコマンドで確認し、適切な選択基準を身につけます。

この文章は内容を読むツールについて扱います。行を選んで集計する作業はgrep・cut・sort・uniq・wc テキスト処理で区別して練習します。

安全な実習ファイルの準備

下記のコマンドはBashで一般ユーザーとして実行します。ホームディレクトリにlinux-course-10-practiceが既にある場合は、既存の資料を触らずに別の名前を設定してください。mkdirが失敗した場合でも、次のコマンドを実行すると既存のファイルを上書きする可能性があります。

mkdir ~/linux-course-10-practice
cd ~/linux-course-10-practice
pwd

pwdが新しい実習ディレクトリを指していることを確認した後、次のコマンドで五行のテキストファイルを作成します。printfの\nは改行であり、>は標準出力をファイルに保存します。>は対象ファイルが既に存在する場合、内容を上書きするので、新しいディレクトリでのみ実行してください。

printf 'alpha\nbeta\ngamma\ndelta\nepsilon\n' > sample.txt

短いファイルをまとめて読み込む: cat

catはファイル内容を標準出力に送るので、小さなテキストファイルをすぐ確認するのに便利です。先ほど作ったファイルで実行すると、入力した五行が順番に表示されます。

cat sample.txt

出力例:

alpha
beta
gamma
delta
epsilon

catはページ分割やファイル編集を行いません。非常に長いファイルでは内容が画面を素早く流れる可能性があるため、その場合はlessを使用してください。テキストでないバイナリファイルを端末に無理に出力するのも避けた方が良いでしょう。

長いファイルを閲覧する: lessとmore

lessはファイルを一画面ずつ見ながら上下に移動したり検索したりできるページャーです。less sample.txtを実行した後、Spaceで次の画面、bで前の画面、/gammaとEnterで検索、nで次の一致項目を確認することができます。終了するときはqを押します。

less sample.txt

実習用ファイルは一画面より短いため、ページ移動の効果はあまり見えません。実際に長いログや設定ファイルを読むときに違いを確認できます。これらのキーはlessの画面内で操作します。シェルのプロンプトにコマンドとして入力しないでください。

moreも長いテキストを画面単位で表示します。基本的な次画面の移動はSpace、終了はqです。実装や環境によってナビゲーション機能が異なるため、前後移動や検索が必要な場合は通常lessが便利です。

more sample.txt

前部分と後部分だけ確認する: head と tail

ファイル全体ではなく先頭部分だけが必要ならhead、末尾部分だけが必要ならtailを使用します。GNUツールでは-n 2は2行を意味します。

head -n 2 sample.txt
tail -n 2 sample.txt

最初のコマンドの出力はalphaとbetaであり、二番目のコマンドの出力はdeltaとepsilonです。

alpha
beta
delta
epsilon

tail -f ファイルはファイルの末尾を表示した後、新たに追加される内容を追いかけ続けます。稼働中のログを見る際に便利ですが、コマンドが待機し続けるためCtrl+Cで終了する必要があります。ログが交換・ローテーションされる環境では、GNU tail -Fがファイル名を再度追いかけるのに適している場合があります。ファイルのアクセス権がなければ内容を読むことはできません。

状況別の選択と確認する点

必要な作業 コマンド 理由
短いファイル全体の確認 cat 内容をすぐに出力
長いファイルの探索・検索 less 画面の移動と検索
簡単なページ単位の表示 more 基本的な画面単位の出力
最初の数行を確認 head -n ファイルの前部分だけを出力
最後の数行・追加内容を確認 tail -n, tail -f 終わり部分またはその後の追加分を確認

ファイル名だけを見てテキストだと確信できない場合は、前のファイル種類講座で扱ったfileで形式を確認してください。特にターミナル制御文字が混ざったファイルは、画面表示が予想と異なることがあります。この講座のすべての読み取りコマンドは元の内容を変更しませんが、実習ファイルを作成した>はファイルを上書きできるという違いを覚えておいてください。

5行のファイルは1画面に収まるので、ページ移動を見たい場合は同じ新しい実習フォルダで別の80行のファイルを作ってください。lessの中でSpaceで次の画面、bで前の画面、/で検索、qで終了します。ウィンドウの高さによって1ページの行数は変わります。

seq 1 80 > long-sample.txt
less long-sample.txt

元のsample.txtは変更されません。比較後、rm -i long-sample.txtで追加したファイルだけを削除できます。

公式ドキュメント

GNU Coreutils マニュアルの cat·head·tail 項目と Bash リダイレクションのドキュメントでコマンドとファイル保存の動作を確認できます。less·more のキー操作は、インストールされているシステムの man less、man more も参考にしてください。