ファイルの中身を見る
前提:1-3が完了し、ホームディレクトリにいる状態から始めます。~/practiceは空のディレクトリに戻っています。ここまでのページではファイルを「作る・動かす・消す」操作をしてきましたが、まだ中身をちゃんと読む方法を習っていません。このページでは、Ubuntuに最初から入っている/etc以下の設定ファイルを~/practiceにコピーしてお借りし、cat・less・head・tail・wc・fileで中身と量を確認する練習をします。
このページではSET 1〜3、合計30行のコマンドを上から順に叩きます。手打ち推奨(コピーは確認用)で、ページの最後にはコピーしたファイルを片付けます。
SET 1 ― catとlessで中身を見る
- $cd ~/practice
- $cp /etc/os-release .
- $ls
- os-release
- $cat os-release
- PRETTY_NAME="Ubuntu 24.04 LTS"
- VERSION="24.04 LTS (Noble Numbat)"
- $cp /etc/passwd .
- $cat passwd
- $less passwd
- (スクロール中の画面。q を押すと元のターミナルに戻る)
- $cp /etc/hostname .
- $cat hostname
- $ls -l
- -rw-r--r-- 1 ubuntu ubuntu 14 Jul 3 10:30 hostname -rw-r--r-- 1 ubuntu ubuntu 427 Jul 3 10:28 os-release -rw-r--r-- 1 ubuntu ubuntu 2007 Jul 3 10:29 passwd
1行目で~/practiceに入り、2行目のcp /etc/os-release .で、このサーバーのOS情報が書かれた/etc/os-releaseを、今いる場所(.=カレントディレクトリ)へコピーします。/etcは本来Linuxの設定ファイルの倉庫で普段は直接いじりませんが、コピーを取って読むだけなら安全な練習になります。
4行目のcat(concatenateの略)は、ファイルの中身を画面にそのまま流し込んで表示するコマンドです。os-releaseのように短いファイルなら、catだけで全部が一度に表示され、出力例のようにOS名やバージョンが確認できます。
5行目で今度は行数の多い/etc/passwd(このサーバーに登録されているユーザーの一覧。第2章で詳しく扱います)をコピーし、6行目でcatしてみると、画面に一気に流れて先頭が見えなくなってしまいます。こういう長いファイルには7行目のlessが向いています。lessはファイルを1画面ずつ表示してくれるページャ※1で、下スクロールは矢印キー↓やスペース、終了はqキーです。lessは対話型のコマンドなので、出力例のようにqを押すまで画面から抜けられない点を覚えておいてください。
8〜9行目では/etc/hostname(このサーバー自身の名前が書かれた1行だけのファイル)をコピーしてcatで確認しています。1行だけの短いファイルはcat、長いファイルはlessと使い分けると効率的です。10行目のls -lで3つのファイルを見比べると、行数の多かったpasswdが2007バイトと一番大きく、1行だけのhostnameが一番小さいことがわかります。ファイルサイズを見ておくと、次のcatで開いて大丈夫か、lessを使うべきかの判断材料になります。
lessを実行した画面から抜けられなくなったら、慌てずqキーを押してください。catと違いlessは「見終わるまで居座る」コマンドです。

