Cara Menyenaraikan Fail Terbuka Untuk Proses Di Linux

Panduan menggunakan arahan 'lsof' untuk sesuatu proses

Jika anda sering menggunakan sistem Linux atau Unix, anda pasti pernah mendengar frasa, "Dalam Linux, semuanya adalah fail". Ini mungkin dikategorikan sebagai terlalu menyederhanakan konsep namun ia terbukti sangat membantu untuk memahami cara fail dalam sistem Linux berfungsi.

Tidak semua yang muncul dalam persekitaran Linux mestilah fail. Kadangkala ia boleh menjadi satu proses, ia boleh menjadi fail khas yang mewakili maklumat perkakasan, direktori, dan perkara lain.

Tutorial ini akan memandu anda mencari semua fail yang terbuka untuk proses tertentu dalam Linux.

Pengenalan kepada lsof Perintah

Keindahan sistem Linux ialah anda boleh mengawal dan mengurus keseluruhan sistem anda melalui terminal, dengan syarat anda mengetahui arahan dengan baik. Setelah arahan diketahui maka semua tugas di terminal menjadi cakewalk.

lsof bermaksud 'Senarai Fail Terbuka'. Sebaik sahaja anda mengetahui versi panjang arahan itu, ia menjadi sangat mudah untuk anda memahami dan menggunakan arahan itu dengan cara yang produktif.

The lsof arahan memaparkan senarai fail terbuka, soket dan paip. Anda boleh mencari fail yang terbuka dengan mudah menggunakan arahan ini. Apabila lsof arahan digunakan tanpa sebarang pilihan ia memaparkan semua fail terbuka berkenaan dengan proses aktif yang sedang berjalan.

Nota: Pastikan anda menggunakan sudo semasa melaksanakan arahan.

Menggunakan lsof Perintah

Kami akan mengkaji output lsof perintah secara terperinci. Kaji perintah berikut.

sudo lsof | kurang

Nota: Jika kita terus menjalankan lsof perintah, output akan menjadi sangat besar dan mungkin menimbulkan kekeliruan untuk meneruskan lebih jauh. Oleh itu, di sini saya telah menggunakan lsof | kurang arahan untuk kemudahan tutorial.

Pengeluaran:

gaurav@ubuntu:~$ sudo lsof | kurang COMMAND PID TID PENGGUNA JENIS FD SAIZ PERANTI/NAMA NOD DIMATIKAN kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 root txt1/procw nets tidak diketahui DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt tidak diketahui /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks 33 root rtd 406, 8 / rcu_tasks 33 root txt tidak diketahui /proc/33/exe kauditd 34 root cwd DIR 8,8 4096 2 / kauditd 34 root rtd DIR 8,8 4096 2 / kauditd 34 root txt tidak diketahui /proc/34/exe 

Berikut adalah atribut yang dipaparkan menggunakan lsof perintah.

ParameterPenerangan
PerintahMenunjukkan nama arahan yang membuka fail.
PIDNombor pengecam proses bagi proses yang membuka fail.
TIDNombor Pengecam Benang. Ia boleh sama ada urutan atau nombor tugas.
penggunaID pengguna atau nama pengguna yang merupakan pemilik proses.
FDMenunjukkan deskriptor fail bagi fail.
taipJenis nod yang dikaitkan dengan fail.
PerantiMenunjukkan nombor peranti.
Saiz/MatiMenunjukkan saiz fail dalam bait.
nodMenunjukkan nombor inod direktori atau direktori induk.
namaMenunjukkan nama sistem fail di mana proses itu berada.

Menyenaraikan Proses

Pertama sekali adalah penting bagi anda untuk mendapatkan proses yang sedang berjalan dan ID proses masing-masing. Linux menyediakan pelbagai arahan untuk menyenaraikan proses bersama dengan atributnya seperti PID, pengguna, direktori, dll.

Anda boleh menggunakan arahan seperti atas, ps, htop, pstree untuk menyenaraikan proses pada terminal.

Sepanjang tutorial, saya akan menggunakan atas perintah untuk berbuat demikian. The atas arahan menyediakan paparan masa nyata dinamik bagi sistem yang sedang berjalan. Ia juga memaparkan semua proses dan utas yang sedang diuruskan oleh kernel Linux. Kaji blok yang diberikan di bawah untuk menyemak output atas perintah.

Sintaks:

sudo atas

