Cara mengedit .bashrc tanpa masuk

17

Ini mungkin pertanyaan duplikat, tapi saya tidak cukup akrab dengan proses login / boot CentOS (terutama pada VM) untuk mengetahui apa yang harus dicari.

Saya menjalankan CentOS 7 di VirtualBox. Saya tidak sengaja menambahkan gnome-terminalke akhir ~/.bashrcfile saya . Jadi sekarang jendela terminal muncul ketika saya masuk. Sesi terminal itu dijalankan .bashrc, yang membuka jendela lain, dll., Dan saya dibanjiri dengan banyak gnome-terminaljendela terminal.

Saya mencoba masuk ke sesi terminal tanpa login GUI (jadi gnome-terminalgagal), tapi saya tidak bisa mem-boot tanpa GUI. Saya sudah mencoba menggunakan jawaban untuk pertanyaan ini, tetapi tidak berhasil. Saya mendapatkan login GUI setiap kali: Bagaimana Cara Boot CentOS di CLI? . Apakah ada cara lain untuk mengedit konfigurasi grub saat boot, atau cara untuk mendapatkan instance terminal baru dari login GUI, seperti Ctrl + Alt + F1 di Ubuntu? (Ya, saya mencobanya. Entah itu tidak bekerja di CentOS 7, atau tidak bekerja di VM VirtualBox.) Atau apakah ada cara lain saya bisa mendapatkan sesi terminal tanpa GUI, jadi saya dapat mengedit saya .bashrcdan memperbaiki kekacauan ini?

Michael Hoffmann
sumber
4
Apakah sshdterserah VM itu? Banyak jalan. 1) Mulai sebagai mode Pengguna tunggal (mis. Masuk saat boot, pilih kernel, tekan a, tambahkan satu , masukkan ...) 2) jika dalam sistem VM Anda jalankan sshd Anda dapat mencoba menyalin .bashrcmodifikasi Anda dan menyalin kembali ( scp, sftp rsync ...). 3) Anda dapat login sebagai pengguna lain dan melakukan su -... 4) dari komputer lain (bahkan virtual) yang dapat Anda lakukan ssh user@host mv .bashrc bashrcToModifykemudian login, modifikasi ... 0) Sebelum semuanya CTRL ALT F1berhasil dari VM?
Hastur
2
Ketika Anda mengatakan "terminal-gnome-terminal tidak sengaja ditambahkan", bagaimana hal itu terjadi?
mcfedr
@ mcfedr Saya sedang menunggu seseorang untuk bertanya XD. Saya salah paham untuk apa .bashrc. Saya pikir itu dijalankan sekali saat login, tetapi dijalankan setiap kali sesi shell dimulai. Saya ingin jendela terminal muncul setiap kali saya masuk, jadi saya melakukannya echo 'gnome-terminal' >> ~/.bashrc. Ide buruk. Saya kira saya harus dimasukkan ke gnome-terminaldalam /etc/init.datau di suatu tempat? Saya masih mencoba memahami proses boot.
Michael Hoffmann

Jawaban:

13

CtrlAltF1mungkin ditangkap oleh tuan rumah, atau VirtualBox mungkin tidak meneruskannya dengan benar. Beberapa tes cepat memberi tahu saya bahwa Anda dapat menggunakan kunci Host yang ditentukan dalam VirtualBox alih-alih CtrlAlt(bisa menjadi kiri Ctrl, atau kiri pada Mac). Jadi, menekan F1beralih ke TTY1 di VirtualBox untuk saya (dan juga untuk F7kembali ke GUI).

muru
sumber
1
Ya. Itu berhasil. Ctrl + F2 melakukan trik untuk saya. Sepertinya Ctrl + F1 adalah sesi GUI di CentOS, tapi prinsipnya sama. IMO ini adalah solusi paling sederhana - tidak perlu media tambahan atau mengedit konfigurasi boot. Saya menandai ini sebagai jawabannya.
Michael Hoffmann
2
@MichaelHoffmann ya, itu akan menjadi efek dari CentOS yang lebih baru daripada yang saya miliki. Perilaku GDM berubah antara 6 dan 7 untuk menggunakan TTY pertama yang tersedia, bukan TTY 7.
muru
2
Ini berubah lebih lanjut dalam rilis mendatang: Layar login akan berada di vconsole 1, dan setiap pengguna grafis yang masuk akan menempati setiap vconsole berikutnya (ketika Anda login, sesi Anda pada vconsole 2, jika Anda pengguna-beralih pengguna berikutnya akan menjadi pada vconsole 3, dll).
Michael Hampton
24

Anda bisa boot dengan CD Linux langsung dan kemudian me-mount sistem file CentOS, dan mengedit file .bashrc dari sana.

