8 votes

Les fichiers temporaires listés par lsof n'existent pas

J'aime copier des vidéos flash pour les visionner hors ligne plus tard. Pour ce faire, je chargeais la vidéo dans le navigateur (Firefox ou Google Chrome), puis je lançais cette commande pour voir où le fichier flash était mis en cache :

lsof | grep ^Google | grep folders

Cela affichera tous les fichiers temporaires que Google Chrome a ouverts en ce moment, par exemple :

...
Google    311 mike   21u     REG       14,1    262148 17819373 /private/var/folders/zz/zzTLi2haPMrCYxEbpkwFmS+++TI/-Tmp-/.com.google.chrome.p22bCa
Google    311 mike   22u     REG       14,1      9974 17819369 /private/var/folders/zz/zzTLi2haPMrCYxEbpkwFmS+++TI/-Tmp-/.com.google.chrome.MUo4JT
Google    312 mike  txt      REG       14,1      9974 17819369 /private/var/folders/zz/zzTLi2haPMrCYxEbpkwFmS+++TI/-Tmp-/.com.google.chrome.MUo4JT
Google    312 mike  txt      REG       14,1    262148 17819373 /private/var/folders/zz/zzTLi2haPMrCYxEbpkwFmS+++TI/-Tmp-/.com.google.chrome.p22bCa
... etc

Cependant, aucun de ces fichiers n'existe :

$ ls /private/var/folders/zz/zzTLi2haPMrCYxEbpkwFmS+++TI/-Tmp-/.com.google.chrome.p22bCa
ls: /private/var/folders/zz/zzTLi2haPMrCYxEbpkwFmS+++TI/-Tmp-/.com.google.chrome.p22bCa: No such file or directory

L'énumération du répertoire ne fait apparaître aucun fichier ou répertoire de ce type :

$ ls -lA /private/var/folders/zz/zzTLi2haPMrCYxEbpkwFmS+++TI/-Tmp-/
total 0
drwxr-xr-x  3 mike  staff  102 Jul 24 18:14 TemporaryItems
srwxr-xr-x  1 mike  staff    0 Jul 24 12:10 com.apple.notify.206.32
srwxr-xr-x  1 mike  staff    0 Jul 24 12:10 com.apple.notify.206.33
drwxr-xr-x  2 mike  staff   68 Jul 24 18:25 hsperfdata_mike

Que se passe-t-il ici ? Pourquoi ne puis-je pas accéder aux fichiers temporaires ?

Puisque mon objectif est de copier le fichier flash pour le visionner ultérieurement, y a-t-il autre chose que je puisse faire ?

11voto

staffan Points 3299

Sur certaines variantes d'Unix, lsof affiche les fichiers qui ont été supprimés mais qui sont encore ouverts. Plus précisément, ces fichiers ont un "nombre de liens" de 0, ce qui signifie qu'il n'y a pas d'entrée de répertoire (pas de lien, c'est-à-dire pas de nom) qui mène à eux, mais que les données du fichier existent toujours. Les données du fichier seront supprimées lorsque le fichier sera fermé.

La capacité de lsof pour afficher les fichiers dont le nombre de liens est égal à 0 dépend de la plate-forme, et je ne trouve rien dans le manuel de l la documentation concernant la situation sous OS X. Essayez de lancer lsof +L pour voir le nombre de liens des fichiers, ou lsof +L1 pour ne lister que les fichiers dont le nombre de liens est égal à 0.

Je ne serais pas surpris que le plugin flash ait créé le fichier et l'ait immédiatement supprimé, c'est une technique simple pour rendre les données plus difficiles à obtenir de l'extérieur de l'application. En d'autres termes, c'est ce que l'auteur du plugin ferait précisément pour rendre difficile ce que vous essayez de faire. Si c'est ce qui se passe, vous pourriez le contrer avec quelque chose comme libtrash pour OSX .

4voto

Graham Perrin Points 7373

Lsof sans sudo peut ne pas lister tous les fichiers ouverts

Règle générale :

  • pour garantir des résultats complets de lsof , utiliser sudo

Exemple

Exécutez les deux commandes ci-dessous. Observez les différences de résultats. Avec des privilèges, attendez-vous à trouver beaucoup plus de lignes.

Sans privilèges de superutilisateur

lsof / | grep root

Résultat :

COMMAND     PID      USER   FD   TYPE DEVICE   SIZE/OFF       NODE NAME
Spotlight   325 user_name_here  txt    REG    1,5     257996 8609539837 /System/Library/PrivateFrameworks/NLP.framework/Versions/A/Resources/root.cache

Avec des privilèges

sudo lsof / | grep root

Résultat :

Password:
COMMAND     PID      USER   FD   TYPE DEVICE   SIZE/OFF       NODE NAME
launchd       1               root  cwd    DIR    1,5        928          2 /
launchd       1               root  txt    REG    1,5     345584 8624629318 /sbin/launchd
launchd       1               root  txt    REG    1,5     973824 8624630575 /usr/lib/dyld
launchd       1               root   44r   REG    1,5        358 8609644469 /private/etc/security/audit_control
launchd       1               root   46r   REG    1,5        652 8609644467 /private/etc/security/audit_class
UserEvent    60               root  cwd    DIR    1,5        928          2 /
UserEvent    60               root  txt    REG    1,5      35184 8624631345 /usr/libexec/UserEventAgent
... ...

0voto

Digitalchild Points 3585

Avez-vous essayé de mettre le chemin entre guillemets ?

Comme ceci :

$ ls "/private/var/folders/zz/zzTLi2haPMrCYxEbpkwFmS+++TI/-Tmp-/.com.google.chrome.p22bCa"

-1voto

surez Points 11

Essayez ceci :

cp /proc/$pid$/fd/$fdid$

Où ?

  • $pid$ - Identifiant du processus
  • $fdid$ - Identifiant du descripteur de fichier

Les identifiants de processus sont généralement les suivants 4 digit chiffres. Les descripteurs de fichiers sont généralement accompagnés d'une lettre ( r , u , w etc.)

Prenons l'exemple suivant :

Google    311 mike   22u     REG       14,1      9974 17819369 /private/var/folders/z...

Remplacer $pid$ avec 311 et $fdid$ avec 22 pour que vous obteniez :

cp /proc/311/fd/22

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X