ウェブサイト検索

LinuxにおけるHeadおよびTailコマンドの説明と例


このガイドでは、Linuxにおけるheadコマンドとtailコマンドの典型的な使い方を例を通じてテキストの一部分を取得する方法を示しています。

Linuxで入力ファイルからテキストの一部を取得することは一般的です。しかし、時にはファイルのごく一部の行だけを表示したいことがあります。Linuxは、私たちが興味のある行だけを印刷するために、headとtailコマンドを提供しています。

Linux の head および tail コマンドは非常に似ています。これらはデフォルトで、すべての Linux ディストリビューションにインストールされています。まず、それらが何であり、何に使われるかを理解しましょう。

要するに、その名前が示すように、head コマンドはファイルの先頭から行を表示し、tail コマンドはファイルの末尾から行を表示します。最後に、両方のコマンドは結果を標準出力に書き込みます。

さあ、例を通してそれらの使い方を学びましょう。

Linuxのheadコマンド

headコマンドの構文は非常に簡単です。

head [OPTIONS] FILES

デフォルトでは、オプションなしで、headコマンドはファイルの最初の10行を表示します。そのように。

head /etc/passwd
root:x:0:0::/root:/bin/bash
bin:x:1:1::/:/usr/bin/nologin
daemon:x:2:2::/:/usr/bin/nologin
mail:x:8:12::/var/spool/mail:/usr/bin/nologin
ftp:x:14:11::/srv/ftp:/usr/bin/nologin
http:x:33:33::/srv/http:/usr/bin/nologin
nobody:x:65534:65534:Nobody:/:/usr/bin/nologin
dbus:x:81:81:System Message Bus:/:/usr/bin/nologin
systemd-journal-remote:x:982:982:systemd Journal Remote:/:/usr/bin/nologin
systemd-network:x:981:981:systemd Network Management:/:/usr/bin/nologin

もちろん、コマンドを実行する際にカスタマイズされた出力を得るために定義できるオプションがあります。

head コマンドを使用して特定の行数を出力する

-n

例えば、次のコマンドは/etc/passwdファイルの最初の3行を表示します。

head -n 3 /etc/passwd
root:x:0:0::/root:/bin/bash
bin:x:1:1::/:/usr/bin/nologin
daemon:x:2:2::/:/usr/bin/nologin

head コマンドを使用して特定のバイト数を出力する

-c

例えば、次のコマンドは/etc/passwdファイルの最初の8バイトを表示します。

head -c 8 /etc/passwd
root:x:0

headコマンドを使用して複数のファイルを出力する

もちろん、headコマンドは複数のファイルも扱えます。例えば、次のコマンドは/etc/passwdと/etc/groupファイルの最初の3行を表示します。

head -n 3 /etc/passwd /etc/group
==> /etc/passwd <==
root:x:0:0::/root:/bin/bash
bin:x:1:1::/:/usr/bin/nologin
daemon:x:2:2::/:/usr/bin/nologin

==> /etc/group <==
root:x:0:brltty,root
sys:x:3:bin
mem:x:8:
-q
head -q -n 3 /etc/passwd /etc/group
root:x:0:0::/root:/bin/bash
bin:x:1:1::/:/usr/bin/nologin
daemon:x:2:2::/:/usr/bin/nologin
root:x:0:brltty,root
sys:x:3:bin
mem:x:8:

パイプを使ったheadコマンドの使い方

headコマンドは、他のコマンドにパイプで接続することもできます。したがって、次の例では、lsコマンドの出力がheadにパイプされ、/etcディレクトリ内の最も最近変更された5つのファイルまたはフォルダーが表示されます。

ls -t /etc | head -n 5
ld.so.cache
resolv.conf
systemd
libreoffice
profile.d

今、あなたはLinuxのheadコマンドの使い方をよく理解しているはずです。では、tailコマンドを見てみましょう。

Linuxのtailコマンド

Linuxのtailコマンドはheadコマンドと同じです。しかし、headコマンドとは異なり、tailコマンドは特定のファイルの最後の数行(デフォルトでは10行)を出力します。

