Pengenalan kepada Lsof

Di Linux, banyak objek dianggap sebagai file, tidak kira sama ada objek itu sebenarnya fail, peranti, direktori, atau soket. Menyenaraikan fail adalah mudah, ada shell yang terpasang lsuntuk itu. Tetapi bagaimana jika pengguna ingin melihat fail mana yang sedang dibuka oleh proses pelayan web? Atau jika pengguna itu ingin mengetahui fail mana yang dibuka di direktori tertentu? Di situlah lsofbermulanya permainan. Bayangkan lsofsebagai lsdengan penambahan "fail terbuka".

Harap maklum bahawa walaupun BSD mempunyai utiliti yang berbeza untuk pekerjaan ini fstat, beberapa rasa Unix lain (misalnya, Solaris) juga ada lsof. Pilihan dan bendera berbeza di platform lain, serta tampilan output, tetapi secara amnya pengetahuan dalam artikel ini juga harus berlaku untuk mereka.

Pertama, mari kita lihat format lsofoutput dan bagaimana ia dibaca. Output biasa lsoftanpa parameter akan menyerupai yang berikut. Ini telah dipotong untuk dibaca.

COMMAND    PID  TID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
init         1            root  cwd       DIR              254,1      4096          2 /
init         1            root  rtd       DIR              254,1      4096          2 /
init         1            root  txt       REG              254,1     36992    7077928 /sbin/init
init         1            root  mem       REG              254,1     14768    7340043 /lib/x86_64-linux-gnu/libdl-2.13.so
init         1            root  mem       REG              254,1   1603600    7340040 /lib/x86_64-linux-gnu/libc-2.13.so
init         1            root  mem       REG              254,1    126232    7340078 /lib/x86_64-linux-gnu/libselinux.so.1
init         1            root  mem       REG              254,1    261184    7340083 /lib/x86_64-linux-gnu/libsepol.so.1
init         1            root  mem       REG              254,1    136936    7340037 /lib/x86_64-linux-gnu/ld-2.13.so
init         1            root   10u     FIFO               0,14       0t0       4781 /run/initctl

Lajur ini bermaksud yang berikut:

  • PERINTAH - Proses yang menjadi milik fail terbuka, dalam contoh ini semuanya berkaitan init.
  • PID - Nombor pengenalan proses bagi proses tersebut.
  • PENGGUNA - Pengguna yang menjalani proses. Kerana init, hampir selalu root.
  • FD - Penerangan fail, yang paling biasa:
    • cwd- Direktori kerja semasa (anda mungkin melihat kesamaan dengan pwdperintah yang mencetak direktori kerja semasa).
    • rtd - Direktori akar proses.
    • txt- A text file, ini boleh bermaksud fail konfigurasi yang berkaitan dengan proses atau "kod sumber" yang berkaitan dengan (atau milik) proses.
    • mem - Apa yang disebut "fail yang dipetakan memori", itu bermaksud segmen memori maya (baca: RAM) yang telah ditetapkan ke file.
    • Nombor - nombor mewakili deskriptor fail sebenar, watak selepas nombor adalah mod di mana fail dibuka:
    • r - Baca.
    • w - Tulis.
    • u - Baca dan tulis.
  • JENIS - Menentukan jenis fail sebenar, yang paling biasa adalah:
    • REG - Fail biasa.
    • DIR - Direktori.
    • FIFO - Pertama masuk, pertama keluar.
  • PERANTI - Sebilangan besar dan kecil peranti yang menyimpan fail.
  • SAIZ - Ukuran fail, dalam bait.
  • NODE - Nombor inode fail.
  • NAMA - Nama fail.

Ini mungkin sedikit membebankan buat masa ini, tetapi jika anda bekerja dengan lsofbeberapa kali, ia akan cepat tenggelam ke dalam otak anda.

Seperti yang disebutkan di atas, outputnya lsoftelah dipersingkat di sini. Tanpa sebarang hujah atau saringan, lsofmenghasilkan ratusan baris output yang hanya akan membuat anda bingung.

Terdapat dua pendekatan asas untuk menyelesaikan masalah itu:

  • Gunakan satu atau lebih lsofpilihan baris perintah untuk menyempitkan hasilnya.
  • Paip output melalui, sebagai contoh, grep.

Walaupun pilihan terakhir mungkin terdengar lebih selesa kerana anda tidak perlu menghafal lsofpilihan baris perintah, biasanya tidak fleksibel dan cekap, jadi kami akan tetap memilih yang pertama.

Mari kita bayangkan bahawa anda ingin membuka fail dengan editor teks kegemaran anda, dan bahawa editor teks memberitahu anda bahawa fail itu hanya dapat dibuka dalam mod baca sahaja kerana program lain sudah mengaksesnya. lsofakan membantu anda mengetahui siapa pelakunya:

