Bagaimana cara mengetahui proses mana yang menggunakan file di Linux?

92

Saya mencoba menghapus file di Linux menggunakan rm -rf file_name, tetapi mendapat kesalahan:

rm: file_name not removed.  Text file busy

Bagaimana cara mengetahui proses mana yang menggunakan file ini?

khris
sumber

Jawaban:

137

Anda dapat menggunakan fuserperintah, seperti:

fuser file_name

Anda akan menerima daftar proses yang menggunakan file tersebut.

Anda dapat menggunakan flag yang berbeda dengannya, untuk menerima keluaran yang lebih detail.

Anda dapat menemukan info lebih lanjut di artikel Wikipedia fuser , atau di manhalaman.

jimm-cl
sumber
Saya mencoba ini: fuser -i / home / bin / lib. Tapi dapatkan ini: fuser: opsi ilegal - i / home / bin / lib: 27674t
khris
1
@khris, mungkin tidak semua fuserimplementasi sama, atau bekerja dengan cara yang sama. Meskipun -iditentukan dalam POSIX, implementasi tertentu yang Anda gunakan tidak selalu memiliki opsi yang sama seperti yang dijelaskan di artikel Wikipedia. Misalnya, saya menggunakan AIX sekarang, dan yang fusertersedia di sistem ini juga tidak memiliki -iopsi.
jimm-cl
Untuk beberapa alasan, keduanya fusertidak lsofbekerja untuk saya di tamu kotak virtual. Jawaban ini menyelamatkan saya.
kael
34

Jawaban @ jim benar - fuserapa yang Anda inginkan.

Selain itu (atau sebagai alternatif), Anda dapat menggunakan lsofuntuk mendapatkan lebih banyak informasi termasuk nama pengguna, jika Anda memerlukan izin (tanpa harus menjalankan perintah tambahan) untuk menghentikan proses. (Meskipun tentu saja, jika Anda ingin menghentikan proses, Anda fuserdapat melakukannya dengan -kopsi ini. Anda dapat fusermenggunakan sinyal lain dengan -sopsi - periksa halaman manual untuk detailnya.)

Misalnya, dengan tail -F /etc/passwdmenjalankan dalam satu jendela:

ghoti@pc:~$ lsof | grep passwd
tail      12470    ghoti    3r      REG  251,0     2037 51515911 /etc/passwd

Perhatikan bahwa Anda juga dapat menggunakan lsofuntuk mengetahui proses apa yang menggunakan soket tertentu. Alat yang sangat baik untuk dimiliki di gudang senjata Anda.

ghoti
sumber
bidang manakah yang merupakan PID?
nmz787
@ nmz787 - lsof | head -1untuk melihat semua header.
ghoti
@ nmz787 Bidang kedua adalah PID.
forthe
lsof | grep -E "PID|<your_process_name>"menampilkan baris pertama dan proses yang ingin Anda kueri.
Robin Hsu
-1
$ lsof | tree MyFold

Seperti yang ditunjukkan pada gambar terlampir:

masukkan deskripsi gambar di sini

Blunt Notion
sumber
1
Bagaimana cara kerjanya? Apakah treemembaca sesuatu dari stdin? Jika ya, apa hubungannya dengan masukan itu?
dyp
man lsof - menampilkan manual untuk perintah lsof, lsof - daftar file yang terbuka, daftar pada informasi file keluaran standar tentang file yang dibuka oleh proses dan hasilnya dapat dilihat dalam struktur pohon. Anda harus memeriksa apa yang jelas
Blunt Notion
Pertanyaan saya adalah tentang tree, bukan lsof. Sejauh yang saya mengerti, treetidak membaca dari input standar, oleh karena itu output lsofakan dibuang saat Anda menjalankan lsof | tree .... Jika itu benar, maka lsof | tree MyFoldsama dengan tree MyFold, yang hanya menampilkan isinya tetapi tidak file mana yang dibuka oleh suatu proses.
dyp