Linux komanda tail
prikazuje podatke s kraja fajla. Može čak i prikazivati ažuriranja koja se dodaju fajlu u realnom vremenu. Pokazaćemo vam kako se koristi.
Da li je systemd „ubio“ tail komandu?
Komanda tail
vam prikazuje podatke s kraja datoteke. Novi podaci se obično dodaju na kraj datoteke, stoga je tail
brz i jednostavan način da vidite najnovije dodatke. Takođe, može nadgledati datoteku i prikazati svaki novi unos teksta čim se pojavi, što je čini odličnim alatom za praćenje log fajlova.
Mnoge moderne Linux distribucije su prihvatile systemd kao sistem i upravljač uslugama. To je prvi proces koji se izvršava (sa ID-jem procesa 1) i roditelj je svim ostalim procesima. Nekada je ovu ulogu imao stariji init sistem.
Zajedno s ovom promenom došao je i novi format za sistemske datoteke dnevnika. One se više ne kreiraju kao običan tekst, već se pod systemd-om snimaju u binarnom formatu. Da biste čitali ove datoteke dnevnika, morate koristiti uslužni program journalctl
. Komanda tail
radi s formatima običnog teksta i ne čita binarne datoteke. Dakle, da li to znači da je komanda tail
postala rešenje u potrazi za problemom? Da li još uvek ima šta da ponudi?
Postoji mnogo više od prikaza ažuriranja u realnom vremenu. I dalje postoji mnogo datoteka dnevnika koje nisu sistemski generisane i još uvek se kreiraju kao obični tekstualni fajlovi. Na primer, datoteke dnevnika koje generišu aplikacije nisu promenile svoj format.
Korišćenje komande tail
Prosledite ime datoteke komandi tail
i ona će vam prikazati poslednjih deset redova iz te datoteke. Primeri datoteka koje koristimo sadrže liste sortiranih reči. Svaki red je numerisan, tako da bi trebalo da bude lako pratiti primere i videti kakav efekat imaju različite opcije.
tail word-list.txt
Da biste videli drugačiji broj redova, koristite opciju -n
(broj redova):
tail -n 15 word-list.txt
U stvari, možete izostaviti -n
i samo koristiti crticu -
i broj. Uverite se da nema razmaka između njih. Tehnički, ovo je zastarela komandna forma, ali je još uvek u man stranicama, i još uvek radi.
tail -12 word-list.txt
Korišćenje tail sa više datoteka
Možete koristiti tail
sa više datoteka odjednom. Samo prosledite imena datoteka u komandnoj liniji:
tail -n 4 list-1.txt list-2.txt list-3.txt
Za svaku datoteku je prikazano malo zaglavlje tako da znate kojoj datoteci pripadaju redovi.
Prikaz linija sa početka datoteke
Modifikator +
(broj od početka) navodi tail
da prikaže linije od početka datoteke, počevši od određenog broja reda. Ako je vaša datoteka veoma dugačka i izaberete liniju blizu početka, dobićete mnogo izlaznih podataka poslatih u prozor terminala. Ako je to slučaj, ima smisla preusmeriti izlaz iz tail
u less
.
tail +440 list-1.txt
Možete listati kroz tekst na kontrolisan način.
Pošto slučajno ima 20.445 redova u ovoj datoteci, ova komanda je ekvivalentna korišćenju opcije -6
:
tail +20440 list-1.txt
Korišćenje bajtova sa tail
Možete reći komandi tail
da koristi pomeraje u bajtovima umesto u linijama, koristeći opciju -c
(bajtovi). Ovo bi moglo biti korisno ako imate datoteku teksta koja je formatirana u zapise uobičajene veličine. Imajte na umu da se znak novog reda računa kao jedan bajt. Ova komanda će prikazati poslednja 93 bajta u datoteci:
tail -c 93 list-2.txt
Možete kombinovati opciju -c
(bajtovi) sa modifikatorom +
(broj od početka datoteke) i navesti pomeraj u bajtovima koji se računaju od početka datoteke:
tail -c +351053 list-e.txt
Piping u tail
Ranije smo slali izlaz iz tail
u less
. Takođe možemo preneti izlaz iz drugih komandi u tail
.
Da biste identifikovali pet datoteka ili fascikli sa najstarijim vremenima modifikacije, koristite opciju -t
(sortiranje po vremenu modifikacije) sa ls
i prenesite izlaz u tail
.
ls -tl | tail -5
Osnovna komanda navodi redove teksta sa početka datoteke. Ovo možemo kombinovati sa tail
da bismo izdvojili deo datoteke. Ovde koristimo naredbu head
da izdvojimo prvih 200 redova iz datoteke. Ovo se šalje u tail
, koji izdvaja poslednjih deset redova. Ovo nam daje redove od 191 do reda 200. To jest, poslednjih deset redova od prvih 200 redova:
head -n 200 list-1.txt | tail -10
Ova komanda navodi pet procesa koji najviše zahtevaju memoriju.
ps aux | sort -nk +4 | tail -5
Hajde da to razbijemo.
Komanda ps
prikazuje informacije o pokrenutim procesima. Korišćene opcije su:
a
: Navedite sve procese, ne samo za trenutnog korisnika.u
: Prikažite izlaz orijentisan na korisnika.x
: Navedite sve procese, uključujući i one koji se ne pokreću unutar TTY-ja.
Komanda sort
sortira izlaz od ps
. Opcije koje koristimo sa sort
su:
n
: Poredaj numerički.k +4
: Sortiraj u četvrtoj koloni.
Komanda tail -5
prikazuje poslednjih pet procesa iz sortiranog izlaza. Ovo je pet procesa koji najviše zahtevaju memoriju.
Korišćenje tail za praćenje datoteka u realnom vremenu
Praćenje novih tekstualnih unosa koji pristižu u datoteku – obično u fajlu dnevnika – je lako pomoću tail
. Prosledite ime datoteke u komandnu liniju i koristite opciju -f
(prati).
tail -f geek-1.log
Kako se svaki novi unos dnevnika dodaje u datoteku dnevnika, tail
ažurira svoj prikaz u prozoru terminala.
Možete da precizirate izlaz tako da uključuje samo redove od posebne važnosti ili interesa. Ovde koristimo grep
za prikazuju samo linije koje uključuju reč „average“:
tail -f geek-1.log | grep average
Da biste pratili promene u dve ili više datoteka, prosledite imena datoteka u komandnoj liniji:
tail -f -n 5 geek-1.log geek-2.log
Svaki unos je označen zaglavljem koje pokazuje iz koje datoteke dolazi tekst.
Ekran se ažurira svaki put kada novi unos stigne u sledeću datoteku. Da biste odredili period ažuriranja, koristite opciju -s
(period mirovanja). Ovo govori tail
da sačeka nekoliko sekundi, pet u ovom primeru, između provera datoteka.
tail -f -s 5 geek-1.log
Doduše, ne možete reći ako pogledate snimak ekrana, ali ažuriranja datoteke se dešavaju jednom u dve sekunde. Novi unosi datoteka se prikazuju u prozoru terminala svakih pet sekundi.
Kada pratite dodavanja teksta u više datoteka, možete potisnuti zaglavlja koja pokazuju iz koje datoteke dnevnika dolazi tekst. Koristite opciju -q
(tiho) da biste ovo uradili:
tail -f -q geek-1.log geek-2.log
Izlaz iz datoteka se prikazuje u besprekornoj mešavini teksta. Nema naznake iz koje datoteke dnevnika dolazi svaki unos.
Tail još uvek ima vrednost
Iako pristup sistemskim log datotekama sada omogućava journalctl
, tail
još uvek ima mnogo toga da ponudi. Ovo je posebno tačno kada se koristi u kombinaciji sa drugim komandama, uvodeći u tail
ili iz njega.
systemd je možda promenio okruženje, ali još uvek postoji mesto za tradicionalne uslužne programe koji su u skladu sa Unix filozofijom da se jedna stvar radi i to dobro.