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 コマンドのマニュアルページ。