Назад | Перейти на главную страницу

Как запустить вторую оболочку в однопользовательском режиме?

Это может звучать как противоречие с точки зрения терминологии, но недавно мне пришлось использовать однопользовательский режим (он же режим обслуживания) в течение некоторого времени (дней!), Пытаясь восстановить сломанный массив RAID.

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

Какую команду рекомендуется использовать для запуска второй оболочки на другом терминале?

Очевидно, что одним из способов может быть использование screen в tty1, но это не совсем простое переключение сеансов с помощью Alt-F1, Alt-F2 и т. д.

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

Поскольку это не вход в систему, управляемый getty, при выходе из новой оболочки вы не увидите подсказки входа в систему. Терминал просто отключится, поскольку на нем не будет запущенных процессов, но вы все равно сможете переключаться вперед и назад (Alt-F1, Alt-F2) и видеть, что было на экране, когда вы выходили из оболочки. В deallocvt команда уничтожает ttys, которые находятся в этом зомби-подобном состоянии, возвращаясь в исходное состояние «Alt-F2 ничего не делает».

Первоначально эти команды назывались open и disalloc, но в конце концов кто-то решил их поменять, потому что они были слишком общими, а дислокация была сочтена «ни словом».

Раньше драйвер клавиатуры и init настраивались так, чтобы запускались Alt + Up. open, поэтому он будет действовать как горячая клавиша для создания оболочки на новой консоли. Вы все еще можете найти остатки этой старой конфигурации, закомментированные, в вашем /etc/inittab. (Если вы не используете какой-нибудь модный новый init, у которого нет inittab.)

Есть похожий вопрос Вот

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

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

Вы можете сейчас Alt+F2 перейти к новому терминалу. При необходимости повторите для дополнительных tty. Возможно, вы могли бы сделать что-нибудь более чистое и просто настроить /etc/inittab для автоматической обработки этого в однопользовательском режиме.

Вероятно, вы можете обойтись без дополнительного экземпляра оболочки, используя 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, но может быть одинаково полезен в некоторых ситуациях.

Рассмотрите возможность использования терминальных мультиплексоров, таких как tmux или screen.

Узнайте больше о tmux здесь: https://github.com/tmux/tmux/wiki