GNU/Linux >> Znalost Linux >  >> Linux

Příklady příkazů Linux tail

Linuxový příkaz tail vypíše poslední část souborů. Existuje možnost ponechat soubor otevřený pro další záznamy. Díky tomu je velmi užitečné pracovat se soubory protokolu, kde můžeme kontrolovat protokoly v reálném čase, když se událost děje.

1. Syntaxe příkazu Linux tail

Syntaxe příkazu tail je:


$ tail [OPTION]... [FILE]...

Všechny možnosti a názvy souborů jsou volitelné.

2. Co udělá tail, pokud nebude poskytnut žádný soubor?

Pokud nezadáte název souboru na konci nebo jej neuvedete jako pomlčku (-), přečte se standardní vstup.

3. Čtení posledních 10 řádků souboru

Pokud neurčíme žádnou možnost, konec přečte posledních 10 řádků souboru.


# tail error.log
2019-10-29 11:31:09.887840 [INFO] [16169] [APVH_recipes_Sulsphp73:]: locked pid file [/tmp/lshttpd/APVH_recipes_Suphp73.sock.pid].
2019-10-29 11:31:09.887968 [INFO] [16169] [APVH_recipes_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_recipes_Suphp73.sock
2019-10-29 11:31:09.896280 [INFO] [16169] [APVH_recipes_Sulsphp73:] add child process pid: 27035, procinfo: 0x2c5e2b0
2019-10-29 11:31:09.896396 [INFO] [16169] [APVH_recipes_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_recipes_Suphp73.sock.pid].
2019-10-29 11:31:17.182067 [INFO] [16169] [APVH_golangd_Sulsphp73:]: locked pid file [/tmp/lshttpd/APVH_golangd_Suphp73.sock.pid].
2019-10-29 11:31:17.182116 [INFO] [16169] [APVH_golangd_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_golangd_Suphp73.sock
2019-10-29 11:31:17.182991 [INFO] [16169] [APVH_golangd_Sulsphp73:] add child process pid: 27067, procinfo: 0x447cff0
2019-10-29 11:31:17.183048 [INFO] [16169] [APVH_golangd_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_golangd_Suphp73.sock.pid].
2019-10-29 11:31:20.641690 [INFO] [16169] [149.56.101.239:45604] [ACL] Access to context [/] is denied!
2019-10-29 11:31:27.245789 [INFO] [16169] [198.199.83.232:46876] [ACL] Access to context [/] is denied!
# 

4. Možnosti příkazu Linux tail

Krátká možnost Dlouhá možnost Popis
-c –bytes=K vytiskne posledních K bajtů souboru. Můžeme použít "-c +K" pro výstup bajtů začínajících Kth každého souboru.
-f –sledovat[={name|descriptor}] vysílá připojená data, jak se soubor zvětšuje. Pokud zadáme -F, je to stejné jako „–follow=name –retry“
-n –lines=K vypíše posledních K řádků místo posledních 10; nebo použijte ‚-n +K‘ pro výstup začínající K-tým řádkem.
-q –tichý, –tichý nikdy nevypisují záhlaví s názvy souborů
–zkusit znovu pokoušejte se dále otevřít soubor, pokud je nepřístupný
-s –interval-spánku=N používá se s -f k uspání po dobu přibližně N sekund (výchozí 1.0) mezi iteracemi.
-v –podrobné vždy vypisují hlavičky s názvy souborů
–verze vytiskne informace o verzi a ukončí se.
  • Pokud je první znak K (počet bajtů nebo řádků) '+', tiskněte počínaje K-tou položkou od začátku každého souboru, jinak vytiskněte posledních K položek v souboru.
  • K může mít příponu multiplikátoru:b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, P atd. , E, Z, Y.
  • S parametrem –follow (-f) se koncovka ve výchozím nastavení řídí podle deskriptoru souboru, což znamená, že i když je soubor s chvostem přejmenován, koncovka bude i nadále sledovat svůj konec. Toto výchozí chování není žádoucí, pokud opravdu chcete sledovat skutečný název souboru, nikoli deskriptor souboru (např. rotace protokolu).
  • V takovém případě použijte –follow=name. To způsobí, že tail sleduje pojmenovaný soubor způsobem, který umožňuje přejmenování, odstranění a vytvoření.

5. Příklady příkazů Linux tail

Podívejme se na některé příklady použití příkazů ocasu.

5.1) Omezte počet řádků v koncovém výstupu

Můžeme použít volbu -n nebo –lines k omezení počtu řádků ve výstupu na konci.


# tail -n 5 error.log

# tail --lines=5 error.log

Pokud použijeme + prefix s hodnotou volby, výstup bude spuštěn od tohoto čísla řádku v souboru.


# wc -l error.log
27360 error.log

# tail -n +27358 error.log
2019-10-29 13:09:35.142604 [INFO] [16169] [APVH_javastr_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_javastr_Suphp73.sock
2019-10-29 13:09:35.144320 [INFO] [16169] [APVH_javastr_Sulsphp73:] add child process pid: 18132, procinfo: 0x367c520
2019-10-29 13:09:35.144389 [INFO] [16169] [APVH_javastr_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].

# tail --lines=+27358 error.log
2019-10-29 13:09:35.142604 [INFO] [16169] [APVH_javastr_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_javastr_Suphp73.sock
2019-10-29 13:09:35.144320 [INFO] [16169] [APVH_javastr_Sulsphp73:] add child process pid: 18132, procinfo: 0x367c520
2019-10-29 13:09:35.144389 [INFO] [16169] [APVH_javastr_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].
#

5.2) Omezte počet bajtů v koncovém výstupu

Můžeme použít volbu -c nebo –bytes pro výstup zadaných bajtů z konce souboru.


# tail -c 100 error.log
 [16169] [APVH_android_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_android_Suphp73.sock.pid].
# tail --bytes=100 error.log
 [16169] [APVH_android_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_android_Suphp73.sock.pid].
# 

Pokud použijeme + s hodnotou volby, budou data souboru z tohoto bajtu odeslána do konzole.


# ls -ltr error.log
-rw-r--r--. 1 nobody nobody 3475359 Oct 29 13:15 error.log
# tail -c +3475350 error.log
ock.pid].
#

5.3) Příkaz Linux tail s více soubory

