17 votes

Comment modifier le fichier .bashrc sans se connecter ?

Cette question fait probablement double emploi, mais je ne suis pas assez familier avec le processus de connexion/démarrage de CentOS (en particulier sur une VM) pour savoir ce qu'il faut rechercher.

J'utilise CentOS 7 dans VirtualBox. J'ai accidentellement ajouté gnome-terminal jusqu'à la fin de mon ~/.bashrc fichier. Une fenêtre de terminal s'ouvre alors lorsque je me connecte. Cette session de terminal exécute .bashrc qui ouvre une autre fenêtre, etc. etc., et je suis submergé par une tonne de gnome-terminal terminal Windows.

J'essaie de me connecter à une session de terminal sans l'ouverture de session de l'interface graphique (donc gnome-terminal échoue), mais je n'arrive pas à le faire démarrer sans l'interface graphique. J'ai essayé d'utiliser les réponses à cette question, sans succès. J'obtiens une connexion à l'interface graphique à chaque fois : Comment démarrer CentOS en CLI ? . Existe-t-il un autre moyen de modifier la configuration Grub au démarrage, ou un moyen d'accéder à une nouvelle instance de terminal à partir de l'ouverture de session de l'interface graphique, comme Ctrl+Alt+F1 dans Ubuntu ? (Oui, je l'ai essayé. Soit cela ne fonctionne pas dans CentOS 7, soit cela ne fonctionne pas dans une VM VirtualBox). Ou existe-t-il un autre moyen d'obtenir une session de terminal sans interface graphique, afin que je puisse modifier mon fichier .bashrc et réparer ce gâchis ?

24voto

Charles Burge Points 1957

Vous pouvez démarrer avec un CD Linux actif, puis monter le système de fichiers CentOS et modifier le fichier .bashrc à partir de là.

15voto

lex Points 250

Init /bin/sh à partir de la configuration de Grub.

Vous pouvez modifier votre configuration Grub pour charger un Grub racine au lieu d'aller dans l'interface graphique.

  1. Redémarrez votre VM

  2. Lorsque le menu Grub apparaît, sélectionnez la première entrée et appuyez sur. e à éditer. Si elle n'apparaît pas, redémarrez et maintenez la touche Maj pendant le démarrage.

  3. Trouvez la ligne commençant par linux16 o linux . Le mien ressemble à ceci. Le vôtre peut être légèrement différent

    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. Changez le ro à rw ( en lecture seule pour lecture-écriture pour pouvoir écrire les modifications) et ajouter init=/bin/sh à la ligne. Cela dit à linux d'exécuter /bin/sh au lieu de init au démarrage. Exemple pour mon entrée

    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. Appuyez sur Ctrl-X pour exécuter la configuration. Elle ne sera pas enregistrée.

  6. Un Shell racine apparaîtra. Utilisez-le pour modifier votre .bashrc et supprimer la ligne incriminée.

    Notez que vous ne devriez pas continuer à utiliser le système d'exploitation dans cet état car le Shell fonctionnera sous le PID 1, normalement réservé au init processus. Vous pouvez poursuivre manuellement l'init avec exec /sbin/init mais je recommande de redémarrer

  7. Redémarrez normalement. Vos modifications précédentes seront oubliées.

Nous modifions essentiellement les options de démarrage passées à Linux par Grub, qui disent à Linux de monter le système de fichiers racine en lecture-écriture et de démarrer /bin/sh pour le processus d'init

Cela fonctionne pour moi avec Centos 7 et VirtualBox 4.3.12.

13voto

muru Points 1072

CtrlAltF1 peut être capturé par l'hôte, ou VirtualBox peut ne pas le transmettre correctement. Quelques tests rapides m'indiquent que vous pouvez utiliser l'option Hôte définie dans VirtualBox au lieu de CtrlAlt (pourrait être la gauche Ctrl ou la gauche sur les Macs). Ainsi, en appuyant sur F1 est passé à TTY1 dans VirtualBox pour moi (et de la même manière pour F7 retour à l'interface graphique).

6voto

Guido123456789 Points 31

Scp une copie réparée de .bashrc en place

Si vous disposez d'une autre machine pour travailler, prenez une copie du fichier endommagé et corrigez le problème, puis remettez-le là d'où il vient. Cela évite de se connecter et d'invoquer l'une des commandes de connexion.

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

Addendum : Comme le souligne le PO ci-dessous, cela nécessite un accès SSH pour homehost . Si cette option n'est pas possible, mais que le FTP/SFTP est disponible à la place, n'importe quelle méthode de transfert de fichiers fera ce dont vous avez besoin, c'est-à-dire installer simplement le fichier de connexion corrigé.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X