Charles Burge
sumber
2
Solusi paling sederhana. Juga berfungsi untuk konfigurasi yang salah yang mencegah masuk atau bahkan boot sepenuhnya (selama Anda tahu apa yang salah dan bagaimana cara membalikkannya.)
alexis
Ini sangat sederhana, terutama di mana pengguna VirtualBox dijamin memiliki ISO OS tamu. Tapi aku takut aku harus memilih jawaban muru karena itu bahkan lebih sederhana. Terima kasih atas kontribusinya.
Michael Hoffmann
15

Init / bin / sh dari konfigurasi grub

Anda dapat mengedit konfigurasi grub Anda untuk memuat shell root alih-alih pergi ke GUI.

  1. Nyalakan ulang VM Anda
  2. Ketika menu grub muncul, pilih entri pertama dan tekan euntuk mengedit. Jika tidak muncul, mulai ulang dan tahan Shift saat boot
  3. Temukan baris yang dimulai dengan linux16atau linux. Milik saya terlihat seperti ini. Milik Anda mungkin sedikit berbeda

    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. Ubah roto rw( flag hanya baca menjadi readwrite sehingga Anda dapat menulis perubahan) dan tambahkan init=/bin/shke baris. Ini memberitahu linux untuk menjalankan /bin/shalih-alih initpada saat startup. Contoh untuk entri saya

    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. Tekan Ctrl-X untuk menjalankan konfigurasi. Itu tidak akan disimpan.

  6. Shell root akan muncul. Gunakan untuk mengedit Anda .bashrcdan menghapus baris yang menyinggung.

    Perhatikan bahwa Anda tidak boleh terus menggunakan OS dalam keadaan ini karena shell akan berjalan sebagai PID 1, biasanya disediakan untuk initproses. Anda dapat secara manual melanjutkan init dengan exec /sbin/inittetapi saya sarankan hanya me-reboot

  7. Reboot seperti biasa. Perubahan Anda sebelumnya akan dilupakan.

Kami pada dasarnya mengedit opsi boot yang diteruskan ke Linux dari GRUB, yang memberi tahu Linux untuk me-mount filesystem root baca-tulis dan mulai /bin/shuntuk proses init

Ini berfungsi untuk saya menggunakan Centos 7 dan VirtualBox 4.3.12

lex
sumber
Hm ... itu bekerja dengan sempurna (dan sedikit mengganggu- bisakah seseorang melakukan ini pada laptop saya untuk mendapatkan shell root tanpa kredensial?). Tapi itu menyebabkan panik kernel ketika saya keluar dari shell, jadi saya tidak tahu apakah saya dapat menandai ini sebagai jawabannya ... Bisakah Anda menjelaskan mengapa ini berhasil? apa yang rodan rw? Atau lebih baik lagi, apakah ada halaman manual untuk linux16? Apa yang saya lakukan disini?
Michael Hoffmann
5
@MichaelHoffmann ini adalah cara standar dan terkenal untuk mendapatkan root - Anda harus melindungi kata sandi bootloader untuk memblokir ini. Ini menyebabkan kepanikan kernel karena init tidak pernah seharusnya keluar, tetapi kepanikan tidak berbahaya. Anda dapat melanjutkan boot dengan exec /sbin/initatau apa pun yang sebenarnya init. The rodan rwpilihan me-mount akar read-only atau read-write. Pada dasarnya Anda sedang mengedit menu GRUB untuk memerintahkannya mem-boot Linux dengan opsi-opsi ini, yang memberi tahu Linux untuk me-mount filesystem root baca-tulis dan mulai sh untuk init.
muru
1
@muru Saya menambahkan beberapa komentar Anda ke dalam jawaban untuk membantu membuat semuanya menjadi lebih jelas.
lex
6

scp salinan diperbaiki .bashrcke tempatnya

Jika Anda memiliki mesin lain untuk bekerja, ambil salinan file yang rusak dan perbaiki masalahnya, lalu kembalikan ke tempat asalnya. Ini menghindari masuk dan memohon salah satu perintah 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

Tambahan: Sebagaimana ditunjukkan oleh OP di bawah ini, ini memerlukan akses SSH ke homehost. Jika itu bukan suatu pilihan tetapi FTP / SFTP tersedia sebagai gantinya, metode transfer file apa pun akan melakukan apa yang Anda butuhkan, yaitu hanya menginstal file login yang dikoreksi.

gws
sumber
1
Ini berfungsi, tetapi hanya jika VM telah sshdberjalan di atasnya (yang saya tidak yakin CentOS tidak secara default), dan jika jaringan dikonfigurasi dengan benar dengan VirtualBox dan di host dan di VM.
Michael Hoffmann