GNU/Linux >> Belajar Linux >  >> Linux

lsof :Contoh yang paling umum digunakan

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.


Linux
  1. [Linux]:15 Perintah YUM yang paling sering digunakan dengan contoh

  2. Temukan N Kata Paling Sering Dalam Sebuah File?

  3. Contoh Perintah ekor Linux

  1. Perintah mv di Linux:7 Contoh Penting

  2. Tutorial Subversion:10 Perintah SVN yang Paling Banyak Digunakan dengan Contoh

  3. 25 Contoh Aturan IPTables Linux yang Paling Sering Digunakan

  1. 7 Contoh Perintah lsof di Linux

  2. ln Contoh Perintah di Linux

  3. File Contoh Perintah di Linux