lsof /path/to/your/file

Ini akan menghasilkan output yang serupa dengan ini:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
vim 2679 root    5w   REG  254,1   121525 6035622 /root/lsof.txt

Nampaknya, anda terlupa untuk menutup dan sesi yang lebih lama! Masalah yang sangat serupa berlaku semasa anda mencuba melepaskan bahagian NFS dan umountmemberitahu anda bahawa ia tidak boleh berlaku kerana masih ada yang mengakses folder yang dipasang. Sekali lagi, lsofdapat membantu anda mengenal pasti pelakunya:

lsof +D /path/to/your/directory/

Perhatikan garis miring, itu penting. Jika tidak, anda lsofakan bermaksud fail biasa. Jangan keliru +di depan bendera - lsofmempunyai begitu banyak pilihan baris perintah yang diperlukan +selain yang lebih umum -. Hasilnya akan seperti ini:

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
mocp    5637  music    4r   REG   0,19 10147719 102367344 /home/Music/RMS_GNU_SONG.ogg

Itu bermaksud bahawa proses mocp, dengan PID 5637, milik pengguna musictelah membuka fail yang disebut RMS_GNU_SONG.ogg. Namun, walaupun setelah menutup proses itu, masih ada masalah - kelantangan NFS tidak dapat dilepaskan.

lsofmempunyai -cbendera yang memaparkan fail yang membuka nama proses sewenang-wenangnya.

lsof -c mocp

Itu akan menghasilkan output seperti ini:

mocp    9383  music    4r   REG   0,19 10147719 102367344 /home/Music/ANOTHER_RMS_GNU_SONG.ogg

Dalam contoh ini, ada contoh lain yang mocpberjalan, yang menghalang anda melepaskan pemasangan bahagian. Setelah mematikan proses itu, anda ingin memastikan bahawa pengguna musictidak membuka fail berpotensi bermasalah yang lain. lsofmempunyai -ubendera untuk menunjukkan fail yang dibuka oleh pengguna tertentu. Ingat, fail tidak selalu hanya fail biasa di cakera keras anda!

lsof -u music

Anda juga boleh melepasi beberapa pengguna, dipisahkan dengan koma:

lsof -u music,moremusic

Yang penting komen ke atas tingkah laku lalai lsof: keputusan adalah OR berasaskan, yang bermakna bahawa anda akan melihat hasil fail dibuka oleh proses yang dimiliki oleh sama ada pengguna musicatau pengguna moremusic. Sekiranya anda ingin melihat proses pencocokan hasil yang dimiliki oleh kedua pengguna, maka anda harus melewati bendera -a:

lsof -au music, moremusic

Oleh kerana kedua-dua pengguna berada dalam kumpulan musicusers, maka anda juga boleh menyenaraikan fail berdasarkan kumpulan:

lsof -g musicusers

Anda juga boleh menggabungkan bendera baris arahan:

lsof -u music,moremusic -c mocp

or

lsof -u ^music +D /home/Music

Di baris terakhir, kami menambah bendera khas lain - ^, yang bermaksud NOT logik . Sekiranya output kosong setelah menjalankan perintah itu, kemungkinan penghapusan akan berjaya.

Dalam contoh sebelumnya, kebanyakan kami melihat fail biasa. Bagaimana dengan soket dan sambungan rangkaian?

Untuk menyenaraikan semua sambungan rangkaian semasa lsofmempunyai -ibendera:

lsof -i

Hasilnya kelihatan serupa dengan apa yang telah kita lihat setakat ini ...

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
owncloud  3509  myuser   25u  IPv4  44946      0t0  TCP strix.local:34217->myserver.vultr.com:https (ESTABLISHED)
firefox   3612  myuser   82u  IPv4  49663      0t0  TCP strix.local:43897->we-in-f100.1e100.net:https (ESTABLISHED)
ssh       3784  myuser    3u  IPv4  10437      0t0  TCP strix.local:51416->someserver.in:ssh (ESTABLISHED)
wget      4140  myuser    3w  IPv4  45586      0t0  TCP strix.local:54460->media.ccc.de:http (CLOSE_WAIT)

... kecuali satu perbezaan: bukannya nama fail atau direktori, lajur NAMEsekarang menunjukkan maklumat sambungan. Setiap sambungan terdiri daripada bahagian-bahagian berikut:

  • Protokol.
  • Nama hos tempatan.
  • Port sumber sambungan.
  • Nama DNS destinasi.
  • Pelabuhan destinasi.
  • Status sambungan.

Seperti banyak alat lain, anda boleh memilih untuk tidak menyelesaikan nama dan port DNS ( -ndan -P, masing-masing). Bendera -imengambil parameter tambahan. Anda boleh menentukan sama ada atau tidak untuk menunjukkan tcp, udpatau icmpsambungan atau pelabuhan tertentu:

