
Vorab: Ich bin neu auf diesem Gebiet und lerne noch, also haben Sie bitte Geduld mit mir, was die Terminologie und das Auffinden von Dingen betrifft.
Aufstellen: Virtuelle Umgebung von Proxmox 7.2-3 + Container + ubuntu-22.04-standard_22.04-1_amd64.tar.zst
Ausgabe: Für das Terminal/die Konsole meines Ubuntu-Servers habe ich gestern Fisher und Fish Shell installiert, nur um das Erscheinungsbild zu ändern. Als ich versuchte, den Container neu zu starten, trat ein Anmeldeproblem auf, das anscheinend mit dem Speicherort von Fish zusammenhing, den ich in das Verzeichnis gelegt hatte. Ich bin mir jedoch nicht ganz sicher.
Ich weiß nicht, wie ich mich wieder in den Container einloggen kann und möchte nicht alles wieder von vorne einrichten müssen. Ich bin für jede Hilfe dankbar.
Weitere Hintergrundinfos und Bilder:
Antwort1
Zuerst die gute Nachricht: Es gibt mit ziemlicher Sicherheit eine Möglichkeit zur Wiederherstellung. Die schlechte Nachricht ist, dass ich nicht genau weiß, wie ich in diesem Fall vorgehen soll. Ich werde unten einige Vorschläge machen, was meiner Meinung nach funktionieren könnte, aber ich verwende Proxmox nicht und kann es daher nicht direkt testen.
Aber zuerst möchte ich einen Vorschlag machen:
- Verwenden Sie bei der Installation von Software dieoffizielle Dokumentezuerst, und nicht eine „technische“ Site wie die, auf die Sie oben verwiesen haben.
Der Artikel, auf den Sie oben verlinkt haben, isteinfach falsch und wird (hat) zu einer Systembeschädigung führenDer korrekte Prozess wird vom Fish-Team dokumentiert in:
- Installationshandbuch für Ubuntu(verlinkt vom Haupt-FischSeite).
- Dokumentation zuFestlegen der Standard-Shell
Mit Entschuldigung, aber jetzt ein bisschen Schimpferei – Websites wie die, auf die Sie verlinkt haben, sind „Websites mit bezahlten Inhalten“. Sie bezahlen für Artikel von „freien“ (wenn auch „geprüften“) Autoren. Leider kann die Qualität der Inhalte sehr unterschiedlich sein. Um Ihnen das schlimmste Beispiel zu geben, das ich je gesehen habe: Letztes Jahr kam ein neuer Besucher in ein Subreddit, das ich häufig besuche, und zwar zu einem technischen Thema. Die Person schrieb (sinngemäß, aber zutreffend):
Ich habe keine Ahnung von [Thema] und habe es noch nie verwendet, aber ich wurde gebeten, einen Artikel darüber zu schreiben, wie man [xyz] mit [Thema] macht. Kann mir jemand eine Anleitung geben?
Beachten Sie, dass ich nicht weißwelcheSite, für die sie geschrieben haben.
Natürlich ist nicht jeder Artikel auf jeder kostenpflichtigen Website so, aber der Artikel, auf den Sie sich oben beziehenIstschlecht. Jede Dokumentation, die Ihr System absolut und ohne Fragen beschädigen wird, istschlechtDas Hauptproblem besteht darin:
Schritt 4 („Fish-Shell als Standard-Shell festlegen“) in diesem Dokument lautet:
sudo chsh -s /usr/local/bin/fish
Das sind einfach mehrere Fehler zu einem zusammengefasst!
Erstens und am schlimmsten -- Das ist der falsche Pfad für Fish unter Ubuntu. Ich glaube, das ist der Ort, an dem Fish unter macOS installiert würde. Unter Ubuntu ist es (normalerweise)
/usr/bin/fish
, aber wie die Fish-Dokumente zeigen, sollten Sie den Speicherort immer bestätigen aufdeinSystem.Durch die Verwendung
sudo chsh
ohne Benutzernamen wird die Shell für den Root-Benutzer geändert. Dies ist schlecht und erschwert die Wiederherstellung erheblich.Wenn Sie die Shell für den aktuellen Benutzer mit ändern möchten
sudo
, lautet die Syntax:sudo chsh -s <path/to/shell> $USER
Aber selbst das ist keine gute Idee, da
chsh
der Root-Benutzer (auch bekannt alssudo chsh
) Ihnen erlaubt, einen „schlechten Shell-Pfad“ festzulegen. Sie werden zwar gewarnt, aber der Pfad wird trotzdem geändert/etc/passwd
und verwendet den von Ihnen angegebenen schlechten Shell-Pfad.sudo chsh -s /this/is/bad $USER grep $USER /etc/passwd
Sie werden sehen, dass der falsche Pfad eingestellt ist.
Randbemerkung: Ich kann diese Dinge auf meinem System ausprobieren, ohne eine Beschädigung befürchten zu müssen, da ich das Windows-Subsystem für Linux verwende, eine virtuelle Umgebung, in der ich weiß, dass ich diese Fehler problemlos beheben kann. Proxmox-Container sollten eigentlich der Technologie sehr ähnlich sein, die WSL „unter der Haube“ verwendet, daher gehe ich davon aus, dass es dort einen ebenso einfachen Wiederherstellungsmechanismus gibt.
DerrichtigDer Befehl zum Ändern Ihrer Shell in Fish unter Ubuntu lautet einfach:
chsh -s /usr/bin/fish
Solange Sie nicht verwenden sudo
, wird es sich änderndeinBenutzer-Shell, und es wirdbestätigendass die Schale gut ist.
Wiederherstellungsplan
Du erwähnst, dass du Ubuntu als Container in Proxmox verwendest. Das ist gut, glaube ich. Wenn du eine VM verwenden würdest, müsstest du Ubuntu unter Proxmox mit einer gültigen Shell booten. Das wäre immer noch möglich.
Auch hier ist die schlechte Nachricht, dass ich nicht ganz sicher bin, wie das geht, und da Proxmox nicht läuftunterUbuntu, Sie benötigen möglicherweise eine andere Site (z. B. die Proxmox-Foren), um diese Frage zu beantworten. Im Allgemeinen müssen Sie Folgendes tun:
Greifen Sie auf die Proxmox-Befehlszeile zu.
Ich gehe davon aus, dass Sie gemäß der Proxmox-Dokumentation das
pct
Tool zum Verwalten des Containers.Greifen Sie mit einer gültigen Shell auf den Ubuntu-Container zu. Sie können es versuchen
pct exec <vmid> /usr/bin/bash
.Sie müssen sich
root
im Ubuntu-Container befinden, der meiner Meinung nach die Standardeinstellung istpct
.
Wenn duhabenZugriff auf den Ubuntu-Container in einer gültigen Shell als Root:
chsh -s /usr/bin/bash
Es besteht die Möglichkeit, dass dies nicht funktioniert, da die Shell für den aktuellen Benutzer ungültig ist. Ich glaube jedoch, dass Root die Shell trotzdem zurücksetzen kann (ein normaler Benutzer würde dies definitiv nicht tun). Wenn Sie jedoch auf Probleme stoßen, ist die andere Alternative:
vipw
Dadurch können Sie Ihre
/etc/passwd
direkt bearbeiten und/usr/local/bin/fish
in ändern/usr/bin/bash
.Dadurch wird die Shell Ihres Root-Benutzers auf eine gute zurückgesetzt. Für Root würde ich empfehlen, die Shell auf Bash zu belassen. Ändern Sie Ihre Shell für Ihren normalen, nicht rootenden Benutzer in Fish, wie in den Fish-Dokumenten beschrieben.