J'ai besoin de sudo comme utilisé différent afin d'exécuter une certaine commande. J'essaie d'utiliser la strace avec elle et de rediriger la sortie de cela dans un fichier pour une analyse ultérieure. La partie délicate est que, comme l'utilisateur sudo'ed, je n'ai pas d'autorisations pour écrire à l'emplacement, je souhaite enregistrer mon fichier dans. (Et sans sudo, je n'ai pas la permission d'exécuter cette commande pour commencer) . p>
Alors, comment puis-je exécuter ma commande comme utilisateur A et rediriger sa sortie comme utilisateur B? p>
4 Réponses :
Vous pouvez utiliser tee code> pour cela. Le programme lit
stdin code> et écrit l'entrée sur un ou plusieurs fichiers ainsi que STDOUT:
sudo command | sudo tee output.txt > /dev/null
sudo -u A command | sudo -u B tee output.txt > /dev/null
Peut-être pas pertinent pour la réponse, mais j'ai juste besoin de l'exécuter: echo "le contenu du texte" | SUDO -UN Developer Tee Sortie.txt
Essayez avec: p>
De cette façon, vous devriez pouvoir exécuter n'importe quelle commande et écrire partout. P>
Si vous avez vraiment besoin, pour une raison quelconque, je ne comprends pas, exécutez la commande en tant qu'utilisateur A et d'écrire en tant qu'utilisateur B, vous pouvez procéder comme suit: P>
où A et B sont l'utilisateur que vous voulez. La pièce sudo sh -c "commande> sortie.txt" code> p>
sudo -u une commande | sudo -u b tee / quelque part> / dev / null code> p>
> / dev / null null> n'est requise que si vous ne voulez pas que la sortie de commande soit redirigée sur stdout aussi. P>
Que faites-vous avec ces appels superflus à Sh? Le tout fonctionne parfaitement si vous combinez simplement sudo code> et
tee code> ...
Faux. sudo -u personne ne ls | T-shirt de racine sudo -u> / test code> et je reçois
bash: / test: autorisation refusée code>. En fait, je ne peux pas expliquer pourquoi, mais sur mon système, je dois appeler sh (ou bash). Si quelqu'un a une explication, c'est le bienvenu.
C'est parce que vous utilisez tee code> faux :). S'il vous plaît lire le manuel. Vous fournissez le fichier à écrire comme argument /. Dans votre exemple, la tuyauterie est effectuée par votre propre utilisateur (comme
> code> est interprété à partir de la coquille de l'appelant) lors de l'utilisation correcte de
TEE code> L'appelant de cette pièce est pertinent (qui serait
root code> dans ce cas ...)
Oh merci. Vous avez raison. Mise à jour de ma réponse et vote pour le vôtre, cela vaut la peine d'être uppote. :)
Une autre option qui évite de la tuyauterie, puis de / dev / zéro code> est
Peut-être que j'ai mal compris la question initiale. P>
Si vous souhaitez capturer la sortie entière de Si vous souhaitez capturer le Si vous voulez seulement capturer la sortie de Si vous ne pouvez pas utiliser sudo strace foo code>, le moyen le plus simple est d'exécuter
script code> d'abord. P>
starr code> de
sudo strace foo code> Vous pouvez essayer
sudo strace foo 2>> (TEE logfile) code>. < / p>
strace code> et non de
foo code>, vous pouvez essayer
sudo strace -o / dev / fd / foo 3 >> (TEE LOGFILE) CODE>. P>
3>> code>, je pense que vous pouvez toujours le faire avec la redirection FD. P>