Linux'ta Bir İşlem İçin Açık Dosyalar Nasıl Listelenir

Bir işlem için 'lsof' komutunu kullanma kılavuzu

Linux veya Unix sistemlerini sık kullanan biriyseniz, “Linux'ta her şey bir dosyadır” ifadesini mutlaka duymuşsunuzdur. Bu, kavramın aşırı basitleştirilmesi olarak kategorize edilebilir, ancak Linux sistemindeki dosyaların nasıl çalıştığını anlamak için çok yardımcı olduğunu kanıtlıyor.

Linux ortamında görünen her şey bir dosya olmak zorunda değildir. Bazen bir süreç olabilir, donanım bilgilerini, dizinleri ve diğer şeyleri temsil eden özel bir dosya olabilir.

Bu eğitim, Linux'ta belirli bir işlem için açık olan tüm dosyaları bulma konusunda size yol gösterecektir.

Giriş lsof Emretmek

Linux sisteminin güzelliği, komutları iyi bilmek şartıyla tüm sisteminizi terminal üzerinden kontrol edip yönetebilmenizdir. Komutlar bir kez bilindiğinde, terminaldeki tüm görevler bir engel haline gelir.

lsof anlamına gelirAçık Dosyaların Listesi'. Komutun uzun versiyonunu öğrendikten sonra, komutu anlamanız ve verimli bir şekilde kullanmanız çok kolay hale geliyor.

bu lsof komutu, açık dosyaların, yuvaların ve boruların listelerini görüntüler. Bu komutu kullanarak açık dosyaları kolayca arayabilirsiniz. Ne zaman lsof komutu herhangi bir seçenek olmadan kullanıldığında, çalışan aktif işlemlere göre tüm açık dosyaları görüntüler.

Not: kullandığınızdan emin olun sudo komutları yürütürken.

Kullanmak lsof Emretmek

çıktısını inceleyeceğiz. lsof ayrıntılı olarak komut verin. Aşağıdaki komutu inceleyin.

sudo lsof | az

Not: doğrudan çalıştırırsak lsof komut, çıktı çok büyük olacak ve daha fazla ilerlemek için kafa karışıklığı yaratabilir. Bu nedenle, burada kullandım lsof | az öğreticinin rahatlığı için komut.

Çıktı:

gaurav@ubuntu:~$ sudo lsof | daha az KOMUT PID TID KULLANICI FD TİPİ CİHAZ BOYUTU/KAPALI DÜĞÜM ADI kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 root txt bilinmiyor /proc/31/exe cwdns DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt bilinmiyor /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks 33 root rtd DIR 8,8 4096 2 / rcu_tasks 33 root txt bilinmiyor /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 bilinmiyor /proc/34/exe 

kullanılarak görüntülenen öznitelikler aşağıdadır: lsof emretmek.

ParametreAçıklama
EmretmekDosyayı açan komutun adını gösterir.
PIDDosyayı açan işlemin işlem tanımlayıcı numarası.
TIDKonu Tanımlayıcı numarası. Bir iş parçacığı veya görev numarası olabilir.
kullanıcıKullanıcı kimliği veya işlemin sahibi olan kullanıcının adı.
FDDosyanın dosya tanımlayıcısını gösterir.
TipDosyayla ilişkili düğüm türü.
CihazCihaz numaralarını gösterir.
Boyut/KapalıDosyanın boyutunu bayt olarak gösterir.
düğümDizin veya üst dizini inode numarasını gösterir.
İsimİşlemin bulunduğu dosya sisteminin adını gösterir.

Süreçleri Listeleme

Her şeyden önce, çalışmakta olan süreçleri ve ilgili süreç kimliklerini elde etmeniz önemlidir. Linux, süreçleri PID, kullanıcı, dizin vb. öznitelikleriyle birlikte listelemek için çeşitli komutlar sağlar.

gibi komutları kullanabilirsiniz. Tepe, ps, htop, ağaç terminaldeki işlemleri listelemek için.

Eğitim boyunca, Tepe yapmak için komut verin. bu Tepe komutu, çalışan bir sistemin dinamik gerçek zamanlı görünümünü sağlar. Ayrıca şu anda Linux çekirdeği tarafından yönetilen tüm süreçleri ve iş parçacıklarını da görüntüler. Çıktısını kontrol etmek için aşağıda verilen bloğu inceleyin. Tepe emretmek.

Sözdizimi:

sudo üst

Çıktı:

gaurav@ubuntu:~$sudo üst PID KULLANICI PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2703 gaurav 20 0 4286124 1.142g 103584 R 88.2 30.5 87:48.08 Web İçeriği 1173 mongodb 20 0 288536 6776 3428 S 5.9 0.2 2: 34.41 mongod 13765 gaurav 20 0 2931568 131408 47496 S 5.9 3.3 1:42.34 Web İçeriği 1 kök 20 0 225904 6824 4900 S 0.0 0.2 0:27.25 sistemd 2 kök 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd 4 kök 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H 6 kök 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 7 kök 20 0 0 0 0 S 0.0 0.0 0:01.89 ksoftirqd/0 8 kök 20 0 0 0 0 I 0.0 0.0 0:22.32 rcu_sched 9 kök 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh 10 kök rt 0 0 0 0 S 0.0 0.0 0:03.13 geçiş/0 

Yukarıdaki blokta, süreçle ilgili tüm bilgileri tek bir yerde görebiliriz. Buradan bulabiliriz PID kullanarak açık dosyaları görüntülememiz gereken sürecin lsof emretmek.

Ancak, yalnızca belirli bir işlemin işlem kimliğini öğrenmek ve diğer istenmeyen işlemlerden kaçınmak istiyorsanız, aşağıdaki komutu kullanın.

Sözdizimi:

sudo üst | grep [İşlem_Adı]

Örnek:

gaurav@ubuntu:~$ üst | grep terminali 13819 gaurav 20 0 803336 19728 9160 S 0.3 0.5 0:53.63 gnome-terminal- 13819 gaurav 20 0 803336 19728 9160 S 1.0 0.5 0:53.66 gnome-terminal- 13819 gaurav 20 0 803336 19728 9160 S 0.3 0.5 0:53.67 gnome -terminal- gaurav@ubuntu:~$

Burada, işlem adında 'terminal' dizesine sahip işlemin işlem kimliğini özellikle gösterdik. Bu yöntem, tam işlem adının veya PID'nin farkında olmadığınızda kullanışlı olur.

PID Kullanan Bir İşlemle İlgili Açık Dosyaları Görüntüleme

Yukarıdaki blokta, top komutu yardımı ile proses ile ilgili bilgilerin nasıl elde edileceğini öğrendik. Şimdi kullanacağız PID sistemdeki herhangi bir işleme karşılık gelen ve bu işlemle ilgili açık dosyaların listesini aşağıdakileri kullanarak görüntülemeye çalışın. lsof emretmek.

Yukarıda verilen çıktıdan, vurgulanan PID 1173'e karşılık gelen işlemi alalım. kullanacağız lsof -p [PID] yapmak için komut verin.

Sözdizimi:

sudo lsof -p [PID]

Bu komut, işlemin PID'sini girdi olarak alır ve bu PID'ye karşılık gelen tüm dosyaları listeler.

Çıktı:

gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: UYARI: can't stat() fuse.gvfsd-fuse dosya sistemi /run/user/1000/gvfs Çıktı bilgileri eksik olabilir. KOMUT PID KULLANICI FD TİPİ CİHAZ BOYUTU/KAPALI DÜĞÜM ADI 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 38379496 2885608 /mongodb/mongodb 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/x86_64-linux-gnu/libresolv-2.27.so mongod 1173 mongod 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-gnu/libnss_mdns4_minimal.so.2 mongod me 1173 mongodb 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-archive mongod 1173 mongodb mem REG 8,8 2030544 2621501 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 mem REG 8,8 96616 2624649 /lib/ x86_64-linux-gnu/libgcc_s.so.1 mongod 1173 mongodb beni 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/libdl-2.27.so mongod 1173 mongodb mem REG 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/libcrypto.so.1.0.0 gaurav@ubuntu :~$

İşlem kimliği 1713 olan işlem için açık olan dosyalar, lsof emretmek.

Not: GNOME kullanıcıları aşağıdaki uyarı ile karşılaşabilir. Güvenle görmezden gelebilirsiniz.

lsof: UYARI: can't stat() fuse.gvfsd-fuse dosya sistemi /run/user/1000/gvfs Çıktı bilgileri eksik olabilir.

İşlem Adını Kullanarak Bir İşlemle İlgili Açık Dosyaları Listeleme

bu lsof komutu ayrıca, işlemlerin adlarını kullanarak açık dosyaları listeleme seçeneği sunar. Adlar, komuta bir giriş dizesi olarak sağlanmalıdır. Bu seçeneği kullanmak için aşağıdaki sözdizimine bakın.

Sözdizimi:

sudo lsof -c [İşlem adı]

Örnek:

sudo lsof -c mysql

Çıktı:

gaurav@ubuntu:~$ sudo lsof -c mysql lsof: UYARI: can't stat() fuse.gvfsd-fuse dosya sistemi /run/user/1000/gvfs Çıktı bilgileri eksik olabilir. KOMUT PID KULLANICI FD TİPİ CİHAZ BOYUT/KAPALI DÜĞÜM ADI mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 4096 2 / mysqld 1266 mysql txt REG 8,8 24691368 2889411 /usr /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 /[aio] mysqld 1266 mysql DEL REG 0,18 28126 /[ 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_files-2.27.so mysqld 1266 mysql mem REG 8,8 47576 2624592 / 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 

Çıktı, İşlem adı yerine İşlem Kimliğinin kullanıldığı gibi olacaktır.

Ağ Bağlantıları Tarafından Açılan Dosyaları Listeleme

Linux'ta dosyalar ağ bağlantılarınız, donanım bağlantılarınız vb. hakkında bilgi şeklinde de olabilir. lsof ağ bağlantısı tarafından açılan dosyaları listeleme komutu. Aşağıdaki yöntemi kullanın.

sudo lsof -i

Çıktı:

gaurav@ubuntu:~$ sudo lsof -i KOMUT PID KULLANICI FD TÜRÜ CİHAZ BOYUTU/KAPALI DÜĞÜM ADI systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-resolve 13u IPv4 17358 0t0 TCP localhost: etki alanı (DİNLE) 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 1028 avahi 13u IPv6 U 23811*: 0 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 28149 0t0 TCP localhost:27017 (DİNLE) mysqld 1266 TCP 25 local 19u IPt0 mysql (DİNLEME) apache2 1283 kök 4u IPv6 28140 0t0 TCP *:http (DİNLEME) gaurav@ubuntu:~$

Burada ağ bağlantısı ile açılan dosyalar hakkındaki bilgileri şu adresten görebiliriz: lsof -i emretmek.

Çözüm

Bu basit öğreticide, kullanımı kolay çeşitli yöntemler kullanarak Linux'ta bir işlem için açık dosyaların nasıl listeleneceğini öğrendik. Daha fazla kullanım için lsof komutu, bkz. lsof adam sayfası.