Panduan Lengkap lsof Linux - Tips Praktis Utama dari Konflik Port hingga Mengosongkan Ruang File yang Dihapus

Gambaran Umum

Masalah seperti ‘konflik port’ atau ‘ruang disk tidak berkurang meski file telah dihapus’ yang terjadi selama pengoperasian sistem Linux dapat segera diselesaikan dengan perintah lsof. Dalam artikel ini, kita akan mempelajari teknik-teknik penting untuk menerapkan lsof secara langsung di lingkungan praktis Linux, di mana segala sesuatunya dikelola sebagai file. Pelajari keahlian troubleshooting penting bagi engineer sistem langkah demi langkah, mulai dari melacak port hingga melepaskan kunci file (file lock).

Pemeriksaan Dasar lsof dan Memeriksa File yang Dibuka oleh Pengguna/Proses Tertentu

Jalankan perintah command -v lsof >/dev/null 2>&1 || (apt-get update -qq && apt-get install -y lsof) untuk memeriksa apakah perintah lsof telah terinstal di sistem, dan jika belum, instal paket tersebut.

command -v lsof >/dev/null 2>&1 || (apt-get update -qq && apt-get install -y lsof)

Jalankan perintah lsof -v untuk memeriksa versi instalasi dan informasi build dari perintah lsof.
⚙️ [Opsi Utama]

-u : Menampilkan daftar file dan proses yang sedang dibuka oleh akun pengguna tertentu.
-c : Memfilter daftar file yang dibuka oleh proses yang namanya diawali dengan nama proses yang ditentukan.
-p : Memeriksa daftar file yang sedang dibuka oleh Process ID (PID) tertentu.
-i : Menampilkan proses yang menggunakan soket jaringan dan port tertentu.
+D : Mencari daftar file yang terbuka dalam direktori yang ditentukan dan subjalurnya secara rekursif.
-t : Hanya menampilkan Process ID (PID) secara ringkas per baris, sangat berguna untuk integrasi skrip.

lsof -v

Jalankan perintah mkdir -p /tmp/lsof_lab && echo '테스트 파일 내용' > /tmp/lsof_lab/sample.txt untuk menyiapkan direktori pengujian dan file sampel untuk latihan lsof.

mkdir -p /tmp/lsof_lab && echo ‘테스트 파일 내용’ > /tmp/lsof_lab/sample.txt

Jalankan perintah tail -f /tmp/lsof_lab/sample.txt & di latar belakang agar proses terus membuka file sampel yang dibuat dan melacaknya.

tail -f /tmp/lsof_lab/sample.txt &

Perintah lsof -u $(whoami) | head -n 15 memeriksa hingga 15 baris teratas dari daftar file yang digunakan oleh proses yang sedang dijalankan oleh pengguna yang saat ini masuk.
Anda dapat memeriksa informasi terperinci mengenai file-file yang dibuka oleh akun saat ini, seperti pustaka sistem dasar dan file executable.

lsof -u $(whoami) | head -n 15

Perintah lsof -c tail mencari dan menampilkan daftar file serta pustaka yang sedang dibuka oleh proses bernama tail.
Melalui ini, Anda dapat memeriksa deskriptor file dan shared library apa saja yang direferensikan oleh perintah tail yang dijalankan di latar belakang.

lsof -c tail

Setelah menyelesaikan latihan, jalankan perintah killall tail 2>/dev/null || true untuk menghentikan proses tail yang berjalan di latar belakang secara aman dan membersihkannya.

killall tail 2>/dev/null || true

Pemeriksaan Port Jaringan dan Troubleshooting Konflik Proses

Periksa apakah python3 terinstal di sistem untuk menyiapkan lingkungan latihan pemeriksaan port dan konflik proses, lalu instal paket tersebut jika belum terpasang.

command -v python3 >/dev/null 2>&1 || (apt-get update -qq && apt-get install -y python3)

Jalankan server web sederhana di latar belakang pada port 8080 untuk menguji penggunaan port jaringan.

python3 -m http.server 8080 >/dev/null 2>&1 &

Tunggu selama 1 detik hingga proses server web yang dijalankan di latar belakang berhasil terikat (bind) ke port 8080.

sleep 1

Perintah lsof -i :8080 memeriksa proses yang sedang menggunakan port 8080.
Melalui hasil output, Anda dapat memastikan bahwa proses python3 dengan PID 371 sedang menunggu dalam status LISTEN pada port 8080.

lsof -i :8080

Perintah lsof -i -P -n | head -n 15 menampilkan daftar soket jaringan sistem dengan cepat dalam bentuk angka tanpa mengonversi nomor port dan alamat IP.
Karena melewati proses reverse DNS lookup dan pemetaan nama port layanan, Anda dapat memahami status penggunaan port dengan cepat tanpa penundaan.

lsof -i -P -n | head -n 15

Perintah lsof -i TCP:8080 -sTCP:LISTEN memfilter dan menampilkan secara presisi hanya koneksi yang menggunakan protokol TCP dan berada dalam status LISTEN pada port 8080.
Ini berguna untuk mengidentifikasi secara akurat hanya proses daemon yang sebenarnya sedang menunggu koneksi pada port tersebut, tanpa menyertakan koneksi sesi yang tidak diperlukan.

lsof -i TCP:8080 -sTCP:LISTEN

Setelah menyelesaikan latihan, hentikan paksa proses web server di latar belakang yang menggunakan port TCP 8080 untuk membersihkan sumber daya yang ditempati.

fuser -k 8080/tcp 2>/dev/null || kill $(lsof -t -i :8080) 2>/dev/null || true

Melacak Direktori Tertentu dan File Penyebab Gagal Unmount (Device Busy)

Buat direktori pengujian dan navigasikan ke jalur tersebut untuk mereproduksi situasi penggunaan direktori dan hambatan pelepasan kaitan (unmount).

mkdir -p /tmp/mount_test && cd /tmp/mount_test

Jalankan perintah echo '작업 중인 파일' > active_work.log untuk membuat file log target yang akan diakses oleh proses.

echo ‘작업 중인 파일’ > active_work.log

Jalankan proses sleep di latar belakang dengan mereferensikan file yang dibuat sebagai input standar agar file tersebut terus digunakan.

sleep 30 < active_work.log &

Ubah direktori kerja ke direktori home untuk memeriksa status dari luar direktori yang sedang ditempati.

cd /root || cd ~

Perintah lsof +D /tmp/mount_test melacak dan menampilkan secara rekursif semua file dan proses yang terbuka di direktori yang ditentukan serta subjalurnya.
Dari hasil output, Anda dapat memastikan bahwa proses sleep dengan PID 450 mereferensikan direktori tersebut sebagai direktori kerja saat ini (cwd) dan membuka file active_work.log dalam mode baca (0r), yang menjadi penyebab kegagalan unmount.

lsof +D /tmp/mount_test

Setelah latihan selesai, hentikan proses sleep di latar belakang yang menempati direktori dan file secara aman.

killall sleep 2>/dev/null || true

Hapus direktori uji sementara beserta seluruh subfilenya yang digunakan dalam latihan untuk membersihkan sumber daya sistem.

rm -rf /tmp/mount_test

Memulihkan dan Membersihkan File Hantu (deleted) yang Telah Dihapus tetapi Masih Menggunakan Disk

Buat direktori uji untuk simulasi kebocoran ruang disk dan buat file uji berukuran besar sebesar 10MB.

mkdir -p /tmp/leak_test && dd if=/dev/zero of=/tmp/leak_test/large.img bs=1M count=10 >/dev/null 2>&1

Lacak di latar belakang agar proses terus mempertahankan handel dari file besar yang dibuat.

tail -f /tmp/leak_test/large.img &

Hapus file besar yang sedang dibuka secara paksa dari sistem file untuk mereproduksi situasi kebocoran file hantu (ghost file).

rm -f /tmp/leak_test/large.img

Perintah lsof | grep '(deleted)' | head -n 5' memeriksa daftar file yang telah dihapus dari sistem file tetapi masih dibuka oleh proses sehingga tetap memakan ruang disk.
Melalui ini, Anda dapat dengan cepat melacak file hantu dan proses terkait yang ruang disknya tidak dilepaskan meskipun telah dihapus dengan perintah rm.

lsof | grep ‘(deleted)’ | head -n 5

Periksa daftar file descriptor di direktori /proc/$TARGET_PID/fd/ berdasarkan Process ID yang diekstrak dengan lsof -t.
Dengan memeriksa langsung nomor file descriptor yang direferensikan oleh proses, Anda dapat mengosongkan ruang tanpa me-restart proses atau, jika perlu, memulihkan data asli yang dihapus melalui deskriptor tersebut.

TARGET_PID=$(lsof -t /tmp/leak_test/large.img 2>/dev/null | head -n 1) && [ -n “$TARGET_PID” ] && ls -l /proc/$TARGET_PID/fd/ || true

Setelah menyelesaikan latihan, hentikan proses latar belakang yang masih menahan file hantu secara aman untuk mengembalikan ruang disk sepenuhnya.

killall tail 2>/dev/null || true

Hapus direktori uji sementara yang digunakan untuk latihan sepenuhnya guna membersihkan sumber daya sistem.

rm -rf /tmp/leak_test

Sejauh ini, kita telah melihat sekilas tips praktis utama menggunakan perintah lsof, mulai dari mengatasi konflik port hingga mengamankan ruang disk dari file yang dihapus.
Semoga rangkuman ini sangat membantu dalam menyelesaikan masalah selama pengoperasian server dan troubleshooting yang sebenarnya.