Můžeme předat více názvů souborů a výstup bude mít hlavičku s názvem souboru následovaným výstupem.


# tail -n 2 error.log error.log.2019_10_27
==> error.log <==
2019-10-29 13:17:24.356633 [INFO] [16169] [APVH_golangd_Sulsphp73:] add child process pid: 19670, procinfo: 0x27af560
2019-10-29 13:17:24.356789 [INFO] [16169] [APVH_golangd_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_golangd_Suphp73.sock.pid].

==> error.log.2019_10_27 <==
2019-10-27 20:26:31.050022 [INFO] [16169] [176.9.99.9:34084] [ACL] Access to context [/] is denied!
2019-10-27 20:26:31.216835 [INFO] [16169] [176.9.99.9:34118] [ACL] Access to context [/] is denied!
#

Pro tichý výstup můžeme použít volbu -q. Je užitečné sloučit výstup z více souborů.


# tail -n 2 -q error.log error.log.2019_10_27
2019-10-29 13:18:44.095709 [INFO] [16169] [APVH_javastr_Sulsphp73:] add child process pid: 19947, procinfo: 0x4312b50
2019-10-29 13:18:44.095766 [INFO] [16169] [APVH_javastr_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].
2019-10-27 20:26:31.050022 [INFO] [16169] [176.9.99.9:34084] [ACL] Access to context [/] is denied!
2019-10-27 20:26:31.216835 [INFO] [16169] [176.9.99.9:34118] [ACL] Access to context [/] is denied!
#

5.4) Sledování změn v souboru

