web-dev-qa-db-fra.com

Comment modifier .bashrc sans se connecter

Il s'agit probablement d'une question en double, mais je ne connais pas suffisamment le processus de connexion/démarrage de CentOS (en particulier sur une machine virtuelle) pour savoir quoi rechercher.

J'exécute CentOS 7 dans VirtualBox. J'ai accidentellement ajouté gnome-terminal à la fin de mon fichier ~/.bashrc. Alors maintenant, une fenêtre de terminal s'ouvre lorsque je me connecte. Cette session de terminal exécute .bashrc, ce qui ouvre une autre fenêtre, etc., etc., et je suis inondé d'une tonne de fenêtres de terminal gnome-terminal.

J'essaie de me connecter à une session de terminal sans la connexion à l'interface graphique (donc gnome-terminal échoue), mais je ne parviens pas à l'initialiser sans l'interface graphique. J'ai essayé d'utiliser les réponses à cette question, sans succès. Je reçois à chaque fois un identifiant graphique: Comment démarrer CentOS dans CLI? . Existe-t-il un autre moyen de modifier la configuration de grub au démarrage ou un moyen d'accéder à une nouvelle instance de terminal à partir de la connexion à l'interface graphique, comme Ctrl + Alt + F1 dans Ubuntu? (Oui, j'ai essayé. Cela ne fonctionne pas dans CentOS 7 ou sur une machine virtuelle VirtualBox.) Ou existe-t-il un autre moyen d'obtenir une session de terminal sans interface graphique pour pouvoir modifier ma .bashrc et réparer ce gâchis?

16
Michael Hoffmann

CtrlAltF1 peut être capturé par l'hôte ou VirtualBox peut ne pas le transmettre correctement. Quelques tests rapides me disent que vous pouvez utiliser la clé Host définie dans VirtualBox au lieu de CtrlAlt (pourrait être la gauche Ctrl, ou la gauche  sur Mac). Donc, en appuyant sur F1 basculé vers TTY1 dans VirtualBox pour moi (et de même pour F7 retour à l'interface graphique).

12
muru

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

23
Charles Burge

Init/bin/sh depuis la configuration de grub

Vous pouvez modifier votre configuration grub pour charger un shell racine au lieu d'aller à l'interface graphique.

  1. Redémarrez votre VM
  2. Lorsque le menu de menu apparaît, sélectionnez la première entrée et appuyez sur e pour le modifier. S'il n'apparaît pas, redémarrez et maintenez Shift pendant le démarrage
  3. Recherchez la ligne commençant par linux16 ou linux. Le mien ressemble à ceci. Le vôtre peut différer légèrement

    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. Remplacez la variable ro par rw ( en lecture seule par readwrite afin que vous puissiez écrire changements) et ajoutez init=/bin/sh à la ligne. Cela indique à 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. Ça ne sera pas sauvé.

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

    Notez que vous ne devez pas continuer à utiliser le système d'exploitation dans cet état car le Shell s'exécutera en tant que PID 1, normalement réservé au processus init. Vous pouvez continuer manuellement init avec exec /sbin/init mais je vous conseillerais de redémarrer

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

Nous éditons essentiellement les options de démarrage transmises à Linux par GRUB, qui indiquent à Linux de monter le système de fichiers racine en lecture-écriture et de démarrer /bin/sh pour le processus init.

Cela fonctionne pour moi avec Centos 7 et VirtualBox 4.3.12

14
lex

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

Si vous avez une autre machine sur laquelle travailler, prenez une copie du fichier cassé et corrigez le problème, puis remettez-le à sa place. Cela évite de se connecter et d’appeler les 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 OP le souligne ci-dessous, cela nécessite un accès SSH à homehost. Si ce n'est pas une option mais que FTP/SFTP est disponible, toute méthode de transfert de fichier fera ce que vous avez besoin, à savoir simplement installer le fichier de connexion corrigé.

5
gws