自動化のスクリプト(=やりたい処理を順番に書いておき、まとめて実行できるファイル)が止まったとき、まずやることは何だと思いますか? 答えは「ログ(動いた記録)を見る」です。
ログはただのテキストファイルなので、ターミナルで中身を表示できればOKです。ただ、ログは何千行にもなることがあるので、全部を一度に表示すると、画面が流れて読めません。私も最初は cat で巨大なログを開いて、画面がずっと流れ続けて焦りました。
この記事では、ファイルの中身を見る4つのコマンド cat・less・head・tail の使い分けを、練習用のファイルで一緒に試していきます。
-
catで短いファイルを表示する方法 -
lessで長いファイルをページごとに読む方法(検索・終了のしかた) -
head・tailで、最初や最後の数行だけを見る方法 -
tail -fで、増えていくログをリアルタイムで追う方法
-
pwd・ls・cdと、パスの書き方がわかる -
mkdir・echoと>・>>でファイルを作れる
まだの方は「Linuxでファイルとフォルダを作る|mkdir・touch・echoの使い方【初心者向け】」から読むのがおすすめです。前の記事は「Linuxの削除コマンドrmの安全な使い方|ゴミ箱がない世界で消しすぎないコツ」です。
- 圧縮:ファイルの中身を工夫して、サイズを小さくすること
- IPアドレス:ネットワーク上のコンピューターの住所にあたる番号
- ターミナル:文字を打ってパソコンに指示を出すための画面(アプリ)。いわゆる「黒い画面」です。打った文字を読み取って動かすのは、この中で動いている「シェル」です
- コマンド:パソコンへの指示の言葉。ターミナルに打って Enter で実行します
用語で迷ったら、連載のまとめ記事の「よく出てくる用語ミニ辞典」でも確かめられます。
結論:長さと目的で使い分ける
| 見たいもの | コマンド | 例 |
|---|---|---|
| 短いファイルを全部 | cat | cat memo.txt |
| 長いファイルをじっくり | less | less app.log(q で終了) |
| 最初の数行だけ | head | head -n 5 app.log |
| 最後の数行だけ | tail | tail -n 5 app.log |
| 増えていく最後の行を追う | tail -f | tail -f app.log(Ctrl + C で終了) |
準備:練習用のファイルを作る
練習は ~/linux-practice/view-test の中で行います。
- 1
- 2
- 3
- 4
- 5
- 6
mkdir -p ~/linux-practice/view-test
cd ~/linux-practice/view-test
echo "1行目:はじめてのメモ" > short.txt
echo "2行目:中身を見る練習" >> short.txt
seq 1 200 > numbers.txt
ls -lここから先の出力例は、Debian 13での実行例です(ユーザー名 kaito・パソコン名 demo のダミー環境)。UbuntuやWSL(=Windows の中で Linux を動かせる、Microsoft のしくみ)では、表示が少し違うことがあります。
(例)
- 1
- 2
- 3
total 8
-rw-rw-r-- 1 kaito kaito 692 Nov 1 04:59 numbers.txt
-rw-rw-r-- 1 kaito kaito 64 Nov 1 04:59 short.txt692 と 64 は、ファイルの大きさ(バイト数)です。日時はファイルを作った時刻なので、みなさんの画面では違う値になります。左はしの -rw-rw-r-- の部分も、環境によっては -rw-r--r-- のように少し違って表示されることがあります。この記事の練習には影響しないので、気にしなくて大丈夫です(くわしくは Lv2 の「パーミッション(権限)」の記事で扱います)。
seq 1 200 は、1から200までの数字を1行ずつ出すコマンドです。それを > でファイルに書いて、200行ある長いファイルを用意しました。
cat:短いファイルを全部表示する
cat(キャット)は、ファイルの中身をそのまま全部画面に出します。
- 1
cat short.txt(例)
- 1
- 2
1行目:はじめてのメモ
2行目:中身を見る練習数行のメモや設定ファイルなら、cat がいちばん手軽です。では、200行のファイルではどうでしょう。
- 1
cat numbers.txt(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
(途中省略)
195
196
197
198
199
200一気に流れて、最初のほうが見えなくなってしまいました。長いファイルには、次の less を使います。
less:長いファイルをページごとに読む
less(レス)は、ファイルを1画面ずつ表示してくれるコマンドです。
- 1
less numbers.txt画面には先頭の 1 から1画面ぶんが表示され、いちばん下に numbers.txt と出ています。これが「キー操作を待っています」という合図です。
less を開いている間は、次のキーで操作します。
| キー | 動き |
|---|---|
Space(スペース) | 次の1画面へ |
b | 前の1画面へ |
↓・↑ | 1行ずつ動く |
g・G | いちばん上・いちばん下へ |
/文字 → Enter | その文字を探す(n で次を探す) |
q | 終了してターミナルに戻る |
試しに、/150 と打って Enter を押してみてください。150 の行まで飛んでくれます。150 が画面のいちばん上に来て、見つかった文字が強調(反転)表示されます。いちばん下の表示は : に変わります。
less を開いたまま、ほかのコマンドを打とうとしても入力できません。困ったら q を押しましょう。このあと出てくる man(説明書を開くコマンド)も、同じように q で閉じられます。
head と tail:最初や最後だけを見る
head:最初の数行
head(ヘッド)は、ファイルの先頭だけを表示します。何も指定しないと10行、-n 数字 で行数を変えられます。
- 1
- 2
head numbers.txt
head -n 3 numbers.txt(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
kaito@demo:~/linux-practice/view-test$ head numbers.txt
1
2
3
4
5
6
7
8
9
10
kaito@demo:~/linux-practice/view-test$ head -n 3 numbers.txt
1
2
3CSV ファイルの1行目(見出し)を確かめたいときなどに便利です。
tail:最後の数行
tail(テイル)は、反対に最後だけを表示します。
- 1
- 2
tail numbers.txt
tail -n 3 numbers.txt(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
kaito@demo:~/linux-practice/view-test$ tail numbers.txt
191
192
193
194
195
196
197
198
199
200
kaito@demo:~/linux-practice/view-test$ tail -n 3 numbers.txt
198
199
200ログは、新しい記録がいちばん下に足されていきます。だから、「さっき何が起きた?」を知りたいときは tail がいちばん役に立ちます。
tail -f:増えていくログを追いかける
tail -f は、ファイルの最後を表示したあと、終わらずに待ち続け、新しい行が足されるたびに表示してくれます。動いている自動化のログを見守るときに使います。
ここでは、ターミナルを2つ使って試します。WSL なら、Windows ターミナルの「+」で新しいタブを開けばOKです。
1つ目のターミナル(見守る側):
- 1
- 2
- 3
cd ~/linux-practice/view-test
touch app.log
tail -f app.log2つ目のターミナル(書き込む側):
- 1
- 2
- 3
cd ~/linux-practice/view-test
echo "処理を開始しました" >> app.log
echo "処理が終わりました" >> app.log(例)
- 1
- 2
- 3
kaito@demo:~/linux-practice/view-test$ tail -f app.log
処理を開始しました
処理が終わりました最初は何も表示されずに止まったように見えますが、それで正常です。2つ目のターミナルで echo を打つたびに、1つ目の画面に1行ずつ増えていきます。
見守るのをやめるときは、1つ目のターミナルで Ctrl + C を押します。tail -f が止まって、コマンドを打てる状態に戻ります。画面には ^C と表示されます。
この連載の Lv3・Lv4 では、決まった時刻にスクリプトを動かしたり、サーバーで24時間動かしたりします。そのとき「ちゃんと動いているかな?」を確かめるのに、この tail と tail -f を何度も使います。
実践:ログを読むときの3ステップ
ここまでのコマンドを、実際にログを読むときの順番に並べると、こうなります。
-
tail -n 20 ファイル名:まず、最後の20行だけを見る。「さっき何が起きた?」は、たいていここに書いてあります -
less ファイル名→G:もっと前が見たくなったら、lessで開いてGでいちばん下へ行き、bで少しずつ上へさかのぼる -
/Error→ Enter →n:探したい言葉があるときは、lessの中で/で検索し、nで次の場所へ
どのログでも、この「最後だけ見る → さかのぼる → 探す」の順番で読めば、迷いにくくなります。
よくあるつまずき
「No such file or directory」と出る
ファイル名が違うか、今いる場所が違います。pwd と ls で確かめましょう。
(例)
- 1
cat: nothing.txt: No such file or directory「Permission denied」と出る
/var/log の中にあるシステムのログなどは、見る権限がない場合があります。
(例)
- 1
cat: /var/log/btmp: Permission denied/var/log/btmp は、ログインに失敗した記録が残るファイルです。パスワードの総当たりなどの手がかりになる大事な記録なので、ふつうのユーザーでは読めないようになっています。「Permission denied(許可がありません)」は、「このファイルを読む権限がありません」という意味です。
権限については、この連載の Lv2「パーミッション(権限)」の記事でくわしく扱います。それまでは、自分のホームディレクトリの中のファイルで練習しましょう。
日本語の設定(ロケール)になっている環境では、同じエラーが次のように表示されます。意味は英語のときと同じです。
- 1
- 2
cat: nothing.txt: そのようなファイルやディレクトリはありません
cat: /var/log/btmp: 許可がありません文字化けしたような記号が大量に出た
画像や圧縮ファイルなど、テキストではないファイルを cat すると、読めない記号がずらっと出ます。壊れたわけではありません。画面が崩れたままなら、reset と打って Enter を押すと元に戻ることがあります。
🤖 詰まったらAIに聞こう:ログの意味がわからない
- 1
- 2
- 3
- 4
- 5
- 6
- 7
Linuxの初心者です。tail でログの最後を表示したら、次のようなメッセージが出ていました。
このログが何を意味しているのか、エラーなら考えられる原因と、次に確認することを初心者向けに教えてください。
【使っている環境】WSLのUbuntu など
【何のログか】例:自分で作った Python スクリプトのログ
【実行したコマンド】例:tail -n 20 app.log
【表示されたログ】ここに貼るログには、パスワード、APIキー、トークン、メールアドレス、IPアドレスなどがそのまま書かれていることがあります。APIキーやトークンは、Web のサービスを使うときに本人の代わりになる、合言葉のような文字列です。貼る前に必ず見直して、気になる部分は「***」に置き換えてください。
よくある質問
Q. less と more は、何が違いますか?
どちらも長いファイルを1画面ずつ見るコマンドですが、less のほうが、上に戻ったり検索したりしやすいです。迷ったら less を使いましょう。
Q. tail -f を止めるとき、ファイルが消えたりしませんか?
消えません。Ctrl + C で止まるのは「見守る」動きだけで、ファイルの中身はそのまま残ります。
まとめ
- 短いファイルは
cat、長いファイルはless(qで終了、/で検索) - 最初だけなら
head、最後だけならtail。行数は-n 数字 - ログは下に増えていくので、「さっき何が起きた?」は
tail -
tail -fで増えていくログを見守れる。止めるのはCtrl + C
中身が読めるようになると、エラーやログとの付き合い方がぐっと楽になります。次は、コマンドの使い方がわからなくなったときの調べ方を身につけましょう。
次に読む記事
関連する記事
- Pythonで毎朝のCSV集計を自動化する(pandas+定期実行):定期実行したスクリプトのログを、あとで確かめたい方に
- Cursorにエラーを直してもらう5ステップ|エラーの渡し方・頼み方・直った後の確認まで:ログに出たエラーを、AI に渡して直してもらいたい方に
- n8nとは?最初のワークフローを1本つくる:ログを見守りながら動かしたい自動化ツールを知りたい方に