Perintah tail Linux: melihat akhir file dan mengikuti log
tail adalah perintah Linux yang digunakan untuk memeriksa bagian akhir dari sebuah file. Jika dijalankan tanpa opsi, perintah ini akan menampilkan 10 baris terakhir. Anda dapat menentukan jumlah baris dengan -n dan memantau log yang baru ditambahkan secara terus-menerus dengan -f atau -F.
Ini sangat berguna untuk dengan cepat memeriksa log tepat sebelum suatu masalah terjadi atau untuk mengamati log dari layanan yang sedang berjalan. Dalam artikel ini, kami menjelaskan dasar-dasar sintaks, metode pelacakan dengan mempertimbangkan rotasi log, penyaringan, dan pemantauan beberapa file menggunakan contoh nyata.
Perintah tail
tail mengeluarkan bagian terakhir dari input teks. Jika tidak ada file yang ditentukan atau - digunakan sebagai pengganti file, itu membaca dari input standar. Unit keluaran default adalah baris, dan tanpa opsi tertentu, ia menampilkan 10 baris terakhir.
Ini berguna untuk memeriksa bagian akhir dari file log besar tanpa membuka seluruh file. Namun, tail bukan alat untuk menganalisis atau mengarsipkan log; ini adalah alat untuk membaca akhir file dan mengikuti perubahan yang terjadi.
Sintaks Dasar dan Penggunaan
Sintaks dasar berikut adalah pola, bukan perintah yang dapat disalin tanpa mengganti placeholder. Tanda kurung menunjukkan item opsional dan tidak boleh disertakan dalam perintah sebenarnya.
tail [options] [file...]
Sebagai contoh, untuk memeriksa 10 baris terakhir dari /var/log/app.log, jalankan perintah berikut.
tail /var/log/app.log
Jika Anda membutuhkan 20 baris terakhir, tentukan jumlah baris dengan opsi -n.
tail -n 20 /var/log/app.log
Anda bisa menulisnya secara singkat seperti -20, tetapi dalam skrip dan dokumen, format -n 20 lebih jelas.
Cara mencetak hanya rentang yang diinginkan
Cetak N baris terakhir
-n N mencetak N baris dari akhir file. Ini digunakan untuk memeriksa permintaan atau kesalahan terbaru dalam rentang tertentu.
tail -n 50 access.log
Jika Anda ingin membaca output halaman per halaman, Anda bisa menghubungkannya ke less.
tail -n 500 access.log | less
Cetak dari baris ke-N hingga akhir
Menambahkan tanda plus sebelum angka -n +N memiliki arti yang berbeda. Alih-alih mencetak N baris terakhir, ini mencetak dari baris ke-N dari file hingga akhir.
tail -n +2 data.csv
Contoh ini mencetak dari baris kedua file CSV, tidak termasuk baris pertama, yang merupakan header. Ini melewati baris fisik pertama. Jika sebuah rekaman CSV memuat baris baru di dalam tanda kutip, gunakan parser CSV agar batas rekaman ditangani dengan benar.
Keluaran berdasarkan byte, bukan baris
-c N mengeluarkan N byte terakhir, bukan baris. Anda dapat menggunakan akhiran seperti K atau M.
tail -c 1K output.bin
-c +N mengeluarkan dari byte ke-N hingga akhir. Jika dipotong berdasarkan byte, karakter multibyte mungkin terpisah di tengah, jadi biasanya lebih aman menggunakan -n untuk teks multibyte.
Melihat secara terus-menerus log yang baru ditambahkan
Melacak secara terus-menerus file yang dibuka dengan -f
-f pertama-tama menampilkan akhir dari file, kemudian terus menampilkan konten baru yang ditambahkan ke file. Perilaku default mengikuti deskriptor file yang terbuka, membuatnya cocok untuk situasi di mana log terus ditambahkan ke file yang sama.
tail -f /var/log/app.log
Untuk menghentikan pelacakan, tekan Ctrl+C.
Tangani rotasi log dengan -F
Dalam lingkungan operasional, file log mungkin berubah nama dan digantikan dengan file baru setelah mencapai ukuran atau periode tertentu. Ini disebut rotasi log. Opsi -F pada GNU tail setara dengan --follow=name --retry, yang mencoba membuka kembali berdasarkan nama file.
tail -F /var/log/app.log
Oleh karena itu, ketika mengamati log layanan yang sering dirotasi untuk waktu yang lama, -F sering kali lebih praktis daripada -f. Perilaku ini dapat diperiksa dalam manual tail GNU.
Melihat hanya log baru tanpa konten yang sudah ada
Jika 10 baris terakhir dari konten yang ada tidak dibutuhkan saat menjalankan -f, gunakan -n 0 bersama-sama. Hanya baris yang ditambahkan setelah eksekusi perintah yang akan ditampilkan.
tail -n 0 -f /var/log/app.log
Opsi yang sering digunakan
| Opsi | Fungsi | Contoh Penggunaan |
|---|---|---|
-n N |
Cetak N baris terakhir | tail -n 100 app.log |
-n +N |
Cetak mulai dari baris ke-N | tail -n +2 data.csv |
-c N |
Cetak N byte terakhir | tail -c 2K data.bin |
-f |
Lacak konten tambahan dari file yang terbuka | Amati satu file yang terus ditulis |
-F |
Lacak dan coba ulang berdasarkan nama file | Amati log yang dirotasi |
-s N |
Atur interval polling atau pemeriksaan PID menjadi N detik; perilakunya bergantung pada mekanisme pemantauan | tail -f -s 2 app.log |
--pid=PID |
Akhiri pelacakan setelah proses yang ditentukan selesai | Gunakan dengan log pekerjaan batch |
-q |
Sembunyikan header nama file | Tangani beberapa keluaran file sebagai satu |
-v |
Selalu tampilkan header nama file | Bedakan dengan jelas file sumber |
Rentang dukungan opsi yang rinci dapat bervariasi tergantung pada sistem operasi dan implementasi tail. Terutama saat menggunakan -F dan --pid dalam sebuah skrip, disarankan untuk memeriksa dukungan pada sistem target dengan tail --help.
Contoh praktis untuk memeriksa log
Menemukan Hanya Kesalahan Terbaru
Pertama, baca hanya 200 baris terakhir, kemudian gunakan grep untuk memfilter string kesalahan agar mengurangi kebutuhan mencari melalui log lama yang besar.
tail -n 200 app.log | grep 'ERROR'
Untuk mengabaikan huruf besar/kecil, gunakan grep -i, dan jika nomor baris diperlukan, gunakan grep -n; nomor tersebut dihitung dari masukan grep, bukan dari awal file asli.
Melihat Hanya Kesalahan Baru Secara Terus-Menerus
Jika Anda ingin mengikuti log yang dirotasi dan hanya melihat baris kesalahan, gabungkan perintah seperti berikut. grep GNU --line-buffered membantu mengurangi penundaan output dalam pipa dengan meneruskan setiap baris secara langsung.
tail -F app.log | grep --line-buffered 'ERROR'
Metode ini hanya mempersempit apa yang ditampilkan di layar dan tidak mengubah log asli. Jika Anda memerlukan beberapa kondisi atau analisis log yang terstruktur, lebih baik mempertimbangkan alat pengumpulan dan pencarian log khusus.
Melihat Beberapa File Log Secara Bersamaan
Anda dapat menentukan beberapa file dengan tail. Dalam hal ini, header nama file ditampilkan sehingga Anda dapat mengetahui dari file mana output berasal.
tail -F access.log error.log
Untuk membuat output untuk setiap file lebih berbeda, tambahkan -v, dan jika header tidak diperlukan, gunakan -q.
Akhiri jejak ketika proses berakhir
Dalam GNU tail, Anda dapat menggunakan --pid untuk menghentikan mengikuti sebuah file setelah proses tertentu berakhir. Dalam contoh berikut, some_command adalah placeholder yang harus diganti dengan program sebenarnya, dan $! adalah ID proses latar belakang terakhir di shell.
some_command > build.log 2>&1 &
tail --pid=$! -f build.log
Opsi --pid bekerja bersama dengan -f, dan deteksi penghentian mungkin tidak terjadi segera. Dalam otomatisasi, Anda juga harus memeriksa kode keluar perintah dan file log secara terpisah.
Perbedaan antara -f dan -F
| Kategori | -f |
-F |
|---|---|---|
| Kriteria pelacakan | Pada dasarnya, sebuah deskriptor file yang terbuka | Nama file yang ditentukan |
| Penggantian file | Masih dapat melihat file yang sebelumnya dibuka | Membuka file baru yang dibuat dengan nama yang sama lagi |
| File sementara tidak ada | Jika dibuka sebelum penggantian, deskriptor lama masih dapat diikuti; jika gagal dibuka, tidak ada deskriptor untuk diikuti | Tunggu sampai muncul kembali dengan aksi --retry |
| Situasi yang direkomendasikan | Pengamatan jangka pendek terhadap file yang tidak diganti | Pengamatan jangka panjang terhadap log layanan yang berotasi |
-F tidak selalu lebih baik. Dalam kasus khusus di mana suatu proses terus menulis ke file yang sudah ada dengan nama yang telah berubah, menjaga file tetap terbuka dengan -f dapat lebih baik menunjukkan apa yang dibutuhkan. Pilihan harus didasarkan pada metode pembuatan log dan kebijakan rotasi. Rotasi yang menyalin lalu memangkas file yang sama berbeda dari mengganti file dengan nama yang sama.
Ketika tail tidak cocok
- Systemd journal: Jika log disimpan di jurnal alih-alih sebagai file teks biasa, gunakan
journalctl -f. Untuk layanan tertentu, Anda bisa mempersempitnya denganjournalctl -f -u service_name. - Memeriksa bagian awal: Untuk beberapa baris pertama dari sebuah file,
headlebih langsung. - Membaca sambil berpindah: Untuk memeriksa konten lama dan baru,
less +F filenamedapat menjadi praktis. Berhenti mengikuti dengan Ctrl+C, bergerak ke atas dan ke bawah, kemudian lanjutkan mengikuti dengan F. - Memperbarui Hasil Perintah Secara Berkala: Jika Anda ingin terus memeriksa hasil terbaru dari perintah dibandingkan bagian tambahan dari file, panduan perintah watch di Linux (bahasa Inggris) lebih cocok untuk tujuan ini.
- Log Terpusat Skala Besar: Jika Anda perlu mencari, menggabungkan, dan memberi peringatan pada log dari beberapa server dalam jangka waktu panjang, sistem logging pusat atau alat observabilitas diperlukan.
Poin yang Perlu Dipertimbangkan dalam Izin dan Lingkungan Operasi
Kesalahan Izin Ditolak
Jika Anda tidak memiliki izin baca untuk file log, kesalahan Permission denied akan terjadi. Pertama, periksa pemilik dan izin dengan ls -l filename, dan minta izin yang diperlukan secara aman dari administrator. Hindari memperluas izin secara sembarangan atau menambahkan prefix sudo pada setiap perintah.
Output Log Sensitif
Token autentikasi, ID sesi, dan informasi pribadi mungkin termasuk dalam log. Pastikan nilai sensitif tidak terekspos dalam berbagi layar, riwayat terminal, atau pesan kesalahan yang disalin. Saat membagikan log operasional secara eksternal, ekstrak hanya cakupan yang diperlukan dan anonimisasi nilai sensitif.
Pertanyaan yang Sering Diajukan
Berapa banyak baris yang ditampilkan tail secara default?
Jika tidak ada opsi yang ditentukan, ia menampilkan 10 baris terakhir. Jika Anda memerlukan jumlah yang berbeda, Anda dapat menentukan jumlah baris setelah -n, misalnya tail -n 30 filename.
Bagaimana cara menghentikan tail -f?
Tekan Ctrl+C untuk menghentikan jejak yang sedang berjalan dan kembali ke prompt shell. Tindakan ini tidak menghapus atau memodifikasi berkas log.
Mengapa saya tidak melihat konten baru setelah rotasi log?
Ini mungkin karena -f terus melacak deskriptor dari berkas sebelum diganti. Cobalah menggunakan GNU tail -F filename untuk membuka ulang berkas baru berdasarkan nama berkas. Jika masih tidak muncul, Anda perlu memeriksa jalur log sebenarnya dan pengaturan output layanan.
Bisakah tail digunakan pada berkas log yang dikompresi?
tail tidak secara otomatis mendekompresi format yang dikompresi. Anda dapat mendekompresi seluruh file yang dikompresi dan melewatinya melalui sebuah pipe, tetapi ini mungkin tidak efisien untuk file yang besar. Misalnya, file gzip dapat diperiksa dengan zcat archive.log.gz | tail -n 50.
Ringkasan
Untuk memeriksa konten terbaru dengan cepat, gunakan tail filename, dan untuk menentukan jumlah baris, gunakan tail -n N filename. Untuk terus melihat log baru, gunakan -f, dan jika file diganti karena rotasi log, disarankan untuk menggunakan -F dari GNU tail.
Dengan menghubungkan dengan grep, Anda dapat memfilter hanya pesan yang diperlukan, tetapi berhati-hatilah terhadap izin dan paparan informasi sensitif. Jika Anda ingin mempelajari alat dasar lainnya juga, Anda dapat merujuk ke daftar perintah Linux (bahasa Inggris).