あたしも最初lessで画面が固まったと思って焦ってCtrl+Cを連打しちゃったことあるよ。全然固まってなくて、ただqを待ってるだけなんだよね。「lessで開いたらqで閉じる」ってセットで覚えちゃうのが一番早い!
SET 2 ― headとtailで一部だけ見る
- $head passwd
- $tail passwd
- ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
- $head -n 3 passwd
- root:x:0:0:root:/root:/bin/bash
- daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
- bin:x:2:2:bin:/bin:/usr/sbin/nologin
- $tail -n 3 passwd
- $tail -n 1 passwd
- $head -n 1 os-release
- PRETTY_NAME="Ubuntu 24.04 LTS"
- $head -n 20 os-release
- (os-release は全12行なので、エラーにはならず全行がそのまま表示される)
- $tail -n 20 hostname
- web-server-01
- $head -1 passwd
- root:x:0:0:root:/root:/bin/bash
- $tail -1 os-release
- UBUNTU_CODENAME=noble
1行目のhead(頭の意味)は、ファイルの先頭10行だけを表示するコマンドです。2行目のtail(尻尾の意味)はその逆で、末尾10行だけを表示します。出力例のように、passwdの末尾付近には自分のubuntuユーザーの行が見つかります。長いファイルの「最初だけ」「最後だけ」を素早く確認したいときに便利です。
3行目のhead -n 3のように、-nオプションに数字を渡すと、表示する行数を10行から好きな数に変更できます。出力例のように、passwdの先頭3行だけが表示されます。同様に4行目のtail -n 3は末尾3行、5行目のtail -n 1は最後の1行だけを表示します。
6行目のhead -n 1 os-releaseのように、1行だけ抜き出したいときにもhead -n 1はよく使われます。出力例のとおり、ファイルの一番上の行だけがピンポイントで表示されました。
7行目のhead -n 20 os-releaseは、実際のファイルの行数(12行)より多い行数を指定した例です。エラーにはならず、単に「ある分だけ全部」表示して終わります。8行目のtail -n 20 hostnameも同じで、1行しかないhostnameに対して末尾20行を求めても、出力例のようにその1行が表示されるだけです。指定した行数がファイルの行数を超えても壊れたりエラーになったりしない、という安心して使える性質を覚えておいてください。
9行目のhead -1 passwdのように、-nを省略して-数字と直接書く短縮形もよく使われます。head -1はhead -n 1と全く同じ意味です。10行目のtail -1 os-releaseも同様にtail -n 1の短縮形で、ファイルの最後の1行(UBUNTU_CODENAMEの行)が表示されます。タイプ数を減らせるので、慣れてきたら短縮形も使ってみてください。なおtailには-fというリアルタイムでログの追記を監視し続けるオプションもありますが、こちらは第5章「ログを読む」で実際のログファイルを使って扱います。
headは頭、tailは尻尾。動物の体のイメージで覚えると混同しません。行数を変えたいときはどちらも-n 数字を付け足すだけです。
SET 3 ― wcとfileで量と種類を調べる
- $wc passwd
- 37 60 2007 passwd
- $wc -l passwd
- 37 passwd
- $wc -l os-release hostname
- 12 os-release 1 hostname 13 total
- $file passwd
- passwd: ASCII text
- $file os-release
- os-release: ASCII text
- $file hostname
- hostname: ASCII text, with no line terminators
- $file .
- .: directory
- $rm os-release passwd hostname
- $ls
- $cd ~
1行目のwc(word countの略)は、ファイルの行数・単語数・バイト数をまとめて数えるコマンドです。出力例の37 60 2007 passwdは左から順に「行数・単語数・バイト数・ファイル名」を表しています。2行目のwc -l(lineの意味)を付けると、行数だけに絞って表示してくれます。レポートの文字数を数える感覚に近い使い方です。
3行目のwc -l os-release hostnameのように、複数のファイルを一度に指定すると、それぞれの行数と合計が並んで表示されます。出力例のとおり、os-releaseが12行、hostnameが1行、合計13行と一覧できます。4行目のfileコマンドは、ファイルの中身を調べて「これはどんな種類のファイルか」を判定してくれます。出力例のようにpasswdはASCII text(人間が読めるテキストファイル)と判定されます。
5行目のfile os-releaseも同じくASCII textと判定されますが、6行目のfile hostnameではASCII text, with no line terminators(改行で終わっていないテキスト)という少し違う結果が返ってきます。hostnameは中身が1行だけで、末尾に改行が付いていないためです。同じ「テキストファイル」でもfileは中身の細かい特徴まで見て判定してくれることがわかります。7行目のfile .のように、ディレクトリを指定するとdirectoryという種類が返ってきます。画像や実行ファイルなど、拡張子だけでは種類がわかりにくいファイルに出会ったときに重宝します。
8行目のrm os-release passwd hostnameで、このページのためにコピーしてきた3つのファイルをまとめて削除します。rmはmkdirやtouchと同じく、スペース区切りで複数のファイルを一度に指定できます。9行目のlsで~/practiceが空に戻ったことを確認し、10行目のcd ~でホームディレクトリへ戻ってこのページを終えます。

fileコマンド、地味だけど結構助かるよ! サーバー作業してると拡張子のない謎ファイルに出くわすことがあって、そういうときfile ファイル名を打つだけで「これテキストです」「これ画像です」って教えてくれるの。困ったら聞く、が一番の近道だね。
まとめ
1-4では、既存の設定ファイルをコピーしながら、中身をまるごと見る・スクロールしながら見る・一部だけ見る・量と種類を調べるという、ファイル閲覧の基本一式を体験しました。ページの最後にコピーしたファイルは片付け、~/practiceは空の状態に戻しています。このページで叩けるようになったコマンドを一覧にまとめます。
| コマンド | 何をするか | 覚え方 |
|---|---|---|
cat <ファイル> | ファイルの中身を一気に表示する | concatenate(つなげて流し込む) |
less <ファイル> | ファイルを1画面ずつ表示する(qで終了) | less is more(少しずつ見る) |
head <ファイル> | 先頭10行を表示する | 頭(あたま) |
tail <ファイル> | 末尾10行を表示する | 尻尾(しっぽ) |
head -n N / tail -n N | 表示する行数をN行に変える | number(数を指定) |
wc -l <ファイル> | ファイルの行数を数える | word count の line 版 |
file <ファイル> | ファイルの種類を判定する | これは何ファイル?と聞く |
次のページ「1-5. 困ったときの調べ方」では、コマンドの意味や使い方がわからなくなったときに、manや--helpを使ってコマンド自身に助けを求める方法を学びます。
- ページャ … 長いテキストを1画面分ずつ区切って表示してくれるプログラムの総称。
lessはLinuxで最も標準的なページャで、スクロールしながら閲覧できqで終了する。↩