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 lsofuntuk 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 npilihan untuk lsofakan 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 -uakan 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.