В Ubuntu 14.04 вы можете сделать это следующим образом:
sudo aptitude install libgtk2.0-0:i386 libcanberra-gtk0:i386 libdbus-glib-1-2:i386 libgconf-2-4:i386 liborbit-2-0:i386 libusb-0.1-4:i386 libgnomevfs2-0:i386 libice6:i386 libncurses5:i386 libsm6:i386 libxtst6:i386 libxt6:i386 libasound2:i386 libgcrypt11:i386 libudev0:i386
После выполнения sudo su или su user создается новая оболочка.
Выполнение exit (или Ctrl + D) приведет к завершению создания новой оболочки и вернет вас к предыдущей shell.
Начальная точка - оболочка bash работает на PID 25050:$ ps
PID TTY TIME CMD
25050 pts/17 00:00:00 bash
25200 pts/17 00:00:00 ps
Запуск sudo su создает новый процесс bash, который работает на PID 25203: $ sudo su
# ps
PID TTY TIME CMD
25201 pts/17 00:00:00 sudo
25202 pts/17 00:00:00 su
25203 pts/17 00:00:00 bash
25213 pts/17 00:00:00 ps
# exit
Выход из sudo su и возврат к начальная точка - оболочка bash работает на PID 25050: $ ps
PID TTY TIME CMD
25050 pts/17 00:00:00 bash
25214 pts/17 00:00:00 ps
$
Реальные процессы, которые вы запускаете из оболочки, включая дочерние оболочки, автоматически используют один и тот же терминал. Это никак не относится к sudo - обычно это работает, когда вы запускаете какую-либо программу из своей оболочки.
Корпуса и терминалы - это разные вещи. Оболочка - это то, что вы используете для запуска команд в терминале. Оболочка может работать в интерактивном режиме - она дает вам подсказку, вы даете ей команду, она запускает команду или показывает ошибку о том, почему она не может, и процесс повторяется, пока вы не покинете оболочку.
Даже если ваш терминал (возможно!) [D3] Корпуса и терминалы - это разные вещи. , а не физическая, тем не менее shell [ ! d4], такие как Ubuntu, назначают узлы устройства каждому из ваших терминалов, и вы можете проверить, какой терминал вы используете с помощью команды terminal . Обычно это /dev/pts/0, /dev/pts/1, /dev/pts/2 и т. Д., Для сценария или SSH-соединения, или /dev/tty1, /dev/tty2 и т. Д. Для виртуальных консолей. На самом деле, что tty делает, это сказать вам, какой терминал, если таковой имеется, берется из; см. ниже.
ek@Io:~$ tty
/dev/pts/1
ek@Io:~$ bash
ek@Io:~$ tty
/dev/pts/1
ek@Io:~$ exit
exit
ek@Io:~$ sudo su
[sudo] password for ek:
root@Io:/home/ek# tty
/dev/pts/1
root@Io:/home/ek# exit
exit
ek@Io:~$
Вы можете видеть, что, хотя sudo su создает новую оболочку физический , используемый вами терминал не изменяется.
Конечно, есть еще один способ заметить, что терминал один и тот же: вы все равно записываете ввод таким же образом и в том же месте, и читаете вывод таким же образом и в одном и том же месте.
Большинство команд, которые вы запускаете в оболочке, такие как ls, cp, mv, rm, touch, wc, du, df, ssh, su, sudo, sh, bash и многие другие - приводят к созданию дочернего процесса. Этот дочерний процесс имеет свою оболочку в качестве родителя, но это отдельная программа. По умолчанию он подключен к тому же терминалу, что и ваша оболочка.
Ваша оболочка все еще запущена, но она ждет в фоновом режиме для завершения программы (или для вас дочерний процесс ).
Это основные исключения:
Оболочка встроена, как cd, не работает, t создать новый процесс вообще, если они не используются в конструкции, которая использует подоболочку (объяснено здесь), такую как группировка ( ) и конвейеры. Вы можете сказать оболочке не дождаться завершения команды, выполнив команду асинхронно. Вы делаете это, завершая команду с помощью &. (your-command arguments... &) Вы можете использовать управление заданиями для изменения команды, если таковая имеется, оболочка ждет. С встроенным disown вы можете отделить задания от своего терминала.Хотя я бы не стал рассматривать это исключение для дочерних процессов, подключенных к тому же терминалу, что и их родительский элемент, обратите внимание, что процесс, который вы запускаете из оболочки в терминале, будет Most всегда берут вход с этого терминала или отправляют вывод на этот терминал:
Встроенные оболочки, такие как cd, вообще не создают новый процесс, если только они не используются в конструкции, которая использует (см. здесь), например ( ) группировка и конвейеры. Вы можете Shell встроили вывод одной команды в другую подоболочку с |.Поскольку команда tty проверяет только, на каком терминале находится его стандартный вход, вы можете «обмануть» его:
ek@Io:~$ tty
/dev/pts/1
ek@Io:~$ tty </dev/pts/0
/dev/pts/0
Или менее коварно:
ek@Io:~$ tty </dev/null # not a terminal
not a tty
ek@Io:~$ tty <&- # closes the input stream
not a tty
Реальные процессы, которые вы запускаете из оболочки, включая дочерние оболочки, автоматически используют один и тот же терминал. Это никак не относится к sudo - обычно это работает, когда вы запускаете какую-либо программу из своей оболочки.
Корпуса и терминалы - это разные вещи. Оболочка - это то, что вы используете для запуска команд в терминале. Оболочка может работать в интерактивном режиме - она дает вам подсказку, вы даете ей команду, она запускает команду или показывает ошибку о том, почему она не может, и процесс повторяется, пока вы не покинете оболочку.
Даже если ваш терминал (возможно!) Корпуса и терминалы - это разные вещи. , а не физическая, тем не менее shell [ ! d4], такие как Ubuntu, назначают узлы устройства каждому из ваших терминалов, и вы можете проверить, какой терминал вы используете с помощью команды terminal . Обычно это /dev/pts/0, /dev/pts/1, /dev/pts/2 и т. Д., Для сценария или SSH-соединения, или /dev/tty1, /dev/tty2 и т. Д. Для виртуальных консолей. На самом деле, что tty делает, это сказать вам, какой терминал, если таковой имеется, берется из; см. ниже.
ek@Io:~$ tty
/dev/pts/1
ek@Io:~$ bash
ek@Io:~$ tty
/dev/pts/1
ek@Io:~$ exit
exit
ek@Io:~$ sudo su
[sudo] password for ek:
root@Io:/home/ek# tty
/dev/pts/1
root@Io:/home/ek# exit
exit
ek@Io:~$
Вы можете видеть, что, хотя sudo su создает новую оболочку физический , используемый вами терминал не изменяется.
Конечно, есть еще один способ заметить, что терминал один и тот же: вы все равно записываете ввод таким же образом и в том же месте, и читаете вывод таким же образом и в одном и том же месте. [!d26 ]
Большинство команд, которые вы запускаете в оболочке, такие как ls, cp, mv, rm, touch, wc, du, df, ssh, su, sudo, sh, bash и многие другие - приводят к созданию дочернего процесса. Этот дочерний процесс имеет свою оболочку в качестве родителя, но это отдельная программа. По умолчанию он подключен к тому же терминалу, что и ваша оболочка.
Ваша оболочка все еще запущена, но она ждет в фоновом режиме для завершения программы (или для вас дочерний процесс [!d31 ]).
Это основные исключения:
Оболочка встроена, как cd, не работает, t создать новый процесс вообще, если они не используются в конструкции, которая использует подоболочку (объяснено здесь), такую как группировка ( ) и конвейеры. Вы можете сказать оболочке не дождаться завершения команды, выполнив команду асинхронно. Вы делаете это, завершая команду с помощью &. (your-command arguments... &) Вы можете использовать управление заданиями для изменения команды, если таковая имеется, оболочка ждет. С встроенным disown вы можете отделить задания от своего терминала.Хотя я бы не стал рассматривать это исключение для дочерних процессов, подключенных к тому же терминалу, что и их родительский элемент, обратите внимание, что процесс, который вы запускаете из оболочки в терминале, будет Most [!d29 ] всегда берут вход с этого терминала или отправляют вывод на этот терминал:
Встроенные оболочки, такие как cd, вообще не создают новый процесс, если только они не используются в конструкции, которая использует (см. здесь), например ( ) группировка и конвейеры. Вы можете Shell встроили вывод одной команды в другую подоболочку с |.Поскольку команда tty проверяет только, на каком терминале находится его стандартный вход, вы можете «обмануть» его:
ek@Io:~$ tty
/dev/pts/1
ek@Io:~$ tty </dev/pts/0
/dev/pts/0
Или менее коварно:
ek@Io:~$ tty </dev/null # not a terminal
not a tty
ek@Io:~$ tty <&- # closes the input stream
not a tty
Реальные процессы, которые вы запускаете из оболочки, включая дочерние оболочки, автоматически используют один и тот же терминал. Это никак не относится к sudo - обычно это работает, когда вы запускаете какую-либо программу из своей оболочки.
Корпуса и терминалы - это разные вещи. Оболочка - это то, что вы используете для запуска команд в терминале. Оболочка может работать в интерактивном режиме - она дает вам подсказку, вы даете ей команду, она запускает команду или показывает ошибку о том, почему она не может, и процесс повторяется, пока вы не покинете оболочку.
Даже если ваш терминал (возможно!) [D3] Корпуса и терминалы - это разные вещи. , а не физическая, тем не менее shell [ ! d4], такие как Ubuntu, назначают узлы устройства каждому из ваших терминалов, и вы можете проверить, какой терминал вы используете с помощью команды terminal . Обычно это /dev/pts/0, /dev/pts/1, /dev/pts/2 и т. Д., Для сценария или SSH-соединения, или /dev/tty1, /dev/tty2 и т. Д. Для виртуальных консолей. На самом деле, что tty делает, это сказать вам, какой терминал, если таковой имеется, берется из; см. ниже.
ek@Io:~$ tty
/dev/pts/1
ek@Io:~$ bash
ek@Io:~$ tty
/dev/pts/1
ek@Io:~$ exit
exit
ek@Io:~$ sudo su
[sudo] password for ek:
root@Io:/home/ek# tty
/dev/pts/1
root@Io:/home/ek# exit
exit
ek@Io:~$
Вы можете видеть, что, хотя sudo su создает новую оболочку физический , используемый вами терминал не изменяется.
Конечно, есть еще один способ заметить, что терминал один и тот же: вы все равно записываете ввод таким же образом и в том же месте, и читаете вывод таким же образом и в одном и том же месте.
Большинство команд, которые вы запускаете в оболочке, такие как ls, cp, mv, rm, touch, wc, du, df, ssh, su, sudo, sh, bash и многие другие - приводят к созданию дочернего процесса. Этот дочерний процесс имеет свою оболочку в качестве родителя, но это отдельная программа. По умолчанию он подключен к тому же терминалу, что и ваша оболочка.
Ваша оболочка все еще запущена, но она ждет в фоновом режиме для завершения программы (или для вас дочерний процесс ).
Это основные исключения:
Оболочка встроена, как cd, не работает, t создать новый процесс вообще, если они не используются в конструкции, которая использует подоболочку (объяснено здесь), такую как группировка ( ) и конвейеры. Вы можете сказать оболочке не дождаться завершения команды, выполнив команду асинхронно. Вы делаете это, завершая команду с помощью &. (your-command arguments... &) Вы можете использовать управление заданиями для изменения команды, если таковая имеется, оболочка ждет. С встроенным disown вы можете отделить задания от своего терминала.Хотя я бы не стал рассматривать это исключение для дочерних процессов, подключенных к тому же терминалу, что и их родительский элемент, обратите внимание, что процесс, который вы запускаете из оболочки в терминале, будет Most всегда берут вход с этого терминала или отправляют вывод на этот терминал:
Встроенные оболочки, такие как cd, вообще не создают новый процесс, если только они не используются в конструкции, которая использует (см. здесь), например ( ) группировка и конвейеры. Вы можете Shell встроили вывод одной команды в другую подоболочку с |.Поскольку команда tty проверяет только, на каком терминале находится его стандартный вход, вы можете «обмануть» его:
ek@Io:~$ tty
/dev/pts/1
ek@Io:~$ tty </dev/pts/0
/dev/pts/0
Или менее коварно:
ek@Io:~$ tty </dev/null # not a terminal
not a tty
ek@Io:~$ tty <&- # closes the input stream
not a tty