Si je lance une commande.
sudo some-command && some-other-command
Est-ce que la deuxième commande est exécutée avec sudo
Prédominance aussi ?
Si je lance une commande.
sudo some-command && some-other-command
Est-ce que la deuxième commande est exécutée avec sudo
Prédominance aussi ?
TL;DR : NON
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 site &&
n'appartient cependant pas à une commande et est interprétée par le Shell, avant l'exécution de la première commande. Il indique à bash d'exécuter d'abord la première commande, et en cas de succès la seconde.
Ainsi, le sudo
n'est pas au courant de la && some-other command
. Lorsque le processus élevé se termine, bash prend sa valeur de retour, puis exécute l'autre commande, qui ignore encore une fois l'existence de la première.
Cela peut être démontré facilement :
$ sudo whoami && whoami
root
username
Pour arriver à 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
Donc maintenant, les deux commandes sont exécutées en tant que root, car tout le processus décrit ci-dessus est exécuté dans un processus élevé, c'est-à-dire la session bash démarrée avec cette commande, qui sort immédiatement après avoir terminé. Pourtant, les deux whoami
ne connaissent pas l'existence des autres.
Cela ne convient à aucun usage, mais pour cette démonstration, le moyen le plus simple est de faire simplement
sudo some-command && sudo some-other-command
Non. Voici quelques exemples qui le font :
sudo some-command && sudo some-other-command
sudo sh -c "some-command && some-other-command"
ou si vous voulez des commandes de nidification, vous pouvez même faire :
sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
some-command2
some-other-command2
EOF2
EOF
&&
signifie que la commande de droite (seconde) ne sera exécutée que si la commande de gauche (première) réussit, c'est-à-dire si le code de sortie $?
es 0
.
Les deux commandes sont différentes l'une de l'autre et s'exécuteront dans leurs propres environnements, de sorte que la deuxième commande ne s'exécutera pas en ayant sudo
privilège.
Cela vous rendra plus clair :
$ sudo whoami && whoami
root
foobar
NON, et ce qui suit était autrefois une macro très courante.
sudo reboot && exit
Presque tout le monde aurait dû faire ça au moins une fois
sudo apt-get update && sudo apt-get upgrade
C'est donc une excellente question d'entretien "mickey mouse".
Cela est si facile à vérifier que la question peut être soupçonnée d'être un exercice de remplissage de statistiques.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.