Cómo editar .bashrc sin iniciar sesión

17

Esta es probablemente una pregunta duplicada, pero no estoy lo suficientemente familiarizado con el proceso de inicio de sesión / inicio de CentOS (especialmente en una VM) para saber qué buscar.

Estoy ejecutando CentOS 7 en VirtualBox. Accidentalmente agregué gnome-terminalal final de mi ~/.bashrcarchivo. Así que ahora aparece una ventana de terminal cuando inicio sesión. Esa sesión de terminal se ejecuta .bashrc, lo que abre otra ventana, etc., etc., y me inundan un montón de gnome-terminalventanas de terminal.

Estoy tratando de iniciar sesión en una sesión de terminal sin el inicio de sesión de la GUI (así que gnome-terminalfalla), pero no puedo hacer que arranque sin la GUI. He intentado usar las respuestas a esta pregunta, sin éxito. Recibo un inicio de sesión de GUI cada vez: ¿Cómo iniciar CentOS en CLI? . ¿Hay otra forma de editar la configuración de grub en el arranque, o una forma de llegar a una nueva instancia de terminal desde el inicio de sesión de GUI, como Ctrl + Alt + F1 en Ubuntu? (Sí, lo probé. O no funciona en CentOS 7, o no funciona en una VM VirtualBox). ¿O hay alguna otra forma de obtener una sesión de terminal sin una GUI, así puedo editar mi .bashrcy arreglar este desastre?

Michael Hoffmann
fuente
44
¿Está sshden esa VM? Muchas maneras. 1) Comience como modo de usuario único (por ejemplo, ingrese al momento del arranque, seleccione el núcleo, presione a, agregue un solo , ingrese ...) 2) si en su sistema VM ejecute sshd puede intentar copiar su .bashrcmodificación y volver a copiarla ( scp, sftp rsync ...). 3) puede iniciar sesión como otro usuario y hacer su -... 4) desde otra máquina (incluso virtual) que puede hacer ssh user@host mv .bashrc bashrcToModifyluego iniciar sesión, modificar ... 0) ¿Antes de todo CTRL ALT F1funciona desde la VM?
Hastur
2
Cuando dices "gnome-terminal agregado accidentalmente", ¿cómo sucedió eso?
mcfedr
@mcfedr Estaba esperando que alguien le preguntara a XD. No entendí para qué .bashrcera. Pensé que se ejecutó una vez al iniciar sesión, pero se ejecuta cada vez que se inicia una sesión de shell. Quería que apareciera una ventana de terminal cada vez que ingresaba, así que lo hice echo 'gnome-terminal' >> ~/.bashrc. Mala idea. Supongo que debería poner gnome-terminalen /etc/init.do en algún lugar? Todavía estoy tratando de entender el proceso de arranque.
Michael Hoffmann

Respuestas:

13

CtrlAltF1podría estar siendo capturado por el host, o VirtualBox podría no estar pasándolo correctamente. Un par de pruebas rápidas me dicen que puede usar la clave de Host definida en VirtualBox en lugar de CtrlAlt(podría ser la izquierda Ctrlo la izquierda en Mac). Entonces, presionar F1cambió a TTY1 en VirtualBox para mí (y de manera similar para F7volver a la GUI).

muru
fuente
1
Sip. Eso funciono. Ctrl + F2 hizo el truco para mí. Parece que Ctrl + F1 es la sesión de GUI en CentOS, pero es el mismo principio. En mi opinión, esta es la solución más simple: no se necesitan medios adicionales ni editar la configuración de arranque. Estoy marcando esto como la respuesta.
Michael Hoffmann
2
@MichaelHoffmann sí, eso sería un efecto de un CentOS más nuevo que yo. El comportamiento de GDM cambió entre 6 y 7 para usar el primer TTY disponible en lugar de TTY 7.
muru
2
Está cambiando aún más en futuras versiones: la pantalla de inicio de sesión estará en la vconsola 1, y cada usuario gráfico conectado ocupará cada vconsola subsiguiente (cuando inicie sesión, su sesión estará en la vconsola 2, si cambia de usuario, el siguiente usuario será en vconsole 3, etc.).
Michael Hampton
24

