So bearbeiten Sie .bashrc ohne sich anzumelden

17

Dies ist wahrscheinlich eine doppelte Frage, aber ich kenne den Anmelde- / Startvorgang von CentOS (insbesondere auf einer VM) nicht gut genug, um zu wissen, wonach gesucht werden muss.

Ich verwende CentOS 7 in VirtualBox. Ich habe versehentlich an gnome-terminaldas Ende meiner ~/.bashrcDatei angehängt . Wenn ich mich anmelde, wird nun ein Terminalfenster geöffnet. Diese Terminalsitzung wird ausgeführt .bashrc, wodurch ein anderes Fenster usw. usw. geöffnet wird, und ich bin mit einer Vielzahl von gnome-terminalTerminalfenstern überflutet .

Ich versuche, mich bei einer Terminalsitzung ohne die GUI-Anmeldung anzumelden ( gnome-terminalschlägt also fehl), aber ich kann es nicht zum Booten ohne die GUI bringen. Ich habe versucht, die Antworten auf diese Frage zu verwenden, ohne Erfolg. Ich erhalte jedes Mal ein GUI-Login: Wie starte ich CentOS in der CLI? . Gibt es eine andere Möglichkeit, die Grub-Konfiguration beim Booten zu bearbeiten, oder eine Möglichkeit, über die GUI-Anmeldung zu einer neuen Terminal-Instanz zu gelangen, wie Strg + Alt + F1 in Ubuntu? (Ja, ich habe es versucht. Entweder funktioniert es nicht in CentOS 7, oder es funktioniert nicht in einer VirtualBox-VM.) Oder kann ich eine Terminalsitzung auch ohne GUI erstellen, um meine zu bearbeiten .bashrcund dieses Chaos beheben?

Michael Hoffmann
quelle
4
Ist sshdauf dieser VM? Viele Möglichkeiten. 1) Als Einzelbenutzermodus starten (z. B. beim Booten eingeben, den Kernel auswählen, a drücken, einzeln anhängen , eingeben ...) 2) Wenn in Ihrem VM-System sshd ausgeführt wird, können Sie versuchen, Ihre .bashrcÄnderung zu kopieren und sie zurück zu kopieren ( scp, sftp rsync ...). 3) Sie können sich als ein anderer Benutzer anmelden und su -... 4) von einer anderen Maschine aus (auch virtuell) können Sie sich ssh user@host mv .bashrc bashrcToModifydann anmelden, ändern ... 0) Funktioniert das vor allem CTRL ALT F1von der VM aus?
Hastur
2
Wie ist das passiert, wenn Sie "versehentlich angehängtes Gnom-Terminal" sagen?
MCFEDR
@mcfedr Ich habe darauf gewartet, dass jemand XD fragt. Ich habe falsch verstanden, wofür .bashrc. Ich dachte, es würde einmal bei der Anmeldung ausgeführt, aber es wird jedes Mal ausgeführt, wenn eine Shell-Sitzung gestartet wird. Ich wollte, dass jedes Mal, wenn ich mich anmeldete, ein Terminalfenster erscheint, also tat ich es echo 'gnome-terminal' >> ~/.bashrc. Schlechte Idee. Ich denke , ich sollte setzen gnome-terminalin /etc/init.doder irgendwo? Ich versuche immer noch, den Startvorgang zu verstehen.
Michael Hoffmann

Antworten:

13

CtrlAltF1Möglicherweise wird es vom Host erfasst oder VirtualBox gibt es nicht korrekt weiter. Ein paar Schnelltests zeigen mir, dass Sie den in VirtualBox definierten Host- Schlüssel anstelle von verwenden können CtrlAlt(möglicherweise den linken Ctrloder den linken auf Macs). Also, F1für mich auf TTY1 in VirtualBox umgeschaltet drücken (und ähnlich für F7zurück zur GUI).

muru
quelle
1
Jep. Das hat funktioniert. Strg + F2 hat den Trick für mich gemacht. Es sieht aus wie Strg + F1 ist die GUI-Sitzung in CentOS, aber es ist das gleiche Prinzip. IMO ist dies die einfachste Lösung. Es sind keine zusätzlichen Medien oder Änderungen an der Startkonfiguration erforderlich. Ich markiere dies als die Antwort.
Michael Hoffmann
2
@MichaelHoffmann ja, das wäre ein Effekt eines neueren CentOS als ich. Das GDM-Verhalten wurde zwischen 6 und 7 geändert, um das erste verfügbare TTY anstelle von TTY 7 zu verwenden.
muru
2
In zukünftigen Versionen ändert sich dies weiter: Der Anmeldebildschirm befindet sich auf vconsole 1, und jeder angemeldete grafische Benutzer belegt jede nachfolgende vconsole (wenn Sie sich anmelden, befindet sich Ihre Sitzung auf vconsole 2, wenn Sie den Benutzer wechseln, wird der nächste Benutzer sein auf vconsole 3, etc).
Michael Hampton
24

Sie könnten mit einer Live-Linux-CD booten und dann das CentOS-Dateisystem einhängen und die .bashrc-Datei von dort aus bearbeiten.

Charles Burge
quelle
2
Einfachste Lösung. Funktioniert auch bei Fehlkonfigurationen, die das Anmelden oder sogar das vollständige Booten verhindern (sofern Sie wissen, was falsch ist und wie Sie es rückgängig machen können).
alexis
Dies ist äußerst einfach, insbesondere wenn ein VirtualBox-Benutzer so gut wie garantiert eine ISO des Gastbetriebssystems hat. Aber ich fürchte, ich muss die Antwort von muru auswählen , weil es noch einfacher ist. Vielen Dank für den Beitrag.
Michael Hoffmann
15

Init / bin / sh aus der Grub-Konfiguration

Sie können Ihre Grub-Konfiguration bearbeiten, um eine Root-Shell zu laden, anstatt zur GUI zu wechseln.

  1. Starten Sie Ihre VM neu
  2. Wenn das Grub-Menü angezeigt wird, wählen Sie den ersten Eintrag aus und drücken Sie ezum Bearbeiten. Wenn dies nicht der Fall ist, starten Sie den Computer neu und halten Sie beim Booten die Umschalttaste gedrückt
  3. Suchen Sie die Zeile, die mit linux16oder beginnt linux. Meins sieht so aus. Ihre können leicht abweichen

    linux16 /vmlinuz-3.10.0-327.18.2.el7.x86_64 root=/dev/mapper/centos-root ro crashkernal=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF8
  4. Ändern Sie die rozu rw( Nur - Lese - Flag readwrite , so dass Sie Änderungen schreiben kann) und Anfügen init=/bin/shan die Leitung. Dies sagt Linux laufen zu lassen , /bin/shanstatt initbeim Start. Beispiel für meinen Eintrag

    linux16 /vmlinuz-3.10.0-327.18.2.el7.x86_64 root=/dev/mapper/centos-root rw crashkernal=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF8 init=/bin/sh
  5. Drücken Sie Strg-X, um die Konfiguration auszuführen. Es wird nicht gespeichert.

  6. Eine Root-Shell wird angezeigt. Verwenden Sie es, um Ihre zu bearbeiten .bashrcund die störende Linie zu entfernen.

    Beachten Sie, dass Sie das Betriebssystem in diesem Zustand nicht weiter verwenden sollten, da die Shell als PID 1 ausgeführt wird, die normalerweise für den initProzess reserviert ist. Sie können init manuell fortsetzen, exec /sbin/initaber ich würde nur einen Neustart empfehlen

  7. Starten Sie wie gewohnt neu. Ihre vorherigen Änderungen werden vergessen.

Wir bearbeiten im Wesentlichen die von GRUB an Linux übergebenen Startoptionen, die Linux anweisen, das Root-Dateisystem mit Lese- / Schreibzugriff bereitzustellen und /bin/shfür den Init-Prozess zu starten

Dies funktioniert für mich mit Centos 7 und VirtualBox 4.3.12

Lex
quelle
Hm ... das hat perfekt funktioniert (und ein bisschen störend - könnte das jemand mit meinem Laptop machen, um zu einer Root-Shell ohne Anmeldeinformationen zu gelangen?). Aber es verursachte eine Kernel-Panik, als ich die Shell verließ, daher weiß ich nicht, ob ich dies als Antwort markieren kann ... Können Sie erklären, warum dies funktioniert? was machen round rw? Oder noch besser, gibt es eine Manpage für linux16? Was mache ich hier?
Michael Hoffmann
5
@MichaelHoffmann Dies ist ein bekannter Standardweg, um root zu werden. Sie müssen den Bootloader mit einem Kennwort schützen, um dies zu blockieren. Es verursacht eine Kernel-Panik, weil init niemals beendet werden soll, aber die Panik ist ansonsten harmlos. Sie können mit dem Booten fortfahren exec /sbin/initoder mit dem, was gerade aktuell initist. Mit den Optionen round wird rwRoot schreibgeschützt oder schreibgeschützt bereitgestellt. Sie bearbeiten im Wesentlichen das GRUB-Menü, um es anzuweisen, Linux mit diesen Optionen zu booten. Dadurch wird Linux angewiesen, das Root-Dateisystem mit Lese- / Schreibzugriff bereitzustellen und sh für init zu starten.
Muru
1
@muru Ich habe ein paar Ihrer Kommentare in die Antwort eingefügt, um die Dinge klarer zu machen.
Lex
6

scp eine reparierte Kopie an .bashrcOrt und Stelle

Wenn Sie auf einem anderen Computer arbeiten möchten, nehmen Sie eine Kopie der beschädigten Datei und beheben Sie das Problem. Setzen Sie sie dann wieder dort ab, woher sie stammt. Dadurch wird vermieden, dass Sie sich anmelden und einen der Anmeldebefehle aufrufen.

user@backup ~ $ scp user@homehost:~/.bashrc busted.bashrc
user@backup ~ $ vim busted.bashrc # fix, fix
user@backup ~ $ scp busted.bashrc user@homehost:~/.bashrc
user@backup ~ $ rm busted.bashrc

Nachtrag: Wie OP weiter unten ausführt, ist hierfür ein SSH-Zugang erforderlich homehost. Wenn dies keine Option ist, aber stattdessen FTP / SFTP verfügbar ist, wird jede Dateiübertragungsmethode das tun, was Sie benötigen, nämlich einfach die korrigierte Anmeldedatei zu installieren.

gws
quelle
1
Dies funktioniert jedoch nur, wenn die VM darauf sshdausgeführt wird (was ich nicht sicher bin, ob CentOS dies standardmäßig tut) und wenn das Netzwerk mit VirtualBox und auf dem Host und in der VM korrekt konfiguriert ist.
Michael Hoffmann