Linuxの入力ファイルからテキストの一部を取得することは、一般的な操作です。ただし、ファイルの数行だけを表示したい場合もあります。 Linuxには、関心のある行のみを印刷するためのヘッドコマンドとテールコマンドが用意されています。
目次
- Linuxのヘッドコマンド
- headコマンドを使用して特定の行数を出力する
- headコマンドを使用して特定のバイト数を出力する
- headコマンドを使用して複数のファイルを出力する
- パイプでヘッドコマンドを使用する方法
- Linuxのテールコマンド
- tailコマンドを使用して特定の行数を出力する
- パイプでテールコマンドを使用する方法
- tailコマンドを使用してファイルの変更を監視する
- Linuxでヘッドコマンドとテールコマンドを一緒に使用する方法
- 結論
Linuxのhead
およびtail
コマンドは非常に似ています。これらはデフォルトで、すべてのLinuxディストリビューションにインストールされています。まず、それらが何であり、何に使用されるのかを理解しましょう。
つまり、名前が示すように、 head
コマンドは、ファイルの先頭から行を出力し、 tail
コマンドは、ファイルの終わりから行を出力します。どちらのコマンドも結果を標準出力に書き込みます。
それでは、例を通してそれらの使用方法を学びましょう。
Linuxのヘッドコマンド
head
の構文 コマンドは非常に簡単です:
head [OPTIONS] FILES
デフォルトでは、オプションなし 、ヘッドコード> コマンドは、ファイルの最初の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
もちろん、カスタマイズされた出力を取得するためにコマンドを実行するときに定義できるオプションがあります。
デフォルトの10行とは異なる行数を取得する場合は、 -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
を渡すだけです コマンドのオプション。改行は1文字としてカウントされるため、 head
改行を出力し、バイトとしてカウントします。
たとえば、次のコマンドは、 / etc / passwd
の最初の8バイトを表示します ファイル。
head -c 8 /etc/passwd
root:x:0
もちろん、 head
コマンドは複数のファイルを処理することもできます。たとえば、次のコマンドは、 / etc / passwd
の最初の3行を表示します。 および/etc / group
ファイル。
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
コマンドは他のコマンドにパイプすることができます。次の例では、 ls
の出力 コマンドはhead
にパイプされます / etc
内の最近変更された5つのファイルまたはフォルダーを表示します ディレクトリ。
ls -t /etc | head -n 5
ld.so.cache
resolv.conf
systemd
libreoffice
profile.d
これで、Linuxの head
の使用方法を十分に理解できたはずです。 指図。それでは、 tail
を見てみましょう。 コマンド。
Linuxのテールコマンド
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
head
と同様に コマンドの場合、 -n
を使用して最後の数行を印刷することもできます 以下に示すオプション。
tail -n 3 /etc/locale.gen
#zh_TW BIG5
#zu_ZA.UTF-8 UTF-8
#zu_ZA ISO-8859-1
以前、 head
からの出力をパイプ処理しました ls
に 。他のコマンドからの出力をtail
にパイプすることもできます 。
たとえば、 / etc
内の5つのファイルまたはフォルダを識別するには 変更時刻が最も古いディレクトリを作成し、出力を tail
にパイプします :
ls -t /etc/ | tail -n 5
wpa_supplicant
libpaper.d
papersize
mdadm.conf
gssapi_mech.conf
tail
にはもう1つの強力な機能があります 指図。チェックしたい入力ファイルが変更されている場合があります。たとえば、実行中のアプリケーションがその出力をログファイルに追加する場合があります。 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でヘッドコマンドとテールコマンドを一緒に使用する方法
tail
として およびhead
コマンドはファイルのさまざまな部分を印刷します。これら2つを組み合わせて、ファイルコンテンツの高度なフィルタリングを印刷できます。たとえば、ファイルの途中からコンテンツを読みたい場合は、両方のコマンドを一緒に使用する必要があります。
/ etc / passwd
の5行目から10行目まで取得したいとします。 ファイル。最初は、 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
コマンドのマニュアルページ。