Si je lance une commande.
sudo some-command && some-other-command
La deuxième commande exécutée avec sudo
previlege également?
Si je lance une commande.
sudo some-command && some-other-command
La deuxième commande exécutée avec sudo
previlege également?
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 &&
n'appartient cependant pas à une commande et est interprété par le shell avant d'exécuter la première commande. Il indique à bash de commencer par exécuter la première commande et, en cas de succès, la deuxième.
Le sudo
ne connaît donc pas le && some-other command
. Lorsque le processus élevé se termine, bash prend sa valeur de retour, puis exécute l'autre commande, qui à son tour 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 lancer un bash élevé et le laisser exécuter les deux commandes:
$ sudo bash -c 'whoami && whoami'
root
root
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 que la session bash a commencé avec cette commande, qui se termine immédiatement. Pourtant, les deux whoami
s ne se connaissent pas.
Cela ne convient à aucun objectif, 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:
sudo some-command && sudo some-other-command
sudo sh -c "some-command && some-other-command"
ou si vous voulez des commandes d’imbrication, 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 soit écrire deux fois sudo, soit faire quelque chose comme
sudo bash -c 'foo && bar'
&&
signifie que la commande côté droit (seconde) ne s'exécutera que si la première commande (la première) est réussie, c'est-à-dire que le code de sortie $?
est 0
.
Les deux commandes sont différentes les unes des autres et s'exécuteront dans leurs propres environnements afin que la deuxième commande ne s'exécute pas avec le privilège sudo
.
Cela vous permettra de clarifier:
$ sudo whoami && whoami
root
foobar
Sur la ligne de commande, quand vous voyez
$ command one && command two
L'intention typique est d'exécuter la commande qui suit le & amp; & amp; uniquement si la première commande est réussie.
absolument non, c'est juste comme écrire deux commandes consécutives, ceci & amp; & amp; ne donne aucun privilège supplémentaire à une commande. Ce n'est qu'un séparateur .
Prouver que prenons un exemple.
touch fileA fileB
J'ai créé deux fichiers fileA et fileB. Maintenant, je vais exécuter la commande
sudo chown test:test fileA && chown test:test fileB
Je change le propriétaire de l'utilisateur et du groupe de ces fichiers en test de nom d'utilisateur et de groupe. Maintenant, la première commande doit être exécutée pendant que l’autre?
La sortie est la suivante:
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 en conclure que & amp; & amp; ne remplace pas le second sudo
NON, et ce qui suit était autrefois très communément appelé macro.
sudo reboot && exit
À peu près 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 pour "mickey mouse".
Cela est si facile à tester que la question peut être suspectée à un exercice de remplissage de statistiques.