tail コマンドの基本構文は次のとおりです:

tail [OPTIONS] FILES

/etc/locale.genファイルの最後の10行を表示するには、次のコマンドを使用します。

tail /etc/locale.gen
#zh_HK.UTF-8 UTF-8
#zh_HK BIG5-HKSCS
#zh_SG.UTF-8 UTF-8
#zh_SG.GBK GBK
#zh_SG GB2312
#zh_TW.EUC-TW EUC-TW
#zh_TW.UTF-8 UTF-8
#zh_TW BIG5
#zu_ZA.UTF-8 UTF-8
#zu_ZA ISO-8859-1

tail コマンドを使用して特定の行数を出力する

-n
tail -n 3 /etc/locale.gen
#zh_TW BIG5
#zu_ZA.UTF-8 UTF-8
#zu_ZA ISO-8859-1

パイプを使ったtailコマンドの使い方

以前、私たちは出力を head から ls にパイプしました。同様に、他のコマンドからの出力を tail にパイプすることもできます。

例えば、/etc ディレクトリ内で最も古い変更日時を持つ5つのファイルまたはフォルダを特定し、その出力を tail コマンドにパイプするには、次のように入力します:

ls -t /etc/ | tail -n 5
wpa_supplicant
libpaper.d
papersize
mdadm.conf
gssapi_mech.conf

tailコマンドを使用してファイルの変更を監視する

コマンドのtailには、もう一つ強力で広く使われている機能があります。それについての詳細は以下の通りです。

時々、チェックしたい入力ファイルが変更されることがあります。例えば、実行中のアプリケーションがその出力をログファイルに追加することがあります。

-f

ですので、これがおそらく最も実用的で一般的に使われる選択肢かもしれません tail コマンドに対して。

例えば、次のようにNginxのログファイルの最後に追加された新しい行を見ることができます。

tail -f /var/log/nginx/access.log
172.16.1.122 - - [08/Apr/2021:08:15:32 +0000] "POST /wp-admin/admin-ajax.php HTTP/1.1" 200 109 "https://linuxwizard.com/wp-admin/post.php?post=18254&action=edit" "Mozilla/5.0 (X11; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0" 
172.16.1.122 - - [08/Apr/2021:08:19:27 +0000] "GET /feed/ HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1" 
172.16.1.122 - - [08/Apr/2021:08:19:49 +0000] "HEAD /feed/ HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" 

新しいログエントリがログファイルに追加されるたびに、tailはターミナルウィンドウに表示を更新します。

Linuxでheadとtailコマンドを一緒に使用する方法

tail と head コマンドがファイルの異なる部分を表示するように、これら二つを組み合わせることで、ファイル内容の高度なフィルタリングを表示できます。

例えば、任意のファイルの中央から内容を読みたい場合は、両方のコマンドを一緒に使用する必要があります。

5行目から10行目を/etc/passwdファイルから取得したいとしましょう。最初に、headコマンドが最初の10行を取得し、その後tailコマンドがheadコマンドの出力から最後の5行を取得します。

head -n 10 /etc/passwd | tail -n 5
http:x:33:33::/srv/http:/usr/bin/nologin
nobody:x:65534:65534:Nobody:/:/usr/bin/nologin
dbus:x:81:81:System Message Bus:/:/usr/bin/nologin
systemd-journal-remote:x:982:982:systemd Journal Remote:/:/usr/bin/nologin
systemd-network:x:981:981:systemd Network Management:/:/usr/bin/nologin

結論

この記事では、事例を通して両方のコマンドの典型的な使い方を学びました。ご覧の通り、tailコマンドとheadコマンドは、ファイルの内容を画面に印刷する際に便利です。

実際、それらは非常に柔軟なコマンドで、あなたのファイル管理を大幅に改善します。だから、ぜひ試してみてください。

詳細が必要ですか?headおよびtailコマンドのマニュアルページを確認してください。

関連記事: