Perintah lsof mencantumkan file, soket, dan pipa yang terbuka. Anda dapat menggunakan perintah lsof untuk melihat file apa yang dibiarkan terbuka (seperti perpustakaan atau file log) dan port apa yang didengarkan daemon. Anda dapat mencari file yang terbuka menggunakan perintah lsof. lsof harus dijalankan sebagai superuser (root) untuk melihat semua file yang terbuka. Saat digunakan tanpa argumen/opsi apa pun, lsof mencantumkan semua file yang terbuka untuk proses aktif saat ini.
# lsof COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 253,0 4096 2 / init 1 root rtd DIR 253,0 4096 2 / init 1 root txt REG 253,0 150352 4587561 /sbin/init (deleted) init 1 root DEL REG 253,0 4849693 /lib64/libnss_files-2.12.so ..........
Memahami output dari perintah “lsof”:
COMMAND: Command using the file. PID: PID of the file USER: Owner of the file FD: File descriptor. Different flags of File descriptor are as below: # : The number in front of flag(s) is the file descriptor number used by the process to associate with the file u : File open with Read and Write permission r : File open with Read permission w : File open with Write permission W : File open with Write permission and with Write Lock on entire file mem : Memory mapped file, usually for shared library TYPE: File type. Different flags of File type are as below: REG - Regular file DIR - Directory DEVICE: major, minor number of the device where file resides. SIZE/OFF: File size NODE: inode number NAME: File name
Temukan file yang terbuka di bawah titik pemasangan
Buka file di bawah direktori tertentu dapat ditemukan menggunakan lsof. Misalnya buka file teks (jangan tutup – biarkan tetap terbuka) di bawah direktori untuk diedit menggunakan vi dan periksa output lsof di bawah direktori itu di sesi lain.
# cd /test # vi a.txt
Di sesi lain, periksa output lsof di bawah direktori itu:
# lsof /test COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 2972 root cwd DIR 253,0 4096 262145 /test vi 3012 root cwd DIR 253,0 4096 262145 /test
Ini juga dapat digunakan untuk meng-umount titik pemasangan yang sibuk. Proses yang membuat titik mount tetap sibuk dapat ditemukan menggunakan lsof.
Menemukan info tentang proses tertentu
Untuk informasi lebih lanjut tentang proses tertentu, gunakan opsi -p untuk lsof:
# lsof -p 8797
Tampilkan Alamat Dengarkan
Daemon dapat mengikat ke alamat IPv4 global 0.0.0.0, atau ke alamat tertentu, seperti 127.0.0.1 (localhost). Daemon yang terikat ke alamat localhost hanya dapat dijangkau dari sistem itu sendiri. Gunakan opsi -i dan -nP ke lsof untuk menampilkan port yang mendengarkan tanpa mencari nama host dan layanan. Sebagai contoh, berikut ini menunjukkan daemon Apache httpd yang berjalan di localhost pada port non-standar 7777. Sistem lain tidak akan dapat terhubung ke proses httpd ini:baik untuk keamanan, buruk untuk konektivitas jarak jauh.
Contoh:
# lsof -i -nP | grep httpd httpd 8616 apache 16u IPv4 0x0455567fh 0t0 TCP 127.0.0.1:7777 (LISTEN) httpd 8614 apache 16u IPv4 0x0455567fh 0t0 TCP 127.0.0.1:7777 (LISTEN) httpd 8623 apache 16u IPv4 0x0455567fh 0t0 TCP 127.0.0.1:7777 (LISTEN)
Contoh:
Sebaliknya, proses OpenSSH sshd berikut akan menerima koneksi dari sistem lain, karena terikat ke alamat 0.0.0.0, seperti yang ditunjukkan oleh * di depan nomor port.
# lsof -i -P | grep sshd sshd 4341 root 3u IPv4 46438 TCP *:22 (LISTEN)
Aplikasi tertentu mendengarkan di banyak port yang berbeda, seperti Berkeley Internet Name Daemon (BIND) bernama daemon, versi 9.
Contoh:
# lsof -i -nP | grep ^named named 9865 named 5u IPv6 0x03348be0 0t0 UDP *:53 named 9865 named 6u IPv6 0x0566re80 0t0 TCP *:53 (LISTEN) named 9865 named 7u IPv4 0x03456b10 0t0 UDP 127.0.0.1:53 named 9865 named 8u IPv4 0x01870570 0t0 TCP 127.0.0.1:53 (LISTEN) named 9865 named 9u IPv4 0x03456a40 0t0 UDP *:49164 named 9865 named 10u IPv6 0x03456970 0t0 UDP *:49165 named 8888 named 11u IPv4 0x0186fd54 0t0 TCP *:953 (LISTEN) named 8888 named 13u IPv4 0x01387ee0 0t0 UDP 168.1.863.1:67 named 8888 named 14u IPv4 0x099899ce4 0t0 TCP 168.1.863.1:67(LISTEN)
Menemukan file yang dibuka oleh suatu proses
Suatu proses mungkin tidak berfungsi karena alasan lain, seperti firewall, kontrol layanan akses seperti tcp_wrappers, atau kesalahan konfigurasi lainnya. Gunakan ping, telnet, atau nmap untuk memeriksa dari sistem jarak jauh apakah ada hal lain yang menghalangi permintaan, atau jalankan tcpdump untuk melihat apakah koneksi meninggalkan sumber atau tiba di sistem target.
Contoh
Untuk melihat file apa saja yang dibuka oleh proses yang namanya dimulai dengan “t” (telnetd…) dan bash. Dan untuk melihat file apa saja yang dibuka oleh init gunakan perintah berikut:
# lsof -c t # lsof -c bash # lsof -c init
Contoh
Untuk melihat file apa yang dibuka oleh proses yang namanya dimulai dengan "testuser", tetapi mengecualikan yang pemiliknya adalah pengguna "tom" gunakan perintah berikut:
# lsof -c testuser -u ^tom
Temukan proses yang dibuka oleh pengguna
Untuk melihat proses apa yang dibuka oleh pengguna myuser dan tom, gunakan perintah berikut:
# lsof -u myuser,tom
Menemukan port yang digunakan oleh proses
Untuk melihat proses apa yang menggunakan port tertentu gunakan perintah berikut:
# lsof -i TCP:389
Bagaimana Menemukan Jumlah File yang Terbuka untuk Nama Proses dan pid proses yang diurutkan berdasarkan jumlah file yang terbuka?
Ini bisa menarik ketika kesalahan "terlalu banyak file terbuka" muncul. Gunakan skrip di bawah ini yang menggunakan perintah lsof:
# lsof | perl -lane '$x{"$F[0]:$F[1]"}++;END { print "$x{$_}\t$_" for sort {$x{$a}<=>$x{$b}} keys %x}'
Menemukan Proses Menggunakan Deskriptor File Maks
Batas deskriptor file dapat diatur menggunakan perintah berikut untuk shell:
# ulimit -n 65536
Gunakan perintah “lsof” untuk menemukan apa yang menggunakan deskriptor file pada sistem.
# lsof -g | awk '{print $2}' | sort -u > /tmp/lsof_sort.txt
# for var in `cat /tmp/lsof_sort.txt` do echo `echo "$var ---- "``grep -x $var /tmp/lsof.txt | wc -l` done
Ini akan mencantumkan semua proses dan jumlah file yang sesuai yang dibuka oleh mereka. Anda dapat memilih proses yang paling banyak membuka file dan melihat prosesnya.