Come modificare .bashrc senza effettuare l'accesso


17

Questa è probabilmente una domanda duplicata, ma non ho abbastanza familiarità con il processo di accesso / avvio di CentOS (specialmente su una macchina virtuale) per sapere cosa cercare.

Sto eseguendo CentOS 7 in VirtualBox. Ho accidentalmente aggiunto gnome-terminalalla fine del mio ~/.bashrcfile. Quindi ora viene visualizzata una finestra di terminale quando eseguo l'accesso. Viene eseguita quella sessione di terminale .bashrc, che apre un'altra finestra, ecc. Ecc., E sono inondato da una tonnellata di gnome-terminalfinestre di terminale.

Sto tentando di accedere a una sessione terminale senza il login della GUI (quindi gnome-terminalnon riesce), ma non riesco ad avviarlo senza la GUI. Ho provato a usare le risposte a questa domanda, senza successo. Ricevo un login GUI ogni volta: come avviare CentOS in CLI? . Esiste un altro modo per modificare la configurazione di grub all'avvio o un modo per accedere a una nuova istanza di terminale dall'accesso alla GUI, come Ctrl + Alt + F1 in Ubuntu? (Sì, l'ho provato. O non funziona in CentOS 7 o non funziona in una VM VirtualBox.) Oppure c'è un altro modo in cui posso ottenere una sessione terminale senza una GUI, quindi posso modificare il mio .bashrce sistemare questo casino?


4
È sshdsu quella VM? Molti modi. 1) Avvia come Modalità utente singolo (es. Entra all'avvio, seleziona il kernel, premi a, aggiungi singolo , inserisci ...) 2) se nel tuo sistema VM esegui sshd puoi provare a copiare la tua .bashrcmodifica e ricopia ( scp, sftp rsync ...). 3) è possibile accedere come un altro utente e fare su -... 4) da un'altra macchina (anche virtuale) è possibile ssh user@host mv .bashrc bashrcToModifyquindi accedere, modificare ... 0) Prima di tutto CTRL ALT F1funziona dalla VM?
Hastur,

2
Quando hai detto "accodato accidentalmente a gnome-terminal", come è potuto succedere?
McFedr,

@mcfedr Stavo aspettando che qualcuno chiedesse a XD. Ho capito male a cosa serviva .bashrc. Ho pensato che fosse eseguito una volta al login, ma è eseguito ogni volta che viene avviata una sessione di shell. Volevo che si aprisse una finestra terminale ogni volta che ho effettuato l'accesso, così ho fatto echo 'gnome-terminal' >> ~/.bashrc. Cattiva idea. Immagino che dovrei mettere gnome-terminaldentro /etc/init.do da qualche parte? Sto ancora cercando di capire il processo di avvio.
Michael Hoffmann,

Risposte:


13

CtrlAltF1potrebbe essere catturato dall'host o VirtualBox potrebbe non trasmetterlo correttamente. Un paio di test rapidi mi dicono che puoi usare la chiave Host definita in VirtualBox invece di CtrlAlt(potrebbe essere la sinistra Ctrlo la sinistra sui Mac). Quindi, premendo per F1passare a TTY1 in VirtualBox per me (e allo stesso modo per F7tornare alla GUI).


1
Sì. Ha funzionato Ctrl + F2 ha fatto il trucco per me. Sembra che Ctrl + F1 sia la sessione della GUI in CentOS, ma è lo stesso principio. IMO questa è la soluzione più semplice: non sono necessari supporti aggiuntivi o modifica della configurazione di avvio. Lo segnerò come risposta.
Michael Hoffmann,

2
@MichaelHoffmann sì, sarebbe un effetto di un CentOS più recente di me. Il comportamento GDM è cambiato tra 6 e 7 per utilizzare il primo TTY disponibile anziché TTY 7.
muru

