Як запустити другу оболонку в режимі одиночного користувача?


14

Це може здатися суперечливістю термінів, але останнім часом мені потрібно було користуватися єдиним користувальницьким режимом (він же режим обслуговування) протягом деякого часу (днів!), Намагаючись відновити зламаний масив RAID.

Роблячи це, я виявив, що хочу використовувати другу оболонку для таких речей, як перевірка / редагування налаштувань у різних конфігураційних файлах або перегляд системних журналів, поки головна (і єдина) консоль пов'язана, виконуючи якийсь процес відновлення.

Що було б рекомендованою командою для запуску другої оболонки на іншій tty?

Очевидно, один метод може бути використаний screenу tty1, але це не зовсім просто в простому перемиканні сеансів з Alt-F1, Alt-F2 тощо.


4
screenтак само просто. Ctrl AP не виглядає набагато хитрішим, ніж Alt F1 ...
mveroone

Варто зауважити, що такі програми, як screenі tmuxдля керування вікнами TUI, не завжди роблять фокус. Іноді вам потрібен власне ttyXпристрій, а не pts.
Парфянський розстріл

Відповіді:


14

Там же команда спеціально розроблений для цієї ситуації: openvt. Просто запустіть openvtзі своєї оболонки на tty1, і ви знайдете оболонку, що працює на першій tty, у якої ще нічого не було (напевно, tty2.) Є кілька варіантів, які можуть вам стати корисними; дивіться сторінку openvt man.

Оскільки це не вхід, яким керує getty, при виході з нової оболонки ви не побачите підказки для входу. Tty просто загине, оскільки на ньому не буде працювати жодних процесів, але ви все одно зможете перемикатися вперед і назад (Alt-F1 Alt-F2) і бачити, що було на екрані, коли ви виходили з оболонки. У deallocvtкоманді знищує TTYs , які знаходяться в цьому зомбі як держава, повертаючись до оригіналу «Alt-F2 нічого не робить» стану.

Спочатку ці команди називалися openі disalloc, але в кінці кінців хто - то вирішив змінити їх , тому що вони були занадто загальними і disallocate був визнаний «не словом».

У старі часи драйвер клавіатури та init було налаштовано так, щоб Alt + Up працював open, тож він діяв би як гаряча клавіша для нересту оболонки на новій консолі. Ви все ще можете знайти залишок цієї старої конфігурації, прокоментований у вашій програмі /etc/inittab. (Якщо ви не використовуєте якийсь фантазійний новий ініт, у якого немає inittab.)

Там є аналогічне питання тут


3
Добре, я не знав про це openvt. +1.
jscott

Це насправді здається набагато простіше, ніж Гетті. Я ніколи не зрозумів, що це вже встановлено.
StarNamer

Щойно я подумав, що повідомив, що я провів понад тиждень із системою в єдиному користувальницькому режимі, ремонтуючи масив RAID, і openvtвиявився дуже корисним. Дякуємо за те, що я помітив нову команду.
StarNamer

12

Ви можете нерестувати ще одного, що gettyб ви хотіли. Завантажтесь в єдиному користувальницькому режимі, а потім запустіть gettyна tty2:

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

Тепер ви можете Alt+F2 перейти до нового tty. Повторіть для додаткових TTys за потребою. Можливо, ви могли б зробити щось більш чисте і просто налаштувати, /etc/inittabщоб автоматично обробляти це в режимі одного користувача.


Це схоже на те, що я шукаю. Я спробую наступного разу.
StarNamer

Спробував це. Він працює, але оскільки сеанс входу не породжений з initнього, він не буде повторно породжений, якщо він відмирає.
StarNamer

Дійсно, ми просто відкидаємо це на другий приклад у наведеному вище прикладі. Якщо вам потрібна повна пропозиція справжнього vt, ви збираєтесь зламати /etc/inittabі /etc/rc1.d/S??singleпринаймні.
jscott

2

Можливо, ви можете обійтися без додаткового екземпляра оболонки, використовуючи JOB CONTROLв поточній оболонці. Це документально зафіксовано у мапажі bash(1).

Ви можете просто призупинити завдання, використовуючи послідовність Ctrl+ Zза замовчуванням, хоча вона може бути налаштована у вашому терміналі іншим способом, перевірте вихідstty -a :

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

Ви можете перевірити свої завдання, видавши jobs :

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

Виведіть один із них на перший план:

$ fg %3

Або відновіть його у фоновому режимі:

$ bg %2

Цей спосіб не має багатьох переваг screenабо tmux, але може бути однаково корисним у деяких ситуаціях.


Справа в тому, що я не хочу призупиняти чи втручатися в процес, що працює на початковій консолі. Наприклад, під час запуску ddrescueя не хочу продовжувати перебивати його та поновлювати його, навіть якщо це налаштовано для цього ..
StarNamer

Пару питань з цим. З одного боку , він не може використовувати Баш як його оболонки (могли б використовувати csh, tcshабо zsh, наприклад), так згадуючи його сторінку керівництва буде неточним в цьому випадку. З іншого боку, це не відповідає на запитання.
Парфянський розстріл

1

Подумайте про використання термінальних мультиплексорів, таких як tmux або screen.

Дізнайтеся більше про tmux тут: https://github.com/tmux/tmux/wiki


Питання вже згадує про це: "Очевидно, одним із методів може бути використання екрана в tty1 *, але це не має простої простоти перемикання сесій з Alt-F1, Alt-F2 тощо".
Крістіан Цюпіту

Як каже Крістіан, я вже вважав, screenі вважав, що інші мультиплексори ще більше перебиті. Все, що мені потрібно, - це проста друга консоль.
StarNamer

Ах, вибачте, я не помітив screenу вашому запитанні. Було пізно.
Marcin Kaminski

Як за допомогою комбінації двох клавіш бути «надмірним» поруч з нерестуванням нових TTY, і прив’язувати їх окремо і таке?
mveroone

ІМО, це дивне визначення "надмірності", але ей, що б хто не працював, я з цим добре;)
Marcin Kaminski
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.