Gabay sa paggamit ng command na 'lsof' para sa isang proseso
Kung madalas kang gumagamit ng Linux o Unix system ay tiyak na narinig mo na ang pariralang, "Sa Linux, ang lahat ay isang file". Ito ay maaaring ikategorya bilang ang sobrang pagpapasimple ng konsepto ngunit ito ay nagpapatunay na napakalaking tulong upang maunawaan kung paano gumagana ang mga file sa Linux system.
Hindi lahat ng lumalabas sa kapaligiran ng Linux ay kailangang isang file. Minsan maaari itong isang proseso, maaari itong maging isang espesyal na file na kumakatawan sa impormasyon ng hardware, mga direktoryo, at iba pang mga bagay.
Gagabayan ka ng tutorial na ito sa paghahanap ng lahat ng mga file na bukas para sa isang partikular na proseso sa Linux.
Panimula sa lsof
Utos
Ang kagandahan ng sistema ng Linux ay maaari mong kontrolin at pamahalaan ang iyong buong system sa pamamagitan ng terminal, basta't alam mo nang mabuti ang mga utos. Kapag ang mga utos ay kilala at ang lahat ng mga gawain sa terminal ay magiging isang cakewalk.
lsof
ibig sabihin 'Listahan Ng Mga Bukas na File'. Kapag nalaman mo na ang mahabang bersyon ng command, magiging napakadali para sa iyo na maunawaan at gamitin ang command sa isang produktibong paraan.
Ang lsof
Ipinapakita ng command ang mga listahan ng mga bukas na file, socket, at pipe. Madali mong mahahanap ang mga bukas na file gamit ang command na ito. Kapag ang lsof
Ang command ay ginagamit nang walang anumang opsyon na ipinapakita nito ang lahat ng mga bukas na file na may paggalang sa mga aktibong proseso na tumatakbo.
Tandaan: Tiyaking ginagamit mo sudo
habang isinasagawa ang mga utos.
Gamit ang lsof
Utos
Pag-aaralan natin ang output ng lsof
utos nang detalyado. Pag-aralan ang sumusunod na utos.
sudo lsof | mas kaunti
Tandaan: Kung direkta nating patakbuhin ang lsof
command, ang output ay magiging napakalaki at maaaring lumikha ng kalituhan upang magpatuloy pa. Kaya, dito ko ginamit lsof | mas kaunti
utos para sa kaginhawaan ng tutorial.
Output:
gaurav@ubuntu:~$ sudo lsof | mas kaunting COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 root txt1 unknown /procnsd2 root DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt unknown /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 unknown /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 unknown /proc/34/exe
Ang mga sumusunod ay ang mga katangian na ipinapakita gamit ang lsof
utos.
Parameter | Paglalarawan |
---|---|
Utos | Ipinapakita ang pangalan ng command na nagbubukas ng file. |
PID | Process identifier number ng proseso na nagbubukas ng file. |
TID | Numero ng Thread Identifier. Maaari itong alinman sa isang thread o isang numero ng gawain. |
Gumagamit | User ID o pangalan ng user na may-ari ng proseso. |
FD | Ipinapakita ang file descriptor ng file. |
Uri | Uri ng node na nauugnay sa file. |
Device | Ipinapakita ang mga numero ng device. |
Laki/Naka-off | Ipinapakita ang laki ng file sa bytes. |
Node | Ipinapakita ang numero ng inode ang direktoryo o ang pangunahing direktoryo. |
Pangalan | Ipinapakita ang pangalan ng file system kung saan matatagpuan ang proseso. |
Paglilista ng Mga Proseso
Una at pinakamahalaga, mahalaga para sa iyo na makuha ang mga prosesong tumatakbo at ang kani-kanilang mga ID ng proseso. Nagbibigay ang Linux ng iba't ibang mga command upang ilista ang mga proseso kasama ang kanilang mga katangian tulad ng PID, user, direktoryo, atbp.
Maaari mong gamitin ang mga utos tulad ng itaas
, ps
, htop
, pstree
upang ilista ang mga proseso sa terminal.
Sa buong tutorial, gagamitin ko ang itaas
utos na gawin ito. Ang itaas
Ang command ay nagbibigay ng dynamic na real-time na view ng isang tumatakbong system. Ipinapakita rin nito ang lahat ng mga proseso at mga thread na kasalukuyang pinamamahalaan ng Linux kernel. Pag-aralan ang ibinigay na bloke sa ibaba upang suriin ang output ng itaas
utos.
Syntax:
sudo tuktok
Output:
gaurav@ubuntu:~$sudo top PID USER 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 87:48.07 Web 6 mong 2.2 08 . 34.41 mongod 13765 gaurav 20 0 2,931,568 131,408 47,496 S 5.9 3.3 1: 42.34 Web content 1 ugat 20 0 225,904 6824 4900 S 0.0 0.2 0: 27.25 systemd 2 ugat 20 0 0 0 0 S 0.0 0.0 0: 00,05 kthreadd 4 ugat 0 -20 . 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 migration/0
Sa block sa itaas, makikita natin ang lahat ng impormasyong nauugnay sa proseso sa isang lugar. Mula dito mahahanap natin ang PID
ng proseso kung saan kailangan nating ipakita ang mga bukas na file gamit ang lsof
utos.
Ngunit kung nais mong malaman ang proseso ID ng isang partikular na proseso lamang at maiwasan ang iba pang mga hindi gustong proseso, gamitin ang sumusunod na utos.
Syntax:
sudo tuktok | grep [Process_Name]
Halimbawa:
gaurav@ubuntu:~$ itaas | grep terminal 13,819 gaurav 20 0 803336 19728 9160 S 0.3 0.5 0: 53.63 gnome-terminal- 13,819 gaurav 20 0 803336 19728 9160 S 1.0 0.5 0: 53.66 gnome-terminal- 13,819 gaurav 20 0 803336 19728 9160 S 0.3 0.5 0: 53.67 gnome -terminal- gaurav@ubuntu:~$
Dito ay partikular naming ipinakita ang process ID ng proseso na mayroong string na 'terminal' sa pangalan ng proseso. Ang pamamaraang ito ay madaling gamitin kapag hindi mo alam ang kumpletong pangalan ng proseso o ang PID.
Ipinapakita ang Mga Bukas na File na Kaugnay ng Isang Proseso Gamit ang PID
Sa block sa itaas, natutunan namin kung paano makuha ang impormasyong nauugnay sa proseso sa tulong ng nangungunang command. Ngayon ay gagamitin natin ang PID
naaayon sa anumang proseso sa system at subukang ipakita ang listahan ng mga bukas na file na nauugnay sa prosesong iyon gamit ang lsof
utos.
Mula sa ibinigay na output sa itaas, gawin natin ang proseso na tumutugma sa PID 1173 na naka-highlight. Gagamitin natin ang lsof -p [PID]
utos na gawin ito.
Syntax:
sudo lsof -p [PID]
Kinukuha ng command na ito ang PID ng proseso bilang input at inililista ang lahat ng file na nauugnay sa PID na ito.
Output:
gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: BABALA: hindi ma-stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Maaaring hindi kumpleto ang impormasyon ng output. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb txt REG 8,848 9889989898999999999999999 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-3 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-linux-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/locale-archive 302 REG 8,8 3004224 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 lib/x86_64-linux-gnu/libpthread-2.27. 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.27. 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.1bcrypto.0 :~$
Ang mga file na bukas para sa proseso na may process ID 1713 ay ipinapakita gamit ang lsof
utos.
Tandaan: Maaaring makatagpo ng babala sa ibaba ang mga gumagamit ng GNOME. Maaari mong ligtas na huwag pansinin ito.
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Maaaring hindi kumpleto ang impormasyon ng output.
Paglilista ng Mga Bukas na File na Kaugnay sa Isang Proseso Gamit ang Pangalan ng Proseso
Ang lsof
Ang command ay nagbibigay din sa iyo ng opsyon na ilista ang mga bukas na file gamit ang mga pangalan ng mga proseso. Ang mga pangalan ay dapat ibigay sa command bilang isang input string. Tingnan ang syntax sa ibaba para magamit ang opsyong ito.
Syntax:
sudo lsof -c [Pangalan ng proseso]
Halimbawa:
sudo lsof -c mysql
Output:
gaurav@ubuntu:~$ sudo lsof -c mysql lsof: BABALA: hindi ma-stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Maaaring hindi kumpleto ang impormasyon ng output. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 128 mysqld DIR 8,8 128 4096 2 mysql rtd DIR 8,8 128 4096 /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] 2 mysql 18127 /[qldaio] 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_1846 mysql_files-2.2764,247 mysql67,2926 mysql67,2000,2000 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
Ang output ay magiging katulad ng sa isa kung saan ginagamit ang Process ID sa halip na ang pangalan ng Proseso.
Listahan ng mga file na Binuksan ng Network Connections
Sa Linux, ang mga file ay maaari ding nasa anyo ng impormasyon tungkol sa iyong mga koneksyon sa network, mga koneksyon sa hardware atbp. Magagamit namin lsof
command na ilista ang mga file na binuksan ng koneksyon sa network. Gamitin ang sumusunod na paraan.
sudo lsof -i
Output:
gaurav@ubuntu:~$ sudo lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-resolve 13uCP40 local: 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:mdns avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP *:mdns avahi-dae *1 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 281049 0t my IPv4 2810CP 0t my IPv6: 23813 0t0 UDP *:37512 mongod 1173 mongodb 6u IPv4 281049 my localhost mysql (LISTEN) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (LISTEN) gaurav@ubuntu:~$
Dito makikita natin ang impormasyon tungkol sa mga file na bukas ng koneksyon sa network gamit ang lsof -i
utos.
Konklusyon
Sa simpleng tutorial na ito, natutunan namin kung paano maglista ng mga bukas na file para sa isang proseso sa Linux gamit ang iba't ibang paraan na madaling gamitin. Para sa higit pang paggamit ng lsof
utos, tingnan ang lsof
pahina ng tao.