2
Le versioni future cambieranno ulteriormente: la schermata di accesso sarà su vconsole 1 e ogni utente grafico connesso occuperà ogni successiva vconsole (quando accedi, la tua sessione è su vconsole 2, se cambi utente l'utente successivo sarà su vconsole 3, ecc.).
Michael Hampton,

24

È possibile eseguire l'avvio con un CD Linux live, quindi montare il filesystem CentOS e modificare il file .bashrc da lì.


2
Soluzione più semplice. Funziona anche per configurazioni errate che impediscono l'accesso o addirittura l'avvio completo (purché tu sappia cosa è sbagliato e come invertirlo.)
alexis

Questo è estremamente semplice, specialmente dove un utente di VirtualBox è praticamente sicuro di avere un ISO del SO guest in circolazione. Ma temo di dover selezionare la risposta di Muru perché è ancora più semplice. Grazie per il contributo
Michael Hoffmann,

15

Init / bin / sh dalla configurazione di grub

È possibile modificare la configurazione di grub per caricare una shell di root invece di accedere alla GUI.

  1. Riavvia la tua VM
  2. Quando viene visualizzato il menu grub, selezionare la prima voce e premere eper modificare. Se non appare, riavvia e tieni premuto Shift durante l'avvio
  3. Trova la riga che inizia con linux16o linux. Il mio assomiglia a questo. Il tuo potrebbe differire leggermente

    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. Cambiare la roa rw( sola lettura bandiera per readwrite in modo da poter scrivere le modifiche) e aggiungere init=/bin/shalla linea. Questo dice a Linux di funzionare /bin/shinvece che initall'avvio. Esempio per la mia voce

    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. Premi Ctrl-X per eseguire la configurazione. Non verrà salvato.

  6. Apparirà una shell di root. Usalo per modificare il tuo .bashrce rimuovere la linea offensiva.

    Si noti che non si dovrebbe continuare a utilizzare il sistema operativo in questo stato poiché la shell verrà eseguita come PID 1, normalmente riservato per il initprocesso. Puoi continuare manualmente con init exec /sbin/initma ti consiglio di riavviare

  7. Riavvia normalmente. Le tue modifiche precedenti verranno dimenticate.

Stiamo essenzialmente modificando le opzioni di avvio passate a Linux da GRUB, che dicono a Linux di montare il filesystem di root in lettura-scrittura e di iniziare /bin/shil processo di init

Questo funziona per me usando Centos 7 e VirtualBox 4.3.12


Hm ... ha funzionato perfettamente (e un po 'inquietante- qualcuno potrebbe farlo sul mio laptop per arrivare a una shell di root senza credenziali?). Ma ha causato il panico del kernel quando sono uscito dalla shell, quindi non so se posso contrassegnarlo come risposta ... Puoi spiegare perché funziona? cosa fare roe rw? O meglio ancora, c'è una manpage per linux16? Cosa sto facendo qui?
Michael Hoffmann,

5
@MichaelHoffmann questo è un modo standard e ben noto per ottenere root - devi proteggere con password il bootloader per bloccare questo. Provoca il panico del kernel perché init non dovrebbe mai uscire, ma altrimenti il ​​panico è innocuo. Puoi continuare l'avvio da exec /sbin/inito qualunque sia l'effettivo init. Le opzioni roe rwmontano root in sola lettura o in lettura-scrittura. Stai essenzialmente modificando il menu di GRUB per dirgli di avviare Linux con queste opzioni, che dicono a Linux di montare il filesystem di root in lettura-scrittura e avviare sh per init.
Muru,

1
@muru Ho aggiunto alcuni dei tuoi commenti alla risposta per rendere le cose più chiare.
lex

6

scp una copia riparata di .bashrcin posizione

Se hai un'altra macchina su cui lavorare, prendi una copia del file rotto e risolvi il problema, quindi rimettilo da dove è venuto. Questo evita di accedere e invocare qualsiasi comando di accesso.

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: come sottolineato dall'OP, ciò richiede l'accesso a SSH homehost. Se questa non è un'opzione ma FTP / SFTP è invece disponibile, qualsiasi metodo di trasferimento file farà ciò di cui hai bisogno, che è semplicemente quello di installare il file di accesso corretto.


1
Funziona, ma solo se la VM è in sshdesecuzione su di essa (cosa che non sono sicuro CentOS per impostazione predefinita) e se la rete è configurata correttamente con VirtualBox e nell'host e nella VM.
Michael Hoffmann,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.