Můžeme použít volbu -f pro sledování souboru pro další změny. Toto je nejpoužívanější možnost s příkazem ocas. Je užitečné sledovat protokoly v reálném čase a ladit je.


[root@li1197-217 logs]# tail -f error.log 
2019-10-29 13:22:31.719103 [INFO] [16169] [APVH_cultwpc_Sulsphp73:] add child process pid: 20640, procinfo: 0x384a9a0
2019-10-29 13:22:31.719172 [INFO] [16169] [APVH_cultwpc_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_cultwpc_Suphp73.sock.pid].
2019-10-29 13:22:32.176946 [INFO] [16169] [APVH_android_Sulsphp73:]: locked pid file [/tmp/lshttpd/APVH_android_Suphp73.sock.pid].
2019-10-29 13:22:32.176979 [INFO] [16169] [APVH_android_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_android_Suphp73.sock
2019-10-29 13:22:32.177901 [INFO] [16169] [APVH_android_Sulsphp73:] add child process pid: 20645, procinfo: 0x2df6830
2019-10-29 13:22:32.177955 [INFO] [16169] [APVH_android_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_android_Suphp73.sock.pid].
2019-10-29 13:22:39.634710 [INFO] [16169] [APVH_javastr_Sulsphp73:]: locked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].
2019-10-29 13:22:39.634755 [INFO] [16169] [APVH_javastr_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_javastr_Suphp73.sock
2019-10-29 13:22:39.641576 [INFO] [16169] [APVH_javastr_Sulsphp73:] add child process pid: 20677, procinfo: 0x286e3b0
2019-10-29 13:22:39.641694 [INFO] [16169] [APVH_javastr_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].

Můžeme také sledovat více souborů pomocí volby -f.


[root@li1197-217 logs]# tail -f error.log lsrestart.log 
==> error.log <==
2019-10-29 13:22:31.719103 [INFO] [16169] [APVH_cultwpc_Sulsphp73:] add child process pid: 20640, procinfo: 0x384a9a0
2019-10-29 13:22:31.719172 [INFO] [16169] [APVH_cultwpc_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_cultwpc_Suphp73.sock.pid].
2019-10-29 13:22:32.176946 [INFO] [16169] [APVH_android_Sulsphp73:]: locked pid file [/tmp/lshttpd/APVH_android_Suphp73.sock.pid].
2019-10-29 13:22:32.176979 [INFO] [16169] [APVH_android_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_android_Suphp73.sock
2019-10-29 13:22:32.177901 [INFO] [16169] [APVH_android_Sulsphp73:] add child process pid: 20645, procinfo: 0x2df6830
2019-10-29 13:22:32.177955 [INFO] [16169] [APVH_android_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_android_Suphp73.sock.pid].
2019-10-29 13:22:39.634710 [INFO] [16169] [APVH_javastr_Sulsphp73:]: locked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].
2019-10-29 13:22:39.634755 [INFO] [16169] [APVH_javastr_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_javastr_Suphp73.sock
2019-10-29 13:22:39.641576 [INFO] [16169] [APVH_javastr_Sulsphp73:] add child process pid: 20677, procinfo: 0x286e3b0
2019-10-29 13:22:39.641694 [INFO] [16169] [APVH_javastr_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].

==> lsrestart.log <==
Thu Oct 10 17:45:33 UTC 2019
restart, LSWS running: 1
Wed Oct 23 08:53:16 UTC 2019
restart, LSWS running: 1
Wed Oct 23 09:03:02 UTC 2019
restart, LSWS running: 1

Můžeme také určit počet řádků ve výstupu pomocí volby -f.


# tail -2f error.log
2019-10-29 13:28:46.086130 [INFO] [16169] [APVH_cultwpc_Sulsphp73:] add child process pid: 21976, procinfo: 0xd032210
2019-10-29 13:28:46.086193 [INFO] [16169] [APVH_cultwpc_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_cultwpc_Suphp73.sock.pid].

5.5) Použití příkazu tail s rourou a grep

Někdy nás zajímají pouze konkrétní zprávy ve výstupu ocasu. Můžeme použít příkaz tail s pipe a grep k filtrování konkrétních zpráv ve výstupu.


# tail -100f error.log | grep 'denied'
2019-10-29 13:21:49.170651 [INFO] [16169] [159.65.53.153:38448] [ACL] Access to context [/] is denied!
2019-10-29 13:22:00.991330 [INFO] [16169] [182.71.209.203:22089] [ACL] Access to context [/] is denied!
2019-10-29 13:25:47.188167 [INFO] [16169] [79.137.42.145:36674] [ACL] Access to context [/] is denied!
2019-10-29 13:25:52.668213 [INFO] [16169] [162.144.60.165:52886] [ACL] Access to context [/] is denied!

5.6) Použití příkazu tail k filtrování výstupu jiného příkazu

