lsof adalah singkatan dari List Open Files.
Sangat mudah untuk mengingat perintah lsof jika Anda menganggapnya sebagai “ls + of”, di mana ls adalah singkatan dari list, dan of adalah singkatan dari file yang terbuka.
Ini adalah utilitas baris perintah yang digunakan untuk membuat daftar informasi tentang file yang dibuka oleh berbagai proses. Di unix, semuanya adalah file, (pipa, soket, direktori, perangkat, dll.). Jadi dengan menggunakan lsof, Anda bisa mendapatkan informasi tentang file yang dibuka.
1. Pengantar lsof
Cukup mengetik lsof akan memberikan daftar semua file terbuka milik semua proses aktif.
# lsof COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,1 4096 2 / init 1 root txt REG 8,1 124704 917562 /sbin/init init 1 root 0u CHR 1,3 0t0 4369 /dev/null init 1 root 1u CHR 1,3 0t0 4369 /dev/null init 1 root 2u CHR 1,3 0t0 4369 /dev/null init 1 root 3r FIFO 0,8 0t0 6323 pipe ...
Secara default, Satu file per baris ditampilkan. Sebagian besar kolom cukup jelas. Kami akan menjelaskan detail tentang beberapa kolom samar (FD dan TYPE).
FD – Mewakili deskriptor file. Beberapa nilai FD adalah,
- cwd – Direktori Kerja Saat Ini
- txt – File teks
- mem – File yang dipetakan memori
- mmap – Perangkat yang dipetakan dengan memori
- NUMBER – Mewakili deskriptor file yang sebenarnya. Karakter setelah nomor yaitu '1u', mewakili mode di mana file dibuka. r untuk membaca, w untuk menulis, u untuk membaca dan menulis.
TYPE – Menentukan jenis file. Beberapa nilai TYPE adalah,
- REG – File Biasa
- DIR – Direktori
- FIFO – Masuk Pertama Keluar Pertama
- CHR – File khusus karakter
Untuk daftar lengkap FD &TYPE, lihat man lsof.
2. Daftar proses yang membuka file tertentu
Anda hanya dapat membuat daftar proses yang membuka file tertentu, dengan memberikan nama file sebagai argumen.
# lsof /var/log/syslog COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 488 syslog 1w REG 8,1 1151 268940 /var/log/syslog
3. Daftar file yang dibuka di bawah direktori
Anda dapat membuat daftar proses yang membuka file di bawah direktori tertentu menggunakan opsi '+ D'. +D akan mengulang sub direktori juga. Jika Anda tidak ingin lsof berulang, gunakan opsi ‘+d’.
# lsof +D /var/log/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 488 syslog 1w REG 8,1 1151 268940 /var/log/syslog rsyslogd 488 syslog 2w REG 8,1 2405 269616 /var/log/auth.log console-k 144 root 9w REG 8,1 10871 269369 /var/log/ConsoleKit/history
4. Daftar file yang dibuka berdasarkan nama proses yang dimulai dengan
Anda dapat membuat daftar file yang dibuka dengan nama proses yang dimulai dengan string, menggunakan opsi '-c'. -c diikuti dengan nama proses akan mencantumkan file yang dibuka oleh proses yang dimulai dengan nama proses tersebut. Anda dapat memberikan beberapa tombol -c pada satu baris perintah.
# lsof -c ssh -c init COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root txt REG 8,1 124704 917562 /sbin/init init 1 root mem REG 8,1 1434180 1442625 /lib/i386-linux-gnu/libc-2.13.so init 1 root mem REG 8,1 30684 1442694 /lib/i386-linux-gnu/librt-2.13.so ... ssh-agent 1528 lakshmanan 1u CHR 1,3 0t0 4369 /dev/null ssh-agent 1528 lakshmanan 2u CHR 1,3 0t0 4369 /dev/null ssh-agent 1528 lakshmanan 3u unix 0xdf70e240 0t0 10464 /tmp/ssh-sUymKXxw1495/agent.1495
5. Daftar proses menggunakan titik mount
Terkadang ketika kami mencoba untuk meng-umount sebuah direktori, sistem akan mengatakan kesalahan "Perangkat atau Sumber Daya Sibuk". Jadi kita perlu mencari tahu apa saja proses yang menggunakan titik mount dan mematikan proses tersebut untuk umount direktori. Dengan menggunakan lsof kita dapat menemukan proses tersebut.
# lsof /home
Berikut ini juga akan berfungsi.
# lsof +D /home/
6. Daftar file yang dibuka oleh pengguna tertentu
Untuk menemukan daftar file yang dibuka oleh pengguna tertentu, gunakan opsi ‘-u’.
# lsof -u lakshmanan COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME update-no 1892 lakshmanan 20r FIFO 0,8 0t0 14536 pipe update-no 1892 lakshmanan 21w FIFO 0,8 0t0 14536 pipe bash 1995 lakshmanan cwd DIR 8,1 4096 393218 /home/lakshmanan
Terkadang Anda mungkin ingin membuat daftar file yang dibuka oleh semua pengguna, mengharapkan beberapa 1 atau 2. Dalam hal ini Anda dapat menggunakan '^' untuk mengecualikan hanya pengguna tertentu sebagai berikut
# lsof -u ^lakshmanan COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rtkit-dae 1380 rtkit 7u 0000 0,9 0 4360 anon_inode udisks-da 1584 root cwd DIR 8,1 4096 2 /
Perintah di atas mencantumkan semua file yang dibuka oleh semua pengguna, harapkan pengguna 'lakshmanan'.
7. Daftar semua file yang terbuka dengan proses tertentu
Anda dapat membuat daftar semua file yang dibuka oleh proses tertentu menggunakan opsi '-p'. Terkadang akan sangat membantu untuk mendapatkan lebih banyak informasi tentang proses tertentu.
# lsof -p 1753 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 1753 lakshmanan cwd DIR 8,1 4096 393571 /home/lakshmanan/test.txt bash 1753 lakshmanan rtd DIR 8,1 4096 2 / bash 1753 lakshmanan 255u CHR 136,0 0t0 3 /dev/pts/0 ...
8. Matikan semua proses milik pengguna tertentu
Saat Anda ingin mematikan semua proses yang filenya dibuka oleh pengguna tertentu, Anda dapat menggunakan opsi '-t' untuk mencantumkan output hanya id proses dari proses tersebut, dan meneruskannya ke kill sebagai berikut
# kill -9 `lsof -t -u lakshmanan`
Perintah di atas akan mematikan semua proses milik pengguna 'lakshmanan', yang membuka file.
Demikian pula Anda juga dapat menggunakan '-t' dalam banyak cara. Misalnya, untuk membuat daftar id proses dari suatu proses yang dibuka /var/log/syslog dapat dilakukan dengan
# lsof -t /var/log/syslog 489
Berbicara tentang membunuh, tahukah Anda bahwa ada 4 Cara untuk Membunuh Sebuah Proses?
9. Gabungkan lebih banyak opsi daftar menggunakan OR/AND
Secara default ketika Anda menggunakan lebih dari satu opsi daftar di lsof, mereka akan di-ORed. Misalnya,
# lsof -u lakshmanan -c init COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,1 4096 2 / init 1 root txt REG 8,1 124704 917562 /sbin/init bash 1995 lakshmanan 2u CHR 136,2 0t0 5 /dev/pts/2 bash 1995 lakshmanan 255u CHR 136,2 0t0 5 /dev/pts/2 ...
Perintah di atas menggunakan dua opsi daftar, '-u' dan '-c'. Jadi perintah akan mencantumkan proses milik pengguna 'lakshmanan' serta nama proses dimulai dengan 'init'.
Tetapi ketika Anda ingin membuat daftar proses milik pengguna 'lakshmanan' dan nama proses dimulai dengan 'init', Anda dapat menggunakan opsi '-a'.
# lsof -u lakshmanan -c init -a
Perintah di atas tidak akan menampilkan apa-apa, karena tidak ada proses bernama 'init' milik pengguna 'lakshmanan'.
10. Jalankan lsof dalam mode pengulangan
lsof juga mendukung mode Ulangi. Ini pertama-tama akan membuat daftar file berdasarkan parameter yang diberikan, dan menunda untuk detik yang ditentukan dan sekali lagi mencantumkan file berdasarkan parameter yang diberikan. Itu bisa diinterupsi oleh sinyal.
Mode pengulangan dapat diaktifkan dengan menggunakan '-r' atau '+r'. Jika '+r' digunakan maka, mode pengulangan akan berakhir ketika tidak ada file yang terbuka ditemukan. '-r' akan terus daftar, tunda, daftar sampai interupsi diberikan terlepas dari file dibuka atau tidak.
Setiap keluaran siklus akan dipisahkan dengan menggunakan ‘========’. Anda juga menentukan waktu tunda sebagai '-r' | ‘+r’.
# lsof -u lakshmanan -c init -a -r5 ======= ======= COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME inita.sh 2971 lakshmanan cwd DIR 8,1 4096 393218 /home/lakshmanan inita.sh 2971 lakshmanan rtd DIR 8,1 4096 2 / inita.sh 2971 lakshmanan txt REG 8,1 83848 524315 /bin/dash inita.sh 2971 lakshmanan mem REG 8,1 1434180 1442625 /lib/i386-linux-gnu/libc-2.13.so inita.sh 2971 lakshmanan mem REG 8,1 117960 1442612 /lib/i386-linux-gnu/ld-2.13.so inita.sh 2971 lakshmanan 0u CHR 136,4 0t0 7 /dev/pts/4 inita.sh 2971 lakshmanan 1u CHR 136,4 0t0 7 /dev/pts/4 inita.sh 2971 lakshmanan 2u CHR 136,4 0t0 7 /dev/pts/4 inita.sh 2971 lakshmanan 10r REG 8,1 20 393578 /home/lakshmanan/inita.sh =======
Pada output di atas, selama 5 detik pertama, tidak ada output. Setelah itu skrip bernama "inita.sh" dimulai, dan menampilkan outputnya.
Menemukan Koneksi Jaringan
Koneksi jaringan juga file. Jadi kami dapat menemukan informasi tentang mereka dengan menggunakan lsof.
11. Daftar semua koneksi jaringan
Anda dapat membuat daftar semua koneksi jaringan yang dibuka dengan menggunakan opsi '-i'.
# lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME avahi-dae 515 avahi 13u IPv4 6848 0t0 UDP *:mdns avahi-dae 515 avahi 16u IPv6 6851 0t0 UDP *:52060 cupsd 1075 root 5u IPv6 22512 0t0 TCP ip6-localhost:ipp (LISTEN)
Anda juga dapat menggunakan '-i4' atau '-i6' untuk mendaftar masing-masing hanya 'IPV4' atau 'IPV6'.
12. Daftar semua file jaringan yang digunakan oleh proses tertentu
Anda dapat membuat daftar semua file jaringan yang sedang digunakan oleh suatu proses sebagai berikut
# lsof -i -a -p 234
Anda juga dapat menggunakan yang berikut
# lsof -i -a -c ssh
Perintah di atas akan mencantumkan file jaringan yang dibuka oleh proses yang dimulai dengan ssh.
13. Daftar proses yang mendengarkan pada port tertentu
Anda dapat membuat daftar proses yang mendengarkan pada port tertentu dengan menggunakan '-i' dengan ':' sebagai berikut
# lsof -i :25 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME exim4 2541 Debian-exim 3u IPv4 8677 TCP localhost:smtp (LISTEN)
14. Daftar semua koneksi TCP atau UDP
Anda dapat membuat daftar semua koneksi TCP atau UDP dengan menentukan protokol menggunakan '-i'.
# lsof -i tcp; lsof -i udp;
15. Daftar semua file Sistem File Jaringan ( NFS )
Anda dapat membuat daftar semua file NFS dengan menggunakan opsi '-N'. Perintah lsof berikut akan menampilkan semua file NFS yang digunakan oleh pengguna 'lakshmanan'.
# lsof -N -u lakshmanan -a