Wenn ich einen Befehl ausführe.
sudo some-command && some-other-command
Wird der zweite Befehl ebenfalls mit sudo
Vorrang ausgeführt?
Wenn ich einen Befehl ausführe.
sudo some-command && some-other-command
Wird der zweite Befehl ebenfalls mit sudo
Vorrang ausgeführt?
Antworten:
TL; DR: NEIN
Der erste Befehl lautet
sudo some-command
Der zweite Befehl lautet
some-other-command
Der Befehl sudo
übernimmt den folgenden Befehl und führt ihn mit erhöhten Rechten aus. Das &&
gehört jedoch nicht zu einem Befehl und wird von der Shell interpretiert, bevor der erste Befehl ausgeführt wird. Er weist bash an, zuerst den ersten Befehl und bei Erfolg den zweiten Befehl auszuführen.
Also die sudo
wissen nichts über die && some-other command
. Wenn der Prozess mit erhöhten Rechten beendet wird, nimmt bash seinen Rückgabewert und führt dann den anderen Befehl aus, der wiederum den ersten nicht kennt.
Dies kann leicht demonstriert werden:
$ sudo whoami && whoami
root
username
Um das zu erreichen, was Sie wollen, können Sie eine erhöhte Bash starten und beide Befehle ausführen lassen:
$ sudo bash -c 'whoami && whoami'
root
root
Beide Befehle werden nun als root ausgeführt, da der gesamte oben beschriebene Prozess in einem erhöhten Prozess ausgeführt wird, dh die mit diesem Befehl gestartete Bash-Sitzung wird sofort nach Beendigung beendet. Trotzdem whoami
wissen die beiden nichts voneinander.
Dies ist nicht zweckdienlich, aber für diese Demonstration ist es einfacher, dies einfach zu tun
sudo some-command && sudo some-other-command
Einige Beispiele dafür sind:
sudo some-command && sudo some-other-command
sudo sh -c "some-command && some-other-command"
oder wenn Sie Befehle zum Verschachteln wünschen, können Sie sogar Folgendes tun:
sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
some-command2
some-other-command2
EOF2
EOF
$ sudo -s -- whoami && whoami
gibtroot
username
sudo -s -- "whoami && whoami"
scheint Befehl nicht gefunden zu geben, mehr oder weniger das gleiche wie Befehl "whoami && whoami"
. Wie benutze ich diese Konstruktion mit &&? Ich sehe, das sudo -s cd ..
gibt keinen Fehler im Gegensatz zu sudo cd ..
.
sudo bash <<"EOF"
! Vielen Dank! :-)
Nein, Sie müssen entweder zweimal sudo schreiben oder so etwas tun
sudo bash -c 'foo && bar'
&&
bedeutet, dass der rechtsseitige (zweite) Befehl nur ausgeführt wird, wenn der nichtsseitige (erste) Befehl erfolgreich ist, dh der Beendigungscode $?
lautet 0
.
Die beiden Befehle unterscheiden sich voneinander und werden in ihren eigenen Umgebungen ausgeführt, sodass der zweite Befehl nicht mit sudo
Berechtigungen ausgeführt wird.
Dies wird Ihnen klar machen:
$ sudo whoami && whoami
root
foobar
NEIN, und das Folgende wurde einmal sehr häufig mit Makros beschrieben.
sudo reboot && exit
Fast jeder hätte das mindestens einmal tun sollen
sudo apt-get update && sudo apt-get upgrade
Somit ist es eine großartige "Mickey Mouse" Interviewfrage.
Dies ist so einfach zu testen, dass die Frage möglicherweise auf eine stat-padding-Übung zurückzuführen ist.
Auf der Kommandozeile, wenn Sie sehen
$ command one && command two
Die typische Absicht ist, den Befehl, der auf && folgt, nur dann auszuführen, wenn der erste Befehl erfolgreich ist.
Absolut nein, dies entspricht nur dem Schreiben von zwei aufeinanderfolgenden Befehlen. && verleiht einem Befehl kein zusätzliches Privileg. Es ist nur ein Trenner .
Um dies zu beweisen, nehmen wir ein Beispiel.
touch fileA fileB
Ich habe zwei Dateien fileA und fileB erstellt. Jetzt führe ich den Befehl aus
sudo chown test:test fileA && chown test:test fileB
Ich ändere den Benutzer- und Gruppeneigentümer dieser Dateien in Benutzer- und Gruppennamentest. Jetzt sollte der erste Befehl ausgeführt werden, während der andere ausgeführt wird.
Die Ausgabe ist:
chown: changing ownership of `fileB': Operation not permitted
Daher wurde der Befehl nicht ausgeführt, da er benötigt wird, sudo
und obwohl wir daraus schließen können, dass && kein Ersatz für den zweiten istsudo
whoami
Beispiel.