Перехід на батьківську оболонку, не виходячи з системи


29

Скажімо, я починаю у своєму локальному обліковому записі:

avindra@host:~>

тоді я переходжу до root:

host:~ #

Тоді я переходжу на oracle:

[ oracle@host:~]

Чи є спосіб, щоб я повернувся до кореневої оболонки (батьківської), не виходячи з оболонки Oracle?

У цьому випадку було б зручно, оскільки обліковий запис oracle не має привілеїв sudo. Так, наприклад, я перебуваю в / деякому / дійсно / глибоко / вкладеному / в каталозі Oracle, і у мене створені всілякі спеціальні змінні середовища. Але мені потрібно повернутися в root, щоб торкнутися деяких системних файлів.

Наразі я б випав із оболонки Oracle, щоб повернутися до кореня, запустити мої кореневі команди, а потім перейти назад у Oracle. Незручність полягає в тому, що я ввійшов у систему з нового початку, і я втрачаю робочий каталог та оточення.

Якщо говорити, чи є спосіб зробити те, що я прошу?


Якщо ви використовуєте робочий стіл gui, ви можете просто відкрити інше вікно або вкладку терміналу або навіть перейти на іншу віртуальну консоль. Якщо ні, використовуйте екран, як зазначено в одній з відповідей.
Джо

Я погляну на екран, я його раніше не використовував. Що стосується вкладок, то я вважаю за краще використовувати одну вкладку для хоста. Я вважаю, що робочий процес, який тягне за собою кілька вкладок на хості, є громіздким. Я багато працюю в кластерних хостах / розподілених системах, тому навіть наявність однієї вкладки на вузол кластеру може заплутатися. На мій погляд, одна вкладка = один дискретний хост.
Avindra Goolcharan

Відповіді:


41

Ви можете імітувати CTRL-Z(що зазвичай використовується для тимчасового фонового процесу) за допомогою killкоманди:

[tsa20@xxx01:/home/tsa20/software]$ kill -19 $$

[1]+  Stopped                 sudo -iu tsa20
[root@xxx01 ~]# fg
sudo -iu tsa20
[tsa20@xxx01:/home/tsa20/software]$

bashпросто захоплює CTRL-Zкомбінацію клавіш. kill -19посилає SIGSTPна процес, який фактично те саме.


1
У zshвас можна просто бігти suspend.
Мікель

3
@Mikel, zshабо csh, tcshабо bash, або оболонка Bourne або ksh... (in ksh, suspend - псевдонім для'kill -s STOP $$' (зверніть увагу на помилку з відсутніми цитатами біля $$)).
Стефан Шазелас

2
bashробить НЕ пастка CTRL-Z, при натисканні CTRL-Z, ваш емулятор терміналу посилає ^Zсимвол (0x1A) до основної стороні PTy пристрою. Потім дисципліна лінійного драйвера pty відправляє SIGTSTP до групи переднього плану терміналу. До цього часу bashвзагалі не бере участь. Цей SIGTSTP може призвести до призупинення дії лідера групи процесів, і тоді те, wait()що bashробиться на ньому, повернеться.
Стефан Шазелас

5
Зауважте, що немає гарантії, що 19буде число SIGTSTP. Використовувати kill -s TSTPабо kill -s STOP(TSTP може бути захоплено або проігноровано, STOP не може).
Стефан Шазелас

2
@ nyuszika7h, $$можливо , читати тільки, але IFSце не так. Спробуйте IFS=0123456789; suspendв ksh, наприклад.
Стефан Шазелас

3

Csh, bash, ksh, zsh, мають suspendвбудовану команду (або псевдонім у ksh), яка робить саме це. Ця команда здебільшого еквівалентна передачі сигналу TSTP в оболонку; bash і zsh роблять трохи додаткового обробника сигналів і жонглювання, і в цих оболонках suspendкоманда працює, навіть якщо оболонка в даний час ігнорує TSTP.

Ви також можете відправити сигнал в оболонку вручну за допомогою kill -STOP $$.


0

Я б також запропонував, що ви можете використовувати (встановити за потреби) програму під назвою, [screen][1]що дасть вам відкрити кілька вікон терміналів. Він був розроблений для TTYS, тому він працює просто чудово, не потребуючи X. Ви можете використовувати комбінації клавіш для перемикання між терміналами, відключення та виходу з системи, залишаючи свої термінали все ще запущеними, а потім увійти в систему та знову підключитися до них.

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


Це може бути більш доречним як коментар, а не відповідь.
Бармар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.