ファイルの中身を見る
テキストファイルの内容を確認する方法はいくつかあります。短いファイルは cat で一気に表示、長いファイルは less でスクロールしながら閲覧します。先頭だけ見たいときは head、末尾だけ見たいときは tail を使い、ログの最新行を追うときに重宝します。
テキストファイルの中身を読むのは、設定の確認やログの調査など、日々の作業で最も頻度の高い操作のひとつです。Linuxには中身を表示する手段がいくつか用意されていて、ファイルの長さや目的に応じて使い分けます。どれもファイルを書き換えずに「見るだけ」なので、まずは気軽に試して中身を確認する癖をつけましょう。ここでは cat・less・head・tail の4つを押さえます。これらを使いこなせると、設定をいじる前に現状を把握したり、トラブル時にログから手がかりを拾ったりが格段にやりやすくなります。
一気に表示する cat
短いファイルなら cat が最も手軽です。名前は concatenate(連結する)に由来し、本来は複数ファイルをつないで出力するコマンドですが、cat ファイル名 と1つ指定すれば、その内容をまるごと標準出力(ふつうは画面)に流します。たとえば cat /etc/hosts でホスト名とIPアドレスの対応表がそのまま表示されます。-n オプションを付けると各行に行番号が振られ、設定ファイルの何行目かを把握したいときや、エラーメッセージが「何行目」と指すときの確認に便利です。空行には番号を付けたくない場合は -b を使います。
cat は便利ですが万能ではありません。長いファイルに cat を使うと内容が一瞬で画面を流れ切ってしまい、肝心の部分を読めません。数百行あるログを cat で開くのは典型的な失敗で、そういうときは次に挙げる less や、先頭・末尾だけ見る head・tail に切り替えます。なお cat にファイル名を渡さずに実行すると、キーボードからの入力(標準入力)をそのまま画面に返す動作になります。これは知らないと「コマンドが固まった」と勘違いしがちで、抜け出すには Ctrl + d で入力の終わり(EOF)を送ります。この終了方法は最初に覚えておくと安心です。
スクロールして読む less
1画面に収まらない大きなファイルは、less でページ送りしながら読みます。less ファイル名 で開き、スペースキーで1ページ進み、b キーで1ページ戻り、上下のカーソルキーで1行ずつスクロールできます。/ に続けて文字を打てばファイル内を前方検索でき、n で次の一致へ移動、G で末尾へ、g で先頭へ一気に飛べます。読み終えたら q で終了します。ファイル全体をメモリに読み込まずに表示するため、巨大なログファイルでも軽快に開けるのが利点です。
古くからある more も同様にページ送りができますが、less は前方向へ戻れたり検索できたりと機能が豊富なので、迷ったら less を選んでおけば間違いありません(「less is more」をもじって less のほうが高機能、と覚える人もいます)。more はファイルの末尾まで表示すると自動で終了しますが、less は q を押すまで画面に留まるという違いもあります。man でマニュアルを読むときの操作感も、この less とほぼ同じなので、less の操作(スペースで進む、b で戻る、/ で検索、q で終了)を覚えておくと、マニュアル閲覧にもそのまま活きます。
先頭と末尾だけ見る head と tail
ファイル全体ではなく一部だけ見たいときは head と tail が活躍します。head はファイルの先頭から、tail は末尾から内容を表示します。どちらも行数を指定しなければ既定で10行を表示し、head -4 file のように -数字 を付ければその行数だけに絞れます(head -n 4 file とも書けます)。長いログの冒頭にあるヘッダだけ確認したいときは head、最近書き込まれた最新のできごとだけ見たいときは tail、というように使い分けます。設定ファイルの形式をちらっと確かめるとき、cat より head のほうが画面を汚さず済みます。ログは新しい行が末尾に追記されていくため、調査では「最近何が起きたか」を見る tail の出番が圧倒的に多くなります。
tail の真価は -f オプションにあります。tail -f /var/log/messages のように使うと、ファイルに新しい行が追記されるたびに、その行が画面へリアルタイムに流れ続けます。サービスを起動・操作しながらログの動きを目で追う、いわゆる「ログ監視」の定番手段で、サーバ運用やアプリのデバッグで頻繁に使います。たとえば別の端末でWebサーバにアクセスしながら、こちらの端末で tail -f を回してアクセスログが増えるのを確認する、といった使い方です。流し続ける表示を止めるには Ctrl + c を押します。先頭から数えてN行目以降を出す tail -n +N といった指定もでき、特定の位置から末尾までをまとめて確認したいときに役立ちます。
実務では、これらを単体で使うだけでなく、パイプ(|)で他のコマンドにつないで使う場面が多くあります。たとえば一覧の多いコマンドの結果を コマンド | less と渡して落ち着いて眺めたり、ログを tail で絞った範囲をさらに grep で検索にかけたり、cat ファイル | grep キーワード で特定の行だけ拾ったりします。標準出力をそのまま次のコマンドの入力に渡せるのがLinuxの強みで、表示系コマンドはその出発点になります。「短ければ cat、長ければ less、端だけなら head/tail、追い続けるなら tail -f」と覚えておけば、状況に応じて最短手で中身にたどり着けます。