Como editar .bashrc sem estar logado

15

Esta é provavelmente uma questão duplicada, mas eu não estou familiarizado o suficiente com o processo de login / boot do CentOS (especialmente em uma VM) para saber o que procurar.

Estou executando o CentOS 7 no VirtualBox. Eu acidentalmente acrescentei gnome-terminal ao final do meu arquivo ~/.bashrc . Então, agora uma janela de terminal aparece quando eu faço o login. Essa sessão de terminal executa .bashrc , que abre outra janela, etc. etc., e eu estou inundado com uma tonelada de janelas do terminal gnome-terminal .

Estou tentando fazer login em uma sessão de terminal sem o login da GUI (portanto, gnome-terminal falha), mas não consigo inicializá-lo sem a GUI. Eu tentei usar as respostas para essa pergunta, sem sucesso. Eu recebo um login de GUI toda vez: Como inicializar o CentOS no CLI? . Existe outra maneira de editar a configuração do grub na inicialização ou uma maneira de acessar uma nova instância de terminal a partir do login da GUI, como Ctrl + Alt + F1 no Ubuntu? (Sim, eu tentei. Ele não funciona no CentOS 7, ou não funciona em uma VM do VirtualBox.) Ou há outra maneira de obter uma sessão de terminal sem uma GUI, para que eu possa editar o meu .bashrc e consertar essa bagunça?

    
por Michael Hoffmann 14.12.2017 / 01:24

4 respostas

12

Ctrl Alt F1 pode estar sendo capturado pelo host, ou o VirtualBox pode não estar transmitindo corretamente. Um par de testes rápidos me diz que você pode usar a tecla Host definida no VirtualBox em vez de Ctrl Alt (pode ser a esquerda Ctrl ou à esquerda em Macs). Então, pressionando F1 mudou para TTY1 no VirtualBox para mim (e da mesma forma para F7 de volta para a GUI) .

    
por 14.12.2017 / 08:42
23

Você pode inicializar com um CD Linux ao vivo e montar o sistema de arquivos CentOS e editar o arquivo .bashrc a partir daí.

    
por 14.12.2017 / 01:40
14

Init / bin / sh da configuração do grub

Você pode editar sua configuração do grub para carregar um shell de root em vez de ir para a GUI.

  1. Reinicialize sua VM
  2. Quando o menu grub aparecer, selecione a primeira entrada e pressione e para editar. Se não aparecer, reinicie e segure a tecla Shift durante o boot
  3. Encontre a linha que começa com linux16 ou linux . O meu parece assim. Seu pode diferir ligeiramente

    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. Altere o sinalizador ro para rw ( readonly para readwrite para poder gravar alterações) e anexe init=/bin/sh à linha. Isso diz ao linux para executar /bin/sh em vez de init na inicialização. Exemplo para minha entrada

    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. Pressione Ctrl-X para executar a configuração. Não será salvo.

  6. Um shell de root aparecerá. Use-o para editar seu .bashrc e remover a linha ofensiva.

    Observe que você não deve continuar usando o sistema operacional neste estado, pois o shell estará sendo executado como PID 1, normalmente reservado para o processo init . Você pode continuar manualmente o init com exec /sbin/init , mas eu recomendo apenas reinicializar

  7. Reinicie normalmente. Suas alterações anteriores serão esquecidas.

Estamos essencialmente editando as opções de inicialização passadas para o Linux a partir do GRUB, que dizem ao Linux para montar o sistema de arquivos raiz de leitura-gravação e iniciar /bin/sh para o processo init

Isso funciona para mim usando o Centos 7 e o VirtualBox 4.3.12

    
por 14.12.2017 / 06:13
5

scp uma cópia reparada de .bashrc no lugar

Se você tiver outra máquina para trabalhar, pegue uma cópia do arquivo quebrado e corrija o problema e, em seguida, coloque-o de onde veio. Isso evita o login e invoca qualquer um dos comandos de login.

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
Adendo: Como o OP aponta abaixo, isso requer acesso SSH a homehost . Se isso não for uma opção, mas o FTP / SFTP estiver disponível, qualquer método de transferência de arquivos fará o que você precisa, que é simplesmente instalar o arquivo de login corrigido.

    
por 14.12.2017 / 21:19