Pro filtrování výstupních řádků můžeme použít příkaz tail s jiným příkazem. Je to užitečné, když nás zajímá pouze několik řádků z výstupu příkazu.


# ls -ltr | tail -n 3
-rw-r--r--. 1 nobody nobody    24406 Oct 23 09:08 error.log.2019_10_23.02
-rw-r--r--. 1 nobody nobody 10486279 Oct 27 20:26 error.log.2019_10_27
-rw-r--r--. 1 nobody nobody  3494794 Oct 29 13:29 error.log
#

# ls -ltr | tail -n +15
-rw-r--r--. 1 nobody nobody 10490954 Oct 21 09:42 error.log.2019_10_21
-rw-r--r--. 1 nobody nobody 10485856 Oct 22 07:44 error.log.2019_10_22
-rw-r--r--. 1 nobody nobody 10485809 Oct 22 14:16 error.log.2019_10_22.01
-rw-r--r--. 1 nobody nobody  5398751 Oct 23 08:29 error.log.2019_10_23
-rw-r--r--. 1 nobody nobody    61485 Oct 23 08:58 error.log.2019_10_23.01
-rw-r--r--. 1 root   root        162 Oct 23 09:03 lsrestart.log
-rw-r--r--. 1 nobody nobody    24406 Oct 23 09:08 error.log.2019_10_23.02
-rw-r--r--. 1 nobody nobody 10486279 Oct 27 20:26 error.log.2019_10_27
-rw-r--r--. 1 nobody nobody  3499801 Oct 29 13:34 error.log

5.7) Tisk koncové verze

Můžeme použít –version k vytištění verze příkazu tail.


# tail --version
tail (GNU coreutils) 8.22
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Paul Rubin, David MacKenzie, Ian Lance Taylor,
and Jim Meyering.
#

5.8) podrobný výstup příkazu tail

Pokud použijeme možnost verbose, výstup bude mít hlavičku s názvem souboru.


# tail -v -n 2 error.log
==> error.log <==
2019-10-29 13:39:30.769561 [INFO] [16169] [APVH_javastr_Sulsphp73:] add child process pid: 24454, procinfo: 0x405b840
2019-10-29 13:39:30.769618 [INFO] [16169] [APVH_javastr_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].
#

6. Závěr

Příkaz Linux tail je velmi užitečný pro ladění zpráv protokolu v reálném čase. Je to skvělý nástroj pro vývojáře pro práci se soubory protokolu.

Reference :Stránka Wikipedie


Linux
  1. Příkaz mv v Linuxu:7 základních příkladů

  2. Příklady příkazů gzip v Linuxu

  3. více příkladů příkazů v Linuxu

  1. V příkladech příkazů v Linuxu

  2. soubor Příklady příkazů v Linuxu

  3. příklady příkazů tail v UNIX/Linux

  1. 10 Quick Linux Tail Command s příklady

  2. 8 Příklady příkazů hlavy v Linuxu

  3. 8 Příklady příkazů Stat v Linuxu