Führen Sie eine Shell innerhalb von sudo
aus :sudo bash -c 'whoami; whoami'
Sie können jedes Zeichen außer '
verwenden sich innerhalb der einfachen Anführungszeichen. Wenn Sie wirklich ein einfaches Anführungszeichen in diesem Befehl haben möchten, verwenden Sie '\''
(was technisch gesehen ist:End-Single-Quote-Literal, Literal '
Zeichen, Anfangsbuchstaben in einfachen Anführungszeichen; aber effektiv ist dies eine Möglichkeit, ein einfaches Anführungszeichen in eine literale Zeichenfolge mit einfachen Anführungszeichen einzufügen).
Sie können die Befehle als Standardeingabe in sudo'ed bash mit einem here-Dokument übergeben:
sudo bash <<"EOF"
whoami
id
EOF
Auf diese Weise müssen Sie sich nicht mit dem richtigen Zitieren herumschlagen, insbesondere wenn Sie mehrere Ebenen haben, z. B.:
sudo bash <<"EOF"
whoami
echo $USER ~
sudo -u apache bash <<"DOF"
whoami
echo $USER ~
DOF
EOF
Erzeugt:
root
root /root
apache
apache /usr/share/httpd
(Beachten Sie, dass Sie das innere Abschlusszeichen nicht einrücken können – es muss allein in seiner Zeile stehen. Wenn Sie in einem Hier-Dokument Einzüge verwenden möchten, können Sie <<-
verwenden statt <<
, aber dann müssen Sie mit Tabulatoren einrücken, nicht mit Leerzeichen.)
Versuchen Sie zum Beispiel Folgendes, ich habe es getestet:
sudo bash -c "cd /;ls;ls|grep o"
In diesem Beispiel ändern Sie zuerst dir in /root, listen als nächstes das Root-Verzeichnis auf und filtern schließlich für das Root-Verzeichnis nur Verzeichnisse mit Namen mit dem Buchstaben 'o'.
Aber was besser ist, ist das Schreiben von Skripten, die alles tun, was Sie brauchen, und den Exitcode für alle komplexen Aktionen angeben. Dann können Sie ein Sudo-Skript anstelle einer Gruppe einzelner Befehle wie im obigen Beispiel verwenden.