Bagaimana cara memulai shell kedua ketika dalam mode pengguna tunggal?


14

Ini mungkin terdengar seperti kontradiksi dalam hal, tetapi saya baru-baru ini perlu menggunakan mode pengguna tunggal (alias mode pemeliharaan) untuk beberapa waktu (hari!) Ketika mencoba membangun kembali array RAID yang rusak.

Saat melakukan ini, saya mendapati diri saya ingin menggunakan shell kedua untuk hal-hal seperti memeriksa / mengedit pengaturan dalam berbagai file konfigurasi atau melihat log sistem sementara konsol utama (dan satu-satunya) diikat menjalankan proses pemulihan.

Apa yang akan menjadi perintah yang disarankan untuk meluncurkan shell kedua di tty lain?

Jelas, satu metode mungkin digunakan screendi tty1, tetapi ini tidak cukup mudah hanya dengan berpindah sesi dengan Alt-F1, Alt-F2, dll.


4
screensemudah itu. Ctrl AP sepertinya tidak lebih rumit dari Alt F1 ...
mveroone

Perlu dicatat bahwa aplikasi suka screendan tmuxuntuk manajemen jendela TUI tidak selalu berhasil. Terkadang Anda membutuhkan ttyXperangkat yang sebenarnya , bukan a pts.
Parthian Shot

Jawaban:


14

Ada perintah khusus dirancang untuk situasi ini: openvt. Jalankan saja openvtdari shell Anda di tty1 dan Anda akan menemukan shell berjalan di tty pertama yang belum memiliki sesuatu di dalamnya (mungkin tty2.) Ada beberapa opsi yang mungkin berguna; lihat halaman manual openvt.

Karena ini bukan login yang dikelola oleh getty, ketika Anda keluar dari shell baru Anda tidak akan melihat prompt login muncul. Tty akan mati karena tidak akan ada proses yang berjalan di atasnya, tetapi Anda masih dapat beralih bolak-balik (Alt-F1 Alt-F2) dan melihat apa yang ada di layar ketika Anda keluar dari shell. The deallocvtperintah Destroys tty yang berada di ini zombie-seperti negara, kembali ke asli "Alt-F2 tidak apa-apa" negara.

Awalnya perintah ini dipanggil opendan disalloc, tetapi akhirnya seseorang memutuskan untuk mengubahnya karena terlalu generik dan tidak dialokasikan dinilai "tidak sepatah kata pun".

Di masa lalu itu umum untuk driver keyboard dan init untuk dikonfigurasi sehingga Alt + Up akan berjalan open, sehingga itu akan bertindak sebagai tombol pintas untuk menelurkan shell pada konsol baru. Anda mungkin masih menemukan sisa dari konfigurasi lama itu, dikomentari, di /etc/inittab. (Jika Anda tidak menggunakan beberapa init baru yang mewah yang tidak memiliki inittab.)

Ada pertanyaan serupa di sini


3
Bagus, saya tidak menyadarinya openvt. +1.
jscott

Ini sebenarnya tampak jauh lebih mudah daripada itu. Saya tidak pernah menyadari itu sudah diinstal.
StarNamer

Hanya berpikir saya akan melaporkan bahwa saya hanya menghabiskan lebih dari seminggu dengan sistem dalam mode pengguna tunggal memperbaiki array RAID dan openvtterbukti sangat berguna. Terima kasih telah membawa perintah baru ke pemberitahuan saya.
StarNamer

12

Anda dapat menelurkan yang lain gettyuntuk apa pun yang Anda inginkan. Boot ke mode pengguna tunggal, lalu mulai gettypada tty2:

root@host:~# /sbin/getty 38400 tty2 &

Anda sekarang dapat Alt+ F2ke tty baru. Ulangi untuk ttys tambahan sesuai kebutuhan. Anda mungkin dapat melakukan sesuatu yang lebih bersih dan hanya mengkonfigurasi /etc/inittabuntuk secara otomatis menangani ini dalam mode pengguna tunggal.


Ini seperti apa yang saya cari. Saya akan mencobanya lain kali.
StarNamer

Sudah mencobanya. Ini berfungsi, tetapi karena sesi login tidak muncul dari init, ia tidak bisa kembali muncul jika mati.
StarNamer

Memang, kami hanya memasukkannya ke latar belakang dalam contoh di atas. Jika Anda memerlukan penawaran lengkap dari vt nyata, Anda akan meretas /etc/inittabdan /etc/rc1.d/S??singlesetidaknya.
jscott

2

Anda mungkin dapat melakukannya tanpa instance shell tambahan dengan menggunakan JOB CONTROLshell Anda saat ini. Itu didokumentasikan di halaman manual bash(1).

Anda hanya dapat menunda tugas menggunakan urutan Ctrl+ Zsecara default, meskipun dapat dikonfigurasi di terminal Anda dengan cara yang berbeda, periksa output dari stty -a:

$ stty -a | grep susp
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;

Anda dapat memeriksa pekerjaan Anda dengan menerbitkan jobs:

# jobs
[1]   Stopped                 journalctl -f
[2]-  Stopped                 vim /etc/hosts
[3]+  Stopped                 tail -f /var/log/firewalld

Bawa salah satu dari mereka ke latar depan:

$ fg %3

Atau lanjutkan di latar belakang:

$ bg %2

Metode ini tidak memiliki banyak kelebihan screenatau tmux, tetapi dapat berguna dalam beberapa situasi.


Intinya adalah bahwa saya tidak ingin menunda atau mengganggu proses yang berjalan pada konsol awal. Misalnya, ketika menjalankan ddrescuesaya tidak ingin terus menyela dan melanjutkannya meskipun sudah diatur untuk melakukan ini ..
StarNamer

Beberapa masalah dengan ini. Untuk satu, ia tidak dapat menggunakan bash sebagai shell nya (bisa menggunakan csh, tcshatau zsh, misalnya), sehingga menyebutkan manualnya yang akan menjadi tidak akurat dalam kasus itu. Untuk yang lain, ini tidak menjawab pertanyaan seperti yang ditanyakan.
Parthian Shot

1

Pertimbangkan untuk menggunakan multiplexer terminal seperti tmux atau layar.

Cari tahu lebih lanjut tentang tmux di sini: https://github.com/tmux/tmux/wiki


Pertanyaannya menyebutkan ini sudah: "Jelas, satu metode mungkin menggunakan layar di tty1 *, tetapi ini tidak memiliki kemudahan hanya beralih sesi dengan Alt-F1, Alt-F2, dll.".
Cristian Ciupitu

Seperti yang dikatakan Cristian, saya sudah mempertimbangkan screendan merasakan multiplexer lain bahkan lebih sulit. Yang saya butuhkan hanyalah konsol kedua yang sederhana.
StarNamer

Ah, maaf, saya mengabaikan screenpertanyaan Anda. Sudah terlambat.
Marcin Kaminski

Bagaimana menggunakan kombinasi 2 kunci menjadi "berlebihan" di samping menelurkan TTY baru, dan menjangkarkannya secara terpisah dan semacamnya?
mveroone

IMO, itu definisi aneh 'berlebihan' tapi hei, apa pun yang bekerja untuk seseorang, saya baik-baik saja dengan itu;)
Marcin Kaminski
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.