Bagaimana saya memberi tahu jika saya hanya perlu mendaftarkan file fisik (bukan soket, bukan koneksi TCP / IP, hanya file fisik)?
Bagaimana saya memberi tahu jika saya hanya perlu mendaftarkan file fisik (bukan soket, bukan koneksi TCP / IP, hanya file fisik)?
Jawaban:
Hanya melihat melalui beberapa halaman manual, tampaknya Anda menggunakan perintah:
sudo lsof /
Ini akan mencantumkan semua file yang terbuka di direktori /, yang merupakan segalanya pada sistem file Linux. Baru diuji dan hanya menunjukkan REG dan DIR.
Lebih banyak contoh:
lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /
0-999 membatasinya ke file dengan nomor deskriptor file.
/
Mungkin ada saklar, tetapi jika Anda tidak keberatan memfilternya melalui grep, Anda bisa melakukannya sudo lsof | egrep 'REG|DIR'
, dengan asumsi "file fisik" yang Anda maksud adalah file dan direktori biasa.
Lihat bagian OUTPUT :: TYPE dari halaman manual man lsof
untuk semua jenis yang mungkin ada di kolom itu.
Inilah yang saya lakukan yang bekerja dengan sempurna untuk saya:
lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u
The -F n
pilihan untuk lsof
akan menyebabkan ia hanya mencetak nama-nama file yang terbuka. Setiap baris output yang memiliki nama file terbuka akan mulai dengan karakter tunggal n diikuti segera oleh namanya . File biasa akan selalu menjadi nama absolut dan berkualifikasi penuh dari file tersebut. Hanya grep ^n/
akan memilih baris-baris dengan nama yang dimulai dengan /
(yang berarti nama file absolut yang memenuhi syarat); sehingga menghilangkan hal-hal seperti port terbuka, soket, pipa (seperti FIFO), dll. Ini cut -c2-
akan menghilangkan karakter pertama, yaitu n
, hanya menyisakan nama file. Kemudian akhirnya, sort -u
akan menghilangkan entri duplikat.
Satu peringatan, ini akan mencakup file yang tidak teratur selama nama mereka dimulai dengan a /
. Misalnya, semua file yang dimulai dengan yang berikut ini akan disertakan:
Dan mungkin ada orang lain tergantung pada OS Anda.