Si je lance une commande.
Sudo some-command && some-other-command
La deuxième commande est-elle exécutée avec Sudo
previlege également?
TL; DR: NO
La première commande est
Sudo some-command
La deuxième commande est
some-other-command
La commande Sudo
accepte la commande suivante et l'exécute avec des privilèges élevés. Le &&
n'appartient toutefois 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 la première commande en premier, et en cas de succès la deuxième.
Donc, Sudo
ne connaît pas le && 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 l’ensemble du processus 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. Néanmoins, les deux whoami
name__s ne connaissent pas l'existence de chacun.
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
Non, vous devez écrire Sudo deux fois ou faire quelque chose comme:
Sudo bash -c 'foo && bar'
&&
signifie que la commande right sided (second) ne sera exécutée que si la commande lest sided (first) a abouti, c'est-à-dire que le code de sortie $?
est 0
.
Les deux commandes sont différentes et s'exécutent dans leurs propres environnements. Par conséquent, la deuxième commande ne fonctionnera pas avec le privilège Sudo
.
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 ne 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 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
La commande n'a donc pas été exécutée car elle nécessite Sudo
et nous pouvons toutefois en conclure que && ne remplace pas le deuxième Sudo
name__.