Terdapat sejumlah proses yang berjalan dalam sistem sepanjang masa, mengakses fail sistem yang berbeza. File-file ini dapat berupa file disk, skrip, soket jaringan, perangkat, pipa bernama, dan lain-lain. Dengan menggunakan "lsof", melakukan banyak perkara, seperti melakukan debug. Ia juga berguna bagi pentadbir sistem untuk mengetahui fail apa yang sedang diakses dengan proses apa. Salah satu senario yang paling berguna yang saya dapati adalah ketika anda hendak melepaskan sistem fail tetapi masih diakses.
Tanpa basa-basi lagi, mari kita mulakan dengan "lsof"! Saya mengandaikan bahawa sistem UNIX / Linux anda sekarang sudah "lsof" terpasang.
Lokasi
yang mana
Ini melaporkan jalan lengkap perintah, dalam kes ini, "lsof".
Versi "lsof"lsof -v
Ini akan melaporkan maklumat versi mendalam tentang "lsof", termasuk tarikh pembuatan versi binari, penyusun, bendera penyusun dan lain-lain.
Penggunaan "lsof" asas
Jalankan "lsof" dengan sendirinya.
lsof
Ini melaporkan senarai BESAR dari semua fail yang sedang diakses oleh sistem pada saat menjalankan perintah.
Walaupun semua bidang cukup jelas, kebanyakannya keliru mengenai lajur "FD" dan "JENIS" dan nilainya. Mari kita periksa.
FD: Singkatan "Deskriptor Fail". Muncul dengan nilai-nilai berikut.
- cwd: Direktori kerja semasa
- rtd: Direktori root
- txt: Teks program (data, kod, dan lain-lain)
- mem: Fail yang dipetakan memori
- err: Ralat maklumat FD
- mmap: Peranti yang dipetakan memori
- ltx: Teks perpustakaan bersama (data dan kod)
- m86: Fail pemetaan gabungan DOS
Terdapat juga nilai lain yang akan anda perhatikan di lajur, seperti "1u" diikuti oleh u, r, w, dll. nilai. Apa maksudnya?
- r: Akses membaca
- w: Akses menulis
- u: Akses membaca dan menulis
- - : Mod tidak diketahui dan ia mengandungi watak kunci
- "Mode tidak diketahui dan tidak ada watak kunci
JENIS: Menjelaskan jenis fail dan pengenalannya. Nilai adalah seperti berikut.
- DIR: Direktori
- CHR: Fail khas watak
- REG: Fail biasa
- FIFO: Pertama masuk, keluar pertama
Fail dibuka khusus pengguna
Linux adalah platform berbilang pengguna yang cemerlang. Pelbagai pengguna dapat mengakses sistem pada masa yang sama dan melakukan operasi yang mereka izin.
Untuk memeriksa fail yang sedang diakses oleh pengguna tertentu, jalankan perintah berikut.
lsof -u
Namun, untuk memeriksa pengguna dengan pangkat yang lebih tinggi, "lsof" akan memerlukan hak istimewa "superuser".
sudo lsof -u
Bagaimana dengan memeriksa semua perintah dan file yang diakses oleh pengguna tertentu? Jalankan yang berikut.
lsof -i -u
Sekali lagi, untuk pengguna dengan pangkat yang lebih tinggi, "lsof" akan memerlukan hak istimewa "superuser".
sudo lsof -i -u
Proses berjalan khusus pelabuhan
Untuk mengetahui semua proses yang saat ini menggunakan port tertentu, panggil "lsof" dengan bendera "-i" diikuti dengan protokol dan informasi port.
lsof -i<46>:
Sebagai contoh, untuk memeriksa semua program yang sedang mengakses port 80 melalui protokol TCP / IP, jalankan perintah berikut.
lsof -i TCP: 80
Kaedah ini juga dapat digunakan untuk menunjukkan semua proses yang menggunakan port dalam julat tertentu, misalnya, 1 hingga 1000. Struktur arahannya serupa dengan sebelumnya dengan sedikit sihir pada bahagian nombor port.
lsof -i TCP: 1-1000
Proses khusus protokol
Berikut adalah 2 contoh yang menunjukkan proses yang sedang menggunakan protokol IPv4 dan IPv6.
lsof -i 4lsof -i 6
Menyenaraikan sambungan rangkaian
Perintah berikut akan melaporkan semua sambungan rangkaian dari sistem semasa.
lsof -i
Tidak termasuk dengan ^
Ya, kita boleh mengecualikan pengguna, port, FD dan yang lain menggunakan watak "^". Yang harus anda lakukan adalah menggunakannya dengan berhati-hati agar anda tidak merosakkan keseluruhan output.
Dalam contoh ini, mari kita kecualikan semua proses dari "root" pengguna.
akar lsof -u ^
Terdapat cara lain untuk menggunakan mekanisme pengecualian ini dengan "lsof", misalnya, dengan bendera seperti "-c", "-d" dll. Tidak semua bendera menyokong mekanisme ini. Itulah sebabnya saya mengesyorkan mencuba demo dengan kaedah ini dengan sebarang bendera sebelum menerapkannya ke dalam beberapa skrip.
Pencarian PID
PID adalah harta penting bagi setiap proses yang berjalan pada sistem. Ia membolehkan penunjuk yang lebih baik pada proses tertentu. Nama proses tidak begitu berguna dalam banyak keadaan kerana binari yang sama dapat membuat salinannya sendiri dan melakukan tugas yang berbeza secara selari.
Sekiranya anda tidak tahu cara mendapatkan PID suatu proses, cukup gunakan "ps" untuk menyenaraikan semua proses yang sedang berjalan dan saring output menggunakan "grep" dengan nama proses dan / atau perintah.
ps -A
Sekarang, lakukan penapisan menggunakan "grep".
ps -A | grep
Sekarang, periksa fail apa yang diakses oleh PID.
lsof -pMenyenaraikan fail terbuka untuk peranti tertentu
Fungsi "lsof" tidak hanya terhad pada fungsi ini. Anda juga boleh menyaring hasil "lsof" berdasarkan peranti juga. Untuk tujuan ini, arahan akan kelihatan seperti ini.
lsof
Perintah ini sangat berguna untuk mengetahui semua proses yang sedang berjalan dengan maklumat pemiliknya mengakses sistem fail tertentu. Sekiranya anda menghadapi masalah melepaskan sistem fail, ini adalah kaedah terbaik.
lsofSenaraikan fail yang dibuka di bawah direktori
Sama seperti contoh sebelumnya, cukup lulus jalur direktori ke "lsof" untuk mengetahui apakah ada proses yang mengaksesnya.
Catatan: "lsof" akan memeriksa direktori secara berulang, sehingga memerlukan masa.
= lsof + D
Bonus: menghentikan semua aktiviti pengguna
Berhati-hati dengan bahagian ini kerana ia hanya boleh merosakkan semua yang dilakukan pengguna. Perintah berikut akan membunuh semua proses pengguna yang sedang berjalan.
sudo kill -9 'lsof -t -uCiri-ciri "lsof" tidak hanya berhenti di sini. Yang disebutkan di sini adalah yang paling kita perlukan setiap hari. Terdapat banyak fungsi lain dari "lsof" yang boleh berguna (dalam kes tertentu, tentu saja).
Untuk semua ciri yang ada dan penggunaannya, periksa halaman lelaki dan maklumat "lsof".
lelaki lsofmaklumat lsof
lsof -?
Nikmati!