Pengeluaran:

gaurav@ubuntu:~$sudo atas PENGGUNA PID PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2703 gaurav 20 0 4286124 1.142g 103584 R 88.2 30.5 %MEM TIME+ COMMAND 2703 gaurav 20 0 4286124 1.142g 103584 R 88.2 30.5 %MEM TIME+ COMMAND 2703 gaurav 20 0 4286124 1.142g 103584 R 88.2 30.5 87:48.07 Web6 8 2.07 87:48.08 Web 6 8 2 8 2 7 Kandungan 6 8 2 7 Web 6 . 34,41 mongod 13765 gaurav 20 0 2.931.568 131.408 47.496 S 5.9 3.3 1: 42.34 Kandungan web 1 akar 20 0 225.904 6824 4900 S 0.0 0.2 0: 27.25 systemd 2 akar 20 0 0 0 0 S 0.0 0.0 0: 00,05 KThreadd 4 akar 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H 6 punca 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 7 punca 20 0 0 0 0 S 0.0 0.0 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 7 punca 20 0 0 0 0 S 0.0 0.0 0 0 0:01 akar 0 0 I 0.0 0.0 0:22.32 rcu_sched 9 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh 10 root rt 0 0 0 0 S 0.0 0.0 0:03.13 migrasi/0 

Dalam blok di atas, kita boleh melihat semua maklumat berkaitan proses di satu tempat. Dari sini kita boleh mencari PID proses yang mana kita perlu memaparkan fail terbuka menggunakan lsof perintah.

Tetapi jika anda ingin mengetahui ID proses hanya proses tertentu dan mengelakkan proses lain yang tidak diingini, gunakan arahan berikut.

Sintaks:

sudo atas | grep [Process_Name]

Contoh:

gaurav@ubuntu:~$ atas | grep terminal 13819 gaurav 20 0 803.336 19.728 9160 S 0.3 0.5 0: 53,63 gnome-terminal- 13819 gaurav 20 0 803.336 19.728 9160 S 1.0 0.5 0: 53.66 gnome-terminal- 13819 gaurav 20 0 803.336 19.728 9160 S 0.3 0.5 0: 53,67 gnome -terminal- gaurav@ubuntu:~$

Di sini kami telah memaparkan secara khusus ID proses proses yang mempunyai rentetan 'terminal' dalam nama proses. Kaedah ini berguna apabila anda tidak mengetahui nama proses lengkap atau PID.

Memaparkan Fail Terbuka Berkaitan Dengan Proses Menggunakan PID

Dalam blok di atas, kami belajar cara mendapatkan maklumat berkaitan proses dengan bantuan arahan atas. Sekarang kita akan menggunakan PID sepadan dengan sebarang proses pada sistem dan cuba paparkan senarai fail terbuka yang berkaitan dengan proses itu menggunakan fail lsof perintah.

Daripada output yang diberikan di atas, mari kita ambil proses yang sepadan dengan PID 1173 yang diserlahkan. Kami akan menggunakan lsof -p [PID] perintah untuk berbuat demikian.

Sintaks:

sudo lsof -p [PID]

Perintah ini mengambil PID proses sebagai input dan menyenaraikan semua fail yang sepadan dengan PID ini.

Pengeluaran:

gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: AMARAN: tidak boleh stat() sistem fail fuse.gvfsd-fuse /run/user/1000/gvfs Maklumat output mungkin tidak lengkap. COMMAND PID PENGGUNA JENIS FD SAIZ PERANTI/NAMA NOD MATI mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb txt REG 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb txt REG 8,848 600000000 1173 mongodb mem REG 8,8 71776 2624380 /lib/x86_64-linux-gnu/libnss_myhostname.so.2 mongod 1173 mongodb mem REG 8,8 101168 2624643 /lib/libresolv_62. mem REG 8,8 26936 2624439 /lib/x86_64-linux-gnu/libnss_dns-2.27.so mongod 1173 mongodb mem REG 8,8 10160 2626002 /lib/x86_64-libnss_mnud1/libnss_gnud1. 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-2.27.so mongod 1173 mongodb mem REG 8,8 3004224 2909671 /usr/lib/locale/locale/locale mem-archive 303 REG 8,8 3004224 /usr/lib/locale/locale/locale173 8 mongodb1173 6 mongodb1173 8 mongodb1173 8 mongod lib/x86_64-linux-gnu/libc-2.27.so mongod 1173 mongodb mem REG 8,8 144976 2624627 /lib/x86_64-linux-gnu/libpthread-2.27.so mongod 1173 mongodb 11736 lib18,6 2.96 lib18 x86_64-linux-gnu/libgcc_s.so.1 mongod 1173 mongodb me m REG 8,8 1700792 2622735 /lib/x86_64-linux-gnu/libm-2.27.so mongod 1173 mongodb mem REG 8,8 14560 2621535 /lib/x86_64-linux-gnu/libd1 mongod. 8,8 31680 2624646 /lib/x86_64-linux-gnu/librt-2.27.so mongod 1173 mongodb mem REG 8,8 2357760 2890079 /usr/lib/x86_64-linux-gnu.0libucrypto.0 :~$

Fail yang dibuka untuk proses dengan ID proses 1713 dipaparkan menggunakan fail lsof perintah.

Nota: Pengguna GNOME mungkin menghadapi amaran di bawah. Anda boleh mengabaikannya dengan selamat.

lsof: AMARAN: tidak boleh stat() sistem fail fius.gvfsd-fuse /run/user/1000/gvfs Maklumat output mungkin tidak lengkap.

Menyenaraikan Fail Terbuka Berkaitan Dengan Proses Menggunakan Nama Proses

The lsof arahan juga memberi anda pilihan untuk menyenaraikan fail yang terbuka menggunakan nama proses. Nama harus diberikan kepada arahan sebagai rentetan input. Lihat sintaks di bawah untuk menggunakan pilihan ini.

Sintaks:

sudo lsof -c [Nama proses]

Contoh:

sudo lsof -c mysql

Pengeluaran:

gaurav@ubuntu:~$ sudo lsof -c mysql lsof: AMARAN: tidak boleh stat() sistem fail fuse.gvfsd-fuse /run/user/1000/gvfs Maklumat output mungkin tidak lengkap. COMMAND PID PENGGUNA JENIS FD PERANTI SAIZ/MATI NAMA NOD mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 1288 mysql rtd DIR 8,8 128 1818 mysqld 8,812 4096 mysqld /sbin/mysqld mysqld 1266 mysql mem REG 8,8 6288 5505444 /usr/lib/mysql/plugin/auth_socket.so mysqld 1266 mysql DEL REG 0,18 28127 /[qldaio] mysql aio] mysqld 1266 mysql DEL REG 0,18 28125 /[aio] mysqld 1266 mysql mem REG 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_1266 mysql mem REG 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_188 mysql 2.27 6,276 mysql2786 mysql2786 mysqld lib/x86_64-linux-gnu/libnss_nis-2.27.so mysqld 1266 mysql mem REG 8,8 39744 2624438 /lib/x86_64-linux-gnu/libnss_compat-2.27.so 

Output akan menjadi seperti output yang digunakan ID Proses dan bukannya nama Proses.

Menyenaraikan fail Dibuka Oleh Sambungan Rangkaian

Di Linux, fail juga boleh dalam bentuk maklumat tentang sambungan rangkaian anda, sambungan perkakasan dll. Kami boleh gunakan lsof arahan untuk menyenaraikan fail yang dibuka oleh sambungan rangkaian. Gunakan kaedah berikut.

sudo lsof -i

Pengeluaran:

gaurav@ubuntu:~$ sudo lsof -i COMMAND PID PENGGUNA JENIS FD PERANTI SAIZ/MATI NAMA NOD systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-resolve 13uCP8 localhost domain (LISTEN) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP *:mdns avahi-dae *1 avahi-dae *1 avahi-dae avahi-dae 1028 avahi 14u IPv4 23812 0t0 UDP *:58999 avahi-dae 1028 avahi 15u IPv6 23813 0t0 UDP *:37512 mongod 1173 mongodb 6u IPv4 2810149 my localhost 9t CP28149 my localhost mysql (LISTEN) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (LISTEN) gaurav@ubuntu:~$

Di sini kita boleh melihat maklumat tentang fail yang dibuka oleh sambungan rangkaian menggunakan lsof -i perintah.

Kesimpulan

Dalam tutorial mudah ini, kami telah mempelajari cara menyenaraikan fail terbuka untuk proses di Linux menggunakan pelbagai kaedah yang mudah digunakan. Untuk lebih banyak kegunaan lsof perintah, lihat lsof halaman lelaki.