Si je lance une commande.
sudo some-command && some-other-command
La deuxième commande est-elle exécutée avec sudo
previlege également?
Si je lance une commande.
sudo some-command && some-other-command
La deuxième commande est-elle exécutée avec sudo
previlege également?
Réponses:
TL; DR: NO
La première commande est
sudo some-command
La deuxième commande est
some-other-command
La commande sudo
prend la commande suivante et l'exécute avec des privilèges élevés. Le &&
, cependant, n'appartient pas à une commande et est interprété par le shell avant l'exécution de la première commande. Il demande à bash d’exécuter d’abord la première commande et, en cas de succès, la seconde.
Donc, le sudo
ne sait pas à propos de la && some-other command
. Lorsque le processus élevé se termine, bash prend sa valeur de retour, puis exécute l'autre commande, qui à nouveau ne connaît pas la première.
Cela peut être démontré facilement:
$ sudo whoami && whoami
root
username
Pour atteindre ce que vous voulez, vous pouvez démarrer un bash élevé et le laisser exécuter les deux commandes:
$ sudo bash -c 'whoami && whoami'
root
root
Alors maintenant, les deux commandes sont exécutées en tant que root, car le processus entier décrit ci-dessus est exécuté dans un processus élevé, c'est-à-dire que la session bash a démarré avec cette commande, qui se termine immédiatement à la fin. Pourtant, les deux whoami
ne se connaissent pas.
Cela ne convient à rien, mais pour cette démonstration, le moyen le plus simple est simplement de faire
sudo some-command && sudo some-other-command
Quelques exemples qui font cela sont:
sudo some-command && sudo some-other-command
sudo sh -c "some-command && some-other-command"
ou si vous voulez des commandes de nid, vous pouvez même faire:
sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
some-command2
some-other-command2
EOF2
EOF
$ sudo -s -- whoami && whoami
donneroot
username
sudo -s -- "whoami && whoami"
semble donner une commande non trouvée, plus ou moins la même chose qu'une commande "whoami && whoami"
. Comment utiliser cette construction avec &&? Je vois que cela sudo -s cd ..
ne donne pas d'erreur par opposition à sudo cd ..
.
sudo bash <<"EOF"
:! Merci! :-)
Non, vous devez écrire sudo deux fois ou faire quelque chose comme
sudo bash -c 'foo && bar'
&&
signifie que la commande côté droit (deuxième) ne sera exécutée que si la commande dont le côté inférieur (premier) a abouti, c'est-à-dire que le code de sortie l' $?
est 0
.
Les deux commandes sont différentes l'une de l'autre et s'exécutent dans leurs propres environnements. La deuxième commande ne s'exécutera donc pas avec des sudo
privilèges.
Cela vous éclaircira:
$ sudo whoami && whoami
root
foobar
NON, et ce qui suit était très communément une fois en macro.
sudo reboot && exit
Presque tout le monde aurait dû le faire au moins une fois
sudo apt-get update && sudo apt-get upgrade
Il s’agit donc d’une excellente question d’interview "mickey mouse".
Ceci est si facilement testé que la question peut être suspectée d’un exercice de remplissage de statistiques.
Sur la ligne de commande, quand vous voyez
$ command one && command two
L'intention typique est d'exécuter la commande qui suit le && seulement si la première commande est réussie.
absolument non, c'est juste comme écrire deux commandes consécutives, ceci && ne donne aucun privilège ajouté à une commande. C'est juste un séparateur .
Pour prouver cela, prenons un exemple.
touch fileA fileB
J'ai créé deux fichiers fichierA et fichierB. Maintenant, je lance la commande
sudo chown test:test fileA && chown test:test fileB
Je remplace l'utilisateur et le propriétaire du groupe de ces fichiers par un test d'utilisateur et de nom de groupe Maintenant, la première commande devrait être exécutée, et l’autre?
La sortie est:
chown: changing ownership of `fileB': Operation not permitted
Donc, la commande n’a pas été exécutée car elle a besoin sudo
et bien que nous puissions en conclure que && ne remplace pas la secondesudo
whoami
exemple.