第1章 1-4 / ファイル操作の基本

ファイルの中身を見る

このページで叩くコマンドと到達点

前提:1-3が完了し、ホームディレクトリにいる状態から始めます。~/practiceは空のディレクトリに戻っています。ここまでのページではファイルを「作る・動かす・消す」操作をしてきましたが、まだ中身をちゃんと読む方法を習っていません。このページでは、Ubuntuに最初から入っている/etc以下の設定ファイルを~/practiceにコピーしてお借りし、catlessheadtailwcfileで中身と量を確認する練習をします。

このページではSET 1〜3、合計30行のコマンドを上から順に叩きます。手打ち推奨(コピーは確認用)で、ページの最後にはコピーしたファイルを片付けます。

SET 1 ― catとlessで中身を見る

ubuntu@lightsail: ~
  1. $cd ~/practice
  2. $cp /etc/os-release .
  3. $ls
  4. os-release
  5. $cat os-release
  6. PRETTY_NAME="Ubuntu 24.04 LTS"
  7. VERSION="24.04 LTS (Noble Numbat)"
  8. $cp /etc/passwd .
  9. $cat passwd
  10. $less passwd
  11. (スクロール中の画面。q を押すと元のターミナルに戻る)
  12. $cp /etc/hostname .
  13. $cat hostname
  14. $ls -l
  15. -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
解説 ― SET 1 で何をしたか

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を押すまで画面から抜けられない点を覚えておいてください。

89行目では/etc/hostname(このサーバー自身の名前が書かれた1行だけのファイル)をコピーしてcatで確認しています。1行だけの短いファイルはcat、長いファイルはlessと使い分けると効率的です。10行目のls -lで3つのファイルを見比べると、行数の多かったpasswdが2007バイトと一番大きく、1行だけのhostnameが一番小さいことがわかります。ファイルサイズを見ておくと、次のcatで開いて大丈夫か、lessを使うべきかの判断材料になります。

POINT

lessを実行した画面から抜けられなくなったら、慌てずqキーを押してください。catと違いlessは「見終わるまで居座る」コマンドです。

ゆみちゃん
ゆみ

あたしも最初lessで画面が固まったと思って焦ってCtrl+Cを連打しちゃったことあるよ。全然固まってなくて、ただqを待ってるだけなんだよね。「lessで開いたらqで閉じる」ってセットで覚えちゃうのが一番早い!

SET 2 ― headとtailで一部だけ見る

ubuntu@lightsail: ~/practice
  1. $head passwd
  2. $tail passwd
  3. ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
  4. $head -n 3 passwd
  5. root:x:0:0:root:/root:/bin/bash
  6. daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
  7. bin:x:2:2:bin:/bin:/usr/sbin/nologin
  8. $tail -n 3 passwd
  9. $tail -n 1 passwd
  10. $head -n 1 os-release
  11. PRETTY_NAME="Ubuntu 24.04 LTS"
  12. $head -n 20 os-release
  13. (os-release は全12行なので、エラーにはならず全行がそのまま表示される)
  14. $tail -n 20 hostname
  15. web-server-01
  16. $head -1 passwd
  17. root:x:0:0:root:/root:/bin/bash
  18. $tail -1 os-release
  19. UBUNTU_CODENAME=noble
解説 ― SET 2 で何をしたか

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 -1head -n 1と全く同じ意味です。10行目のtail -1 os-releaseも同様にtail -n 1の短縮形で、ファイルの最後の1行(UBUNTU_CODENAMEの行)が表示されます。タイプ数を減らせるので、慣れてきたら短縮形も使ってみてください。なおtailには-fというリアルタイムでログの追記を監視し続けるオプションもありますが、こちらは第5章「ログを読む」で実際のログファイルを使って扱います。

POINT

headは頭、tailは尻尾。動物の体のイメージで覚えると混同しません。行数を変えたいときはどちらも-n 数字を付け足すだけです。

SET 3 ― wcとfileで量と種類を調べる

ubuntu@lightsail: ~/practice
  1. $wc passwd
  2. 37 60 2007 passwd
  3. $wc -l passwd
  4. 37 passwd
  5. $wc -l os-release hostname
  6. 12 os-release 1 hostname 13 total
  7. $file passwd
  8. passwd: ASCII text
  9. $file os-release
  10. os-release: ASCII text
  11. $file hostname
  12. hostname: ASCII text, with no line terminators
  13. $file .
  14. .: directory
  15. $rm os-release passwd hostname
  16. $ls
  17. $cd ~
解説 ― SET 3 で何をしたか

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コマンドは、ファイルの中身を調べて「これはどんな種類のファイルか」を判定してくれます。出力例のようにpasswdASCII 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つのファイルをまとめて削除します。rmmkdirtouchと同じく、スペース区切りで複数のファイルを一度に指定できます。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. ページャ … 長いテキストを1画面分ずつ区切って表示してくれるプログラムの総称。lessはLinuxで最も標準的なページャで、スクロールしながら閲覧できqで終了する。