Como editar .bashrc sem fazer login


17

Provavelmente essa é uma pergunta duplicada, mas não estou familiarizado o suficiente com o processo de login / inicialização do CentOS (especialmente em uma VM) para saber o que procurar.

Estou executando o CentOS 7 no VirtualBox. Anexei acidentalmente gnome-terminalo final do meu ~/.bashrcarquivo. Portanto, agora uma janela do terminal aparece quando eu entro. Essa sessão do terminal é executada .bashrc, o que abre outra janela, etc. etc., e eu sou inundado com uma tonelada de gnome-terminaljanelas do terminal.

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


4
Está sshdnessa VM? Várias maneiras. 1) Inicie como modo de usuário único (por exemplo, entre no momento da inicialização, selecione o kernel, pressione a, acrescente um , digite ...) 2) se no seu sistema VM execute sshd, você pode tentar copiar o seu .bashrcmodify e copiar novamente ( scp, sftp rsync ...). 3) você pode fazer logon como outro usuário e fazer su -... 4) a partir de outra máquina (até virtual), você pode fazer ssh user@host mv .bashrc bashrcToModifylog, modificar ... 0) Antes de tudo, CTRL ALT F1funciona na VM?
Hastur

2
Quando você diz "gnome-terminal acidentalmente anexado", como isso aconteceu?
Mcfedr

@mcfedr Eu estava esperando alguém perguntar ao XD. Eu não entendi o que .bashrcera. Eu pensei que era executado uma vez no login, mas é executado sempre que qualquer sessão do shell é iniciada. Eu queria que uma janela do terminal fosse exibida toda vez que eu fizesse login, então eu fiz echo 'gnome-terminal' >> ~/.bashrc. Péssima ideia. Eu acho que eu deveria colocar ou gnome-terminalem /etc/init.dalgum lugar? Ainda estou tentando entender o processo de inicialização.
Michael Hoffmann

Respostas:


13

CtrlAltF1pode estar sendo capturado pelo host ou o VirtualBox pode não estar transmitindo-o corretamente. Alguns testes rápidos me dizem que você pode usar a chave Host definida no VirtualBox em vez de CtrlAlt(pode ser a esquerda Ctrlou a esquerda nos Macs). Então, pressionar F1mudou para TTY1 no VirtualBox para mim (e da mesma forma para F7voltar à GUI).


11
Sim. Isso funcionou. Ctrl + F2 fez o truque para mim. Parece que Ctrl + F1 é a sessão da GUI no CentOS, mas é o mesmo princípio. Na IMO, essa é a solução mais simples - sem necessidade de mídia extra ou edição da configuração de inicialização. Estou marcando isso como a resposta.
Michael Hoffmann

2
@ MichaelHoffmann sim, isso seria um efeito de um CentOS mais novo do que eu. GDM comportamento alterado entre 6 e 7 para usar o primeiro TTY TTY disponível em vez de 7.
Muni

2
Ele está mudando ainda mais em versões futuras: a tela de login estará no vconsole 1 e cada usuário gráfico conectado ocupará cada vconsole subsequente (quando você faz login, sua sessão está no vconsole 2, se você alternar com o usuário, o próximo usuário será no vconsole 3, etc).
Michael Hampton

24

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


2
Solução mais simples. Também funciona para erros de configuração que impedem madeireiras em ou até mesmo durante a inicialização completamente (contanto que você saiba o que está errado e como reverter isso.)
alexis

Isso é extremamente simples, especialmente quando um usuário do VirtualBox tem praticamente a garantia de ter um ISO do sistema operacional convidado. Mas tenho medo de selecionar a resposta de muru porque é ainda mais simples. Obrigado pela contribuição.
Michael Hoffmann

15

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

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

  1. Reinicie sua VM
  2. Quando o menu grub aparecer, selecione a primeira entrada e pressione epara editar. Se não aparecer, reinicie e mantenha pressionada a tecla Shift durante a inicialização
  3. Encontre a linha que começa com linux16ou linux. O meu é assim. O 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 ropara rw( sinalizador somente leitura para escrever novamente para poder escrever alterações) e acrescente init=/bin/shà linha. Isso diz ao linux para executar, em /bin/shvez de initna 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 raiz aparecerá. Use-o para editar .bashrce remover a linha incorreta.

    Observe que você não deve continuar usando o sistema operacional nesse estado, pois o shell estará executando como PID 1, normalmente reservado para o initprocesso. Você pode continuar manualmente com init, exec /sbin/initmas eu recomendo apenas reiniciar

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

Estamos basicamente editando as opções de inicialização passadas para o Linux pelo GRUB, que instruem o Linux a montar a leitura / gravação do sistema de arquivos raiz e iniciar /bin/sho processo init

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


Hum ... isso funcionou perfeitamente (e um pouco perturbadoramente - alguém poderia fazer isso no meu laptop para obter um shell raiz sem credenciais?). Mas causou pânico no kernel quando saí do shell, então não sei se posso marcar isso como a resposta ... Você pode explicar por que isso funciona? o que roe rw? Ou melhor ainda, existe uma página de manual para linux16? O que estou fazendo aqui?
Michael Hoffmann

5
@ MichaelHoffmann, esta é uma maneira padrão e bem conhecida de obter root - você precisa proteger com senha o gerenciador de inicialização para bloquear isso. Isso causa pânico no kernel porque o init nunca deve sair, mas o pânico é inofensivo. Você pode continuar a inicialização exec /sbin/initou o que for real init. As opções roe rwmontam somente leitura ou leitura e gravação raiz. Você está basicamente editando o menu GRUB para dizer a ele para inicializar o Linux com essas opções, que dizem ao Linux para montar a leitura / gravação do sistema de arquivos raiz e iniciar sh para init.
Muru

11
@muru Adicionei alguns de seus comentários na resposta para ajudar a tornar as coisas mais claras.
Lex

6

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 coloque-o de volta de onde veio. Isso evita efetuar login e invocar 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 indica abaixo, isso requer acesso SSH a homehost. Se essa 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.


11
Isso funciona, mas apenas se a VM estiver sshdsendo executada (o que não tenho certeza do CentOS por padrão) e se a rede estiver configurada corretamente com o VirtualBox e no host e na VM.
Michael Hoffmann
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.