Wie Sie bemerkt haben, cd
ist ein in die Shell eingebauter Befehl und dafür gibt es einen Grund dafür:das "aktuelle Verzeichnis" ist ein prozessspezifischer Parameter, der nur vom Prozess selbst geändert werden kann .
Das Arbeitsverzeichnis Ihrer Shell kann von keinem untergeordneten Prozess geändert werden – also selbst dann nicht, wenn Sie es schaffen, cd
auszuführen in einer privilegierten Subshell ändert es nur das Arbeitsverzeichnis dieser temporären Subshell, und es spielt keine Rolle, welche Methode zum Erhöhen von Berechtigungen Sie verwenden.
Also für sudo cd
Um zu funktionieren, müsste sudo selbst eine eingebaute Shell sein, und es müsste eine Möglichkeit bestehen, die Berechtigungen eines bereits laufenden Prozesses zu erhöhen. Derzeit existiert kein solcher Mechanismus unter Linux (noch den meisten anderen Betriebssystemen).
Eine Möglichkeit, das zu erreichen, was Sie möchten, besteht darin, eine Interaktion durchzuführen Shell mit Root-Rechten (jede Methode funktioniert), und verwenden Sie einfach den regulären cd
darin:
[[email protected] /]$ sudo bash
[[email protected] /]# cd /root/secret
Wenn Sie alles in einem Befehl erledigen wollen, müsste es so aussehen – zuerst das Arbeitsverzeichnis wechseln, dann eine interaktive Shell starten:
sudo bash -c "cd /root/secret && bash"
su -c "cd /root/secret && zsh"
Hinweis:Der äußere Befehl muss keine Shell sein, es muss nur etwas sein das sein Arbeitsverzeichnis ändert und einen neuen Befehl ausführt. Neuere Linux-Systeme haben ein oder zwei Hilfsprogramme, die verwendet werden könnten:
sudo nsenter --wd="/root/secret" bash # util-linux v2.23 (debian jessie)
sudo env --chdir="/root/secret" bash # coreutils v8.28 (debian buster)
Der Vorteil dieser Methode besteht darin, dass keine verschachtelten Anführungszeichen erforderlich sind. Sie können einen Mehrwortbefehl ausführen, ohne Probleme mit Leerzeichen oder Sonderzeichen zu haben.
Schließlich haben einige Programme eine eingebaute Option, um ihr Arbeitsverzeichnis zu ändern:
sudo make -C /etc
sudo git -C /root/secret log
Die andere Antwort ist nicht falsch.
Möglicherweise ist eine bessere Antwort:
Das sudo-Tool soll Aktionen als Superuser ausführen, und Sie beschreiben etwas, das eher eine Zustandsänderung ist, die Aktionen wie "ls" oder "vi" oder anderen vorangeht, um sie einfacher zu machen.
Ich schlage vor, z. wenn Sie eine Datei in /root/private/ bearbeiten wollten:
sudo ls /root
sudo ls /root/private
sudoedit /root/private/<name from previous ls command>
Das ist definitiv mehr Tippen und etwas schwieriger als nur Verzeichnisse zu wechseln. Allerdings ist es weit prüffähiger und viel mehr im Einklang mit den Prinzipien hinter sudo als das Ausführen einer Variante von 'sudo bash'.
Wenn Sie in einer sicheren Umgebung arbeiten, wird Ihr IA-Team es Ihnen danken. Wenn Sie sich fragen:"Was habe ich neulich geändert?", dann Sie wird es Ihnen danken, denn Sie müssen sich nicht fragen, welche Datei oder Dateien Sie bearbeitet haben.
All dies gesagt, das Aktivieren und Ausführen einer Form von „sudo bash“ ist definitiv einfacher. Wenn Sie nach einer einfacheren Lösung gesucht haben, warum verwenden Sie überhaupt 'sudo', anstatt sich nur als root anzumelden?