Solution 1 :
Je viens de parcourir quelques pages de manuel, il semble que vous utilisiez la commande :
sudo lsof /
Cela listera tous les fichiers ouverts dans le répertoire / , qui contient tout sur un système de fichiers Linux. Je viens de tester et il n'affiche que REG et DIR.
Plus d'exemples :
lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /
0-999 le limite aux fichiers avec un numéro de descripteur de fichier.
Solution 2 :
Il peut y avoir un commutateur, mais si cela ne vous dérange pas de le filtrer via grep, vous pouvez faire sudo lsof | egrep 'REG|DIR'
, en supposant que par "fichiers physiques", vous entendez des fichiers et des répertoires normaux.
Voir la section OUTPUT ::TYPE de la page de manuel man lsof
pour tous les types qui pourraient être dans cette colonne.
Solution 3 :
Voici ce que j'ai fait qui a parfaitement fonctionné pour moi :
lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u
Le -F n
option à lsof
le fera imprimer uniquement les noms des fichiers ouverts. Chaque ligne de sortie portant le nom d'un fichier ouvert commencera par le seul caractère n suivi immédiatement du nom . Normal files sera toujours le nom absolu et complet du fichier. Le grep ^n/
sélectionnera uniquement les lignes dont le nom commence par /
(c'est-à-dire un nom de fichier absolu et complet) ; éliminant ainsi des choses comme les ports ouverts, les sockets, les tuyaux (comme les FIFO), etc. Le cut -c2-
éliminera le premier caractère, le n
, ne laissant que le nom du fichier. Puis enfin, le sort -u
éliminera toutes les entrées en double.
Une mise en garde, cela inclura les fichiers qui ne sont pas réguliers tant que leur nom commence par un /
. Par exemple, tous les fichiers commençant par ce qui suit seraient inclus :
- /dev
- /proc
- /sys
Et il peut y en avoir d'autres selon votre système d'exploitation.