lsof -i :25
or
lsof -i :smtp

Sekali lagi, parameter boleh digabungkan. Contoh berikut ...

lsof -i tcp:80

... hanya akan menunjukkan kepada anda sambungan TCP menggunakan port 80. Anda juga boleh menggabungkannya dengan pilihan yang sudah anda ketahui dari fail "klasik":

lsof -a -u httpd -i tcp

Ini akan menunjukkan kepada anda semua sambungan TCP yang dibuka oleh pengguna httpd. Perhatikan -abendera, yang mengubah tingkah laku lalai lsof(seperti yang disebutkan sebelumnya). Seperti kebanyakan alat baris perintah, anda boleh pergi jauh. Berikut ini hanya akan menunjukkan kepada anda sambungan TCP yang keadaannya "DITUBUHKAN":

lsof -i -s TCP:ESTABLISHED

Pada ketika ini, anda harus mempunyai pemahaman asas mengenai cara lsofkerjanya, bersama dengan beberapa kes penggunaan biasa. Untuk membaca lebih lanjut, lihat halaman utama lsofsistem anda.



Leave a Comment

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

6 Perkara Yang Sangat Menggila Tentang Nintendo Switch

6 Perkara Yang Sangat Menggila Tentang Nintendo Switch

Ramai daripada anda tahu Switch akan keluar pada Mac 2017 dan ciri baharunya. Bagi yang tidak tahu, kami telah menyediakan senarai ciri yang menjadikan 'Tukar' sebagai 'gajet yang mesti ada'.

Janji Teknologi Yang Masih Tidak Ditepati

Janji Teknologi Yang Masih Tidak Ditepati

Adakah anda menunggu gergasi teknologi memenuhi janji mereka? semak apa yang masih belum dihantar.

Fungsi Lapisan Seni Bina Rujukan Data Besar

Fungsi Lapisan Seni Bina Rujukan Data Besar

Baca blog untuk mengetahui lapisan berbeza dalam Seni Bina Data Besar dan fungsinya dengan cara yang paling mudah.

Bagaimana AI Boleh Mengambil Automasi Proses ke Tahap Seterusnya?

Bagaimana AI Boleh Mengambil Automasi Proses ke Tahap Seterusnya?

Baca ini untuk mengetahui cara Kecerdasan Buatan semakin popular di kalangan syarikat berskala kecil dan cara ia meningkatkan kebarangkalian untuk menjadikan mereka berkembang dan memberikan pesaing mereka kelebihan.

CAPTCHA: Berapa Lama Ia Boleh Kekal Sebagai Teknik Berdaya maju Untuk Perbezaan Manusia-AI?

CAPTCHA: Berapa Lama Ia Boleh Kekal Sebagai Teknik Berdaya maju Untuk Perbezaan Manusia-AI?

CAPTCHA telah menjadi agak sukar untuk diselesaikan oleh pengguna dalam beberapa tahun kebelakangan ini. Adakah ia dapat kekal berkesan dalam pengesanan spam dan bot pada masa hadapan?

Keunikan Teknologi: Masa Depan Tamadun Manusia yang Jauh?

Keunikan Teknologi: Masa Depan Tamadun Manusia yang Jauh?

Apabila Sains Berkembang pada kadar yang pantas, mengambil alih banyak usaha kita, risiko untuk menundukkan diri kita kepada Ketunggalan yang tidak dapat dijelaskan juga meningkat. Baca, apakah makna ketunggalan bagi kita.

Teleperubatan Dan Penjagaan Kesihatan Jauh: Masa Depan Ada Di Sini

Teleperubatan Dan Penjagaan Kesihatan Jauh: Masa Depan Ada Di Sini

Apakah teleperubatan, penjagaan kesihatan jauh dan impaknya kepada generasi akan datang? Adakah ia tempat yang baik atau tidak dalam situasi pandemik? Baca blog untuk mencari paparan!

Pernahkah Anda Terfikir Bagaimana Penggodam Mendapatkan Wang?

Pernahkah Anda Terfikir Bagaimana Penggodam Mendapatkan Wang?

Anda mungkin pernah mendengar bahawa penggodam memperoleh banyak wang, tetapi pernahkah anda terfikir bagaimana mereka memperoleh wang seperti itu? Mari berbincang.

Kemas Kini Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Isu Daripada Penyelesaian

Kemas Kini Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Isu Daripada Penyelesaian

Baru-baru ini Apple mengeluarkan macOS Catalina 10.15.4 kemas kini tambahan untuk menyelesaikan masalah tetapi nampaknya kemas kini itu menyebabkan lebih banyak masalah yang membawa kepada pemusnahan mesin mac. Baca artikel ini untuk mengetahui lebih lanjut