7.1 データの閲覧
Linux Essentials Online Text | 2021/07/26

ファイルの中身を表示(cat・less・more)

次はファイルの内容を確認するコマンドを利用してみます。ファイルの中身は「cat(Concatenate And prinT)」コマンドを利用することで実現できます。

書式:

cat [オプション] ファイル名

主オプション:

-n行数を表示します。空白行も行としてカウントします。
-b行数を表示します。空白行を除いてカウントします。

ファイル名には、複数指定することも可能です。この場合は、スペースで区切って羅列します。複数のファイルを指定した場合も、指定した順番に一括で表示されます。

<実習: catコマンドの実行と行番号の表示>

.bashrcファイルの中身を見てみます。

$ cat .bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

行番号をつけてみます。

$ cat -n .bashrc
    1  # .bashrc
    2
    3  # Source global definitions
    4  if [ -f /etc/bashrc ]; then
    5          . /etc/bashrc
    6  fi
    7
    8  # Uncomment the following line if you don't like systemctl's auto-paging feature:
    9  # export SYSTEMD_PAGER=
   10
   11  # User specific aliases and functions

cat コマンドを使ってファイルの内容を表示するとき、行数がたくさんあると表示が流れてしまいます。通常、画面は25行程度ですので、それ以上の行は流れてしまい確認できません。ターミナルなら画面をスクロールすることである程度の行は確認できますが、コンソールの場合は確認できなくなります。

数十行に及ぶ内容が書かれているファイルと予め分かっている場合は、catコマンドで表示する事を避け、他のコマンドを使います。たくさんの行があっても画面制御を行ってスクロールを途中で止めてくれる機能のことをページングといい、それを実現するコマンドをページャといいます。ページャには2種類あり、moreコマンドlessコマンドです。

入力方法はcatコマンドと同じです。

書式:

less ファイル名
more ファイル名

ページャでは、コマンドを入力して操作します。コマンドは次の通りです。

コマンド動作内容
[j] or [↓]1行下に移動します。
[k] or [↑]1行上に移動します。
[スペース] or [PageUp]1画面下に移動します。
[b] or [PageDown]1画面上に移動します。
/単語単語を検索します。nキーで検索結果をジャンプします。
[q]ページャコマンドを終了(quit)します。

<実習: ページャを使ったファイル閲覧>

ページャを使って、長いファイルを確認してみます。

$ more /var/log/dmesg
$ less /var/log/dmesg

moreとless

もともとページャコマンドとしてmoreが開発されましたが、最初はスクロールを止める機能しかありませんでした。もちろん[b]の「1ページ戻る」という機能もありませんでした。しかし、これでは不便なので様々な機能を加えたページャが開発されました。これがlessです。lessはmoreの機能拡張版ともいえます。

ファイルの一部を閲覧(head・tail)

ファイルの先頭部分を表示する(head)

書式:

head [オプション] ファイル名
head -行数 ファイル名
コマンド動作内容
[j] or [↓]1行下に移動します。
[k] or [↑]1行上に移動します。
[スペース] or [PageUp]1画面下に移動します。
[b] or [PageDown]1画面上に移動します。
/単語単語を検索します。nキーで検索結果をジャンプします。
[q]ページャコマンドを終了(quit)します。

<実習: headコマンドの実行>

$ head FILE
$ head -n 10 FILE
$ head -10 FILE

1行目のように引数として指定したファイルの先頭部分を表示します。デフォルトは10行です。
2行目のように「-n」オプションを用いると指定した行数分を表示することができます。
3行目のように、オプションを使わずに直接行数を入力しても行数を指定することができます。

ファイルの末尾部分を表示する(tail)

書式:

tail [オプション] ファイル名
tail -行数 ファイル名
-n 行数出力する行数を指定します。デフォルトは10行。
-c 文字数出力する文字数を指定する。

tailはファイルの末尾から指定した行数表示します。使用方法はheadコマンドと同じです。
ただし、tail独自のオプションとして「-f」があります。

$ ls -l /usr/bin > ls-usr-bin
$ tail ls-user-bin
-rwxr-xr-x.   1 root root     215840 11月  6  2016 zip
-rwxr-xr-x.   1 root root     100456 11月  6  2016 zipcloak
-rwxr-xr-x.   1 root root       2953 10月 11  2008 zipgrep
-rwxr-xr-x.   2 root root     185512  4月  1 13:49 zipinfo
-rwxr-xr-x.   1 root root      95984 11月  6  2016 zipnote
-rwxr-xr-x.   1 root root     100096 11月  6  2016 zipsplit
-rwxr-xr-x.   1 root root       2041  4月 11  2018 zless
-rwxr-xr-x.   1 root root       2859  4月 11  2018 zmore
-rwxr-xr-x.   1 root root       5343  4月 11  2018 znew
lrwxrwxrwx.   root root          6   5月 27 15:18 zsoelim -> soelim
$ tail –n 3 ls-usr-bin
-rwxr-xr-x.   1 root root       2859  4月 11  2018 zmore
-rwxr-xr-x.   1 root root       5343  4月 11  2018 znew
lrwxrwxrwx.   root root          6   5月 27 15:18 zsoelim -> soelim

特別なオプション -f

Linuxシステムのファイルによってはその末尾部分が随時更新されるケースがあります。例えばログファイルです。
ログファイルはサービスの動作報告を出力するファイルで、システム変更やサービスが動作するとその内容をログに出力します。
tailコマンドは通常、コマンド実行時のファイルの末尾部分を表示するだけですが、「-f」というオプションつけて実行すると指定したファイルの末尾が表示された状態で保持されます。この時、対象ファイルの末尾にデータが追加されると、画面上に追加されたデータが表示されます。
リアルタイムでモニタしている状態になります。

それでは実際に、「-f」オプションの動きを見てみましょう。

$ tail -f ls-usr-bin
-rwxr-xr-x 1 root root      75308  1月  9  2007 zip
:
-rwxr-xr-x 1 root root       1933  5月 29  2008 zmore
-rwxr-xr-x 1 root root       3420  5月 29  2008 znew
lrwxrwxrwx 1 root root         6  1月 13  2000 zsoelim -> soelim

tailコマンドのみで表示させた時と同様に終わり部分が表示されますが、シェルに制御が戻りません。
ひとまずこの画面は置いておき、別のターミナルを起動、ログインした後に以下を入力してみて下さい。

$ echo 'Hello' >> ls-usr-bin

ls-usr-bin ファイルに対し、ファイルの末尾に「Hello」を入力するコマンドです。
上記実行後、最初から開いていたターミナルを確認してみます。

$ tail -f ls-usr-bin
-rwxr-xr-x 1 root root      75308  1月  9  2007 zip
:
-rwxr-xr-x 1 root root       1933  5月 29  2008 zmore
-rwxr-xr-x 1 root root       3420  5月 29  2008 znew
lrwxrwxrwx 1 root root         6  1月 13  2000 zsoelim -> soelim
Hello

最初に実行していたターミナルの末尾に、先ほど入力した’Hello’が出力されます。つまり、echoコマンドによってls-usr-bin ファイルにデータが追加されると同時に、ls-usr-bin の終わり部分が更新されたことがリアルタイムで確認できた事になります。

なお、「-f」で実行したtailコマンドは[Ctrl]-[c]で処理を中断すると、シェルに戻ることができます。

PAGE TOP