Puede arrancar con un CD de Linux en vivo y luego montar el sistema de archivos CentOS y editar el archivo .bashrc desde allí.

Charles Burge
fuente
2
La solución más simple. También funciona para configuraciones erróneas que impiden que inician sesión en el arranque o incluso por completo (como siempre que se sepa lo que está mal y cómo revertirla.)
Alexis
Esto es extremadamente simple, especialmente cuando un usuario de VirtualBox tiene la garantía de tener un ISO del sistema operativo invitado. Pero me temo que tengo que seleccionar la respuesta de muru porque es aún más simple. Gracias por la contribucion.
Michael Hoffmann
15

Init / bin / sh desde la configuración de grub

Puede editar su configuración de grub para cargar un shell raíz en lugar de ir a la GUI.

  1. Reinicia tu VM
  2. Cuando aparezca el menú de grub, seleccione la primera entrada y presione epara editar. Si no aparece, reinicie y mantenga presionada la tecla Mayús durante el arranque
  3. Encuentra la línea que comienza con linux16o linux. El mío se ve así. El tuyo puede diferir ligeramente

    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. Cambie roa rw( indicador de solo lectura para readwrite para que pueda escribir los cambios) y agregue init=/bin/sha la línea. Esto le dice a Linux que se ejecute en /bin/shlugar de inital inicio. Ejemplo para mi 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. Presione Ctrl-X para ejecutar la configuración. No se guardará.

  6. Aparecerá un shell de raíz. Úselo para editar su .bashrcy eliminar la línea ofensiva.

    Tenga en cuenta que no debe seguir usando el sistema operativo en este estado ya que el shell se ejecutará como PID 1, normalmente reservado para el initproceso. Puedes continuar manualmente con init exec /sbin/initpero te recomiendo que solo reinicies

  7. Reiniciar como de costumbre. Sus cambios anteriores serán olvidados.

Básicamente, estamos editando las opciones de arranque pasadas a Linux desde GRUB, que le dicen a Linux que monte el sistema de archivos raíz de lectura-escritura e inicie /bin/shel proceso de inicio.

Esto funciona para mí usando Centos 7 y VirtualBox 4.3.12

lex
fuente
Hm ... eso funcionó a la perfección (y un poco inquietante: ¿podría alguien hacerle esto a mi computadora portátil para llegar a un shell de root sin credenciales?). Pero causó un pánico en el núcleo cuando salí del shell, así que no sé si puedo marcar esto como la respuesta ... ¿Puede explicar por qué funciona? lo que hacer roy rw? O mejor aún, ¿hay una página de manual para linux16? ¿Qué estoy haciendo aquí?
Michael Hoffmann
55
@MichaelHoffmann esta es una forma estándar y bien conocida de obtener root: debe proteger con contraseña el gestor de arranque para bloquear esto. Causa pánico en el núcleo porque nunca se supone que init debe salir, pero de lo contrario el pánico es inofensivo. Puede continuar arrancando exec /sbin/inito lo que sea que sea real init. Las opciones roy rwmontan root solo lectura o lectura-escritura. Básicamente, está editando el menú de GRUB para indicarle que inicie Linux con estas opciones, que le indican a Linux que monte el sistema de archivos raíz de lectura-escritura y comience sh para init.
muru
1
@muru Agregué algunos de tus comentarios a la respuesta para ayudar a aclarar las cosas.
lex
6

scp una copia reparada de .bashrcen su lugar

Si tiene otra máquina para trabajar, tome una copia del archivo roto y solucione el problema, luego vuelva a colocarlo de donde vino. Esto evita iniciar sesión e invocar cualquiera de los comandos de inicio de sesión.

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

Anexo: Como OP señala a continuación, esto requiere acceso a SSH homehost. Si esa no es una opción, pero FTP / SFTP está disponible, cualquier método de transferencia de archivos hará lo que necesita, que es simplemente instalar el archivo de inicio de sesión corregido.

gws
fuente
1
Esto funciona, pero solo si la VM se está sshdejecutando (lo cual no estoy seguro de que CentOS lo haga de manera predeterminada), y si la red está configurada correctamente con VirtualBox y en el host y en la VM.
Michael Hoffmann