Question:
L'utilitaire "opensnoop" ne fonctionne pas avec des espaces entre les noms de fichiers, comment y remédier?
Bastian Gruber
2013-04-14 20:15:31 UTC
view on stackexchange narkive permalink

J'utilise "opensnoop"

/usr/bin/opensnoop

pour afficher tous les fichiers ouverts à partir de différents processus.

Mais quand je veux spécifier un fichier avec

  sudo opensnoop -n "répertoire / nom de fichier"  

je reçois cette erreur:

  jeton trop grand, dépasse YYLMAX  

Je cherche un correctif et je n'ai trouvé que ce site Web. L'auteur a modifié le script opensnoop:

cela est dû à la ligne 154 dans / usr / bin / opensnoop contenant la chaîne en ligne NAME = "'$ pname'"; qui produit un script dtrace avec cette chaîne en ligne entre guillemets NAME = "foo '' bar"; et le premier guillemet simple met fin à l'appel de dtrace en laissant son script d'entrée incomplet. Le correctif rapide consiste à remplacer la ligne 154 par la chaîne en ligne NAME = "'" $ pname "'";

mais je reçois toujours ce message d'erreur.

Quelqu'un peut-il m'aider? Ou dites-moi un autre utilitaire où je peux afficher l'application qui fonctionne actuellement avec un fichier spécifique?

`-n` est utilisé pour identifier le nom du processus à surveiller, pourquoi avez-vous besoin d'un chemin pour cela?
@patrix Par exemple, `sudo opensnoop -n System \ Preferences` imprime la même erreur, et -f ne fonctionne pas non plus avec les chemins qui ont des espaces.
Un répondre:
Lri
2013-04-14 21:39:01 UTC
view on stackexchange narkive permalink

-n est uniquement destiné à être utilisé avec des noms de processus tels que sudo opensnoop -n System \ Preferences . Pour voir quels processus accèdent à un fichier, utilisez sudo opensnoop -f / tmp / a \ b.txt .

Le changement mentionné dans le billet de blog corrige -n mais pas -f . Pour corriger les deux, éditez / usr / bin / opensnoop et remplacez ces lignes:

  inline string PATHNAME = "'$ pathname'"; inline string NAME = "'$ pname'";  

Avec ceci:

  chaîne en ligne PATHNAME = "'" $ chemin d'accès "'"; chaîne en ligne NAME = "' "$ pname" '";  
Merci! Mais, par exemple, lorsque j'ouvre une capture d'écran via Aperçu et opensoop -n "Capture d'écran", aucun processus n'est affiché. Ne devrait-il pas y avoir le «processus de prévisualisation»?
Vous êtes censé utiliser quelque chose comme `sudo opensnoop -f ~ / Pictures / Screenshot.png`.
Ahhh ... comme pourrais-je être stupide ... bien sûr! Merci beaucoup! RTFM ... :)


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...