Solusi 1:
Baru saja melihat-lihat beberapa halaman manual, tampaknya Anda menggunakan perintah:
sudo lsof /
Ini akan mencantumkan semua file yang terbuka di direktori /, yang semuanya ada di sistem file Linux. Baru diuji dan hanya menampilkan 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.
Solusi 2:
Mungkin ada tombol, tetapi jika Anda tidak keberatan memfilternya melalui grep, Anda dapat melakukan 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 tersebut.
Solusi 3:
Inilah yang saya lakukan yang bekerja dengan sempurna untuk saya:
lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u
-F n
pilihan untuk lsof
akan menyebabkannya hanya mencetak nama dari file yang terbuka. Setiap baris keluaran yang memiliki nama file terbuka akan dimulai dengan karakter tunggal n diikuti langsung oleh nama . Biasa file akan selalu menjadi nama file yang mutlak dan sepenuhnya memenuhi syarat. grep ^n/
akan memilih hanya baris dengan nama yang dimulai dengan /
(artinya nama file yang mutlak dan memenuhi syarat); sehingga menghilangkan hal-hal seperti port terbuka, soket, pipa (seperti FIFO), dll. cut -c2-
akan menghilangkan karakter pertama, n
, hanya menyisakan nama file. Lalu terakhir, sort -u
akan menghilangkan entri duplikat.
Satu peringatan, ini akan menyertakan file yang tidak biasa asalkan namanya diawali dengan /
. Misalnya, semua file yang dimulai dengan berikut ini akan disertakan:
- /dev
- /proc
- /sys
Dan mungkin ada yang lain tergantung pada OS Anda.