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.
Parametre | Açıklama |
---|---|
Emretmek | Dosyayı açan komutun adını gösterir. |
PID | Dosyayı açan işlemin işlem tanımlayıcı numarası. |
TID | Konu 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ı. |
FD | Dosyanın dosya tanımlayıcısını gösterir. |
Tip | Dosyayla ilişkili düğüm türü. |
Cihaz | Cihaz numaralarını gösterir. |
Boyut/Kapalı | Dosyanın boyutunu bayt olarak gösterir. |
düğüm | Dizin 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ı.