J'essaye de tester un seul fichier s'il est ouvert en utilisant lsof. Y a-t-il un moyen plus rapide que cela? Je pense que leur doit être un moyen de tester un seul fichier si vous connaissez le nom de fichier. Tout ce dont j'ai vraiment besoin est vrai ou faux.Quel est le moyen le plus rapide d'utiliser lsof pour trouver un seul fichier ouvert?
Répondre
J'ai trouvé un bien meilleur moyen. Avec lsof (testé sur la version 4,63), vous pouvez interroger directement un fichier spécifique:
if lsof filename > /dev/null; then
# file is open
fi
Eh bien, vous pouvez sauter wc
et utiliser la valeur de retour de grep (grep retourne 0 (succès) si elle détecte le motif et 1 (non-succès) si elle ne détecte pas le motif):
if lsof | grep filename > /dev/null; then
# filename is in output of lsof
fi
Vous pouvez améliorer cela un peu en utilisant -l
drapeau grep:
if lsof | grep -l filename > /dev/null; then
...
cela dit grep d'arrêter de regarder une fois qu'il détecte est le premier match.
Utilisez fuser
. Il renvoie non-zéro si l'un des fichiers spécifiés est utilisé, et zéro s'ils sont tous disponibles.
Ne pas. La réponse peut changer au moment où vous essayez de faire quelque chose avec le résultat. Au lieu de cela, essayez de faire ce que vous avez l'intention de faire avec le fichier et de gérer l'erreur "en cours d'utilisation" ou "violation de partage".
Pour vous: +1, d'après ce que je vois, je pense que vous pourriez avoir raison. Bien que votre réponse ne répond pas spécifiquement à la question. – jjclarkson
Jared Parsons a un bon article sur pourquoi la question elle-même est fondamentalement défectueuse: http://blogs.msdn.com/jaredpar/archive/2009/12/10/the-file-system-is-unpredictable.aspx Dans de tels cas, il est préférable de ne pas répondre à la question qui a été posée, mais à la question qui aurait dû être posée. –
-1 pour plusieurs raisons. Premièrement, la réponse «ne pas» est * aussi * naïve et malavisée. Il existe plusieurs raisons légitimes de vouloir interroger directement si les fichiers sont ouverts ou si des verrous consultatifs sont conservés, tels que le débogage, la surveillance ou l'avertissement d'un utilisateur à l'avance qu'ils ne seront peut-être pas en mesure d'enregistrer leurs modifications. Deuxièmement, les pointeurs de fichiers sous Unix n'imposent aucun type de verrouillage par défaut; À moins que vous n'utilisiez explicitement 'flock' ou un autre mécanisme de verrouillage, vous n'obtiendrez * aucune * erreur de type" in use "ou" sharing violation "- vous vous contenterez d'amuser votre fichier. –
Si vous vous souciez vraiment du processus qui utilise le fichier, mieux vaut utiliser l'option '-m 1' pour grep afin d'obtenir la ligne correspondante au lieu du nom de fichier (stdin) dans lequel la correspondance a été trouvée. belle utilisation alternative de '-l'.) – Cascabel