/dev/tty Current TTY device
/dev/console System console
/dev/tty0 Current virtual console
В старые добрые времена /dev/consoleбыла консоль системного администратора. И TTY были последовательными устройствами пользователей, подключенными к серверу. Сейчас /dev/consoleи /dev/tty0представляем текущий дисплей и обычно одинаковы. Вы можете переопределить его, например, добавив console=ttyS0в grub.conf. После этого ваш /dev/tty0монитор и /dev/consoleесть /dev/ttyS0.
Упражнение, чтобы показать разницу между /dev/ttyи /dev/tty0:
Переключитесь на 2-ую консоль нажатием Ctrl+ Alt+ F2. Войти как root. Тип sleep 5; echo tty0 > /dev/tty0. Нажмите Enterи переключитесь на 3-ю консоль, нажав Alt+ F3. Теперь переключитесь обратно на 2-ю консоль, нажав Alt+ F2. Введите sleep 5; echo tty > /dev/tty, нажмите Enterи переключитесь на 3-ю консоль.
Вы можете видеть, что ttyэто консоль, с которой начинается процесс, и tty0всегда текущая консоль.
@ SFun28: если sudo anycommandработает, то sudo -iи рут тоже работает. Не существует такой вещи, как Linux / BSD / Unix, где вы не можете получить root-права. (Тогда это больше не будет Linux / BSD / Unix.)
Evi1M4chine
59
/dev/consoleэто виртуальный набор устройств, который можно установить в качестве параметра во время загрузки. Он может быть перенаправлен на последовательное устройство или виртуальную консоль и по умолчанию указывает на /dev/tty0. Когда console=в ядро передается несколько опций, вывод консоли будет идти на более чем одно устройство.
/dev/tty0 текущая виртуальная консоль
/dev/tty[1-x]это один из виртуальных консолей вы переключитесь с control- alt- F1и так далее.
/dev/ttyэто своего рода псевдоним консоли (физического, виртуального или псевдоустройства, если таковое имеется), связанный с процессом, который его открывает. В отличие от других устройств, вам не нужны привилегии root для записи на него. Также обратите внимание, что такие процессы, как запущенные cronи подобные пакетные процессы, не могут быть использованы /dev/tty, поскольку они не связаны ни с какими. Эти процессы есть ?в TTYстолбце ps -efвывода.
Что вы подразумеваете под запросом этого утверждения: «/ dev / tty - консоль, используемая процессом, запрашивающим ее»?
Рон Винс
1
@RonVince Я имею в виду, что это /dev/ttyможет быть другое устройство, если оно есть, в зависимости от процесса, который его открывает. Ответ обновлен.
Jlliagre
Благодарю. Могу я узнать, действительно ли процессы записывают / читают в / из / dev / tty, а не прямо в / из файла устройства, связанного с ними?
Рон Винс
@RonVince Боюсь, я не уверен, что вы спрашиваете. Не могли бы вы перефразировать это?
Jlliagre
1
@RonVince Открытие / dev / tty (не /dev/tty[1,..,n]) - это стандарт Unix (и Linux) для процесса записи чего-либо в пользовательский терминал. Непосредственная запись на любое другое устройство является непереносимой, более сложной и менее надежной. Процесс не должен знать, к какому фактическому устройству подключен терминал процесса, ядро это уже знает.
В Linux консоль ядра можно настроить с помощью параметра console=загрузки . Код ядра, который вызывает, printk()может записывать в него сообщения, например, когда устройство загружено или возникает ошибка. Эти сообщения также буферизируются ядром. (См. Также dmesg). Когда консольное устройство найдено и запущено, оно получает все ранее буферизованные сообщения.
Вы можете передать console=несколько раз, чтобы настроить несколько консолей, и сообщения будут записаны на всех них. Очевидно, вы можете выбрать только одну консоль каждого «типа»: вы не можете использовать оба console=ttyS0и console=ttyS1.
Документация ядра указывает, /dev/consoleчто символьное устройство нумеруется (5,1). При открытии этого символьного устройства открывается «главная» консоль, которая является последним tty в списке консолей. Первый неядерный процесс, называемый initили «PID 1», запускается с /dev/consoleподключением к стандартному выводу, стандартной ошибке и стандартному вводу.
Если ни одна из консолей не является tty, то открытие /dev/consoleвозвращает ошибку ENODEV(«Нет такого устройства»). Ядро будетРаспечататьзарегистрировать сообщение и начать initнезависимо. Для примера консоли ядра, которая не является устройством tty, см. netconsoleИли моя любимая консоль линейный принтер .
Вы также можете увидеть список tty консолей, прочитав /sys/class/tty/console/active. В документации systemd указывается, что первое показанное устройство является главной консолью. Список на самом деле в обратном порядке командной строки ядра. В текущей документации ядра неверно указано, что последнее показанное устройство является основной или «активной» консолью. По какой-то причине возможно опросить этот файл на предмет изменений (в случае удаления консольных устройств?).
Внутри systemd-nspawnконтейнера стандартный /dev/consoleфайл заменяется псевдо-терминальным устройством (PTY). Их лучше всего описать как виртуальные терминальные устройства. Они создаются динамически, а также используются для реализации графических эмуляторов терминала, таких как GNOME Terminal, и для удаленного доступа ssh.
/ DEV / tty0
Узлы устройства Linux TTY tty1через tty63виртуальные терминалы. Их также называют VT или виртуальными консолями. Они моделируют несколько консолей поверх физического драйвера устройства консоли. Только одна виртуальная консоль отображается и контролируется одновременно. Активный терминал может быть переключен, например, используя chvt, или Ctrl + Alt + F1 через любое количество функциональных клавиш, которые у вас есть.
Вы также можете читать и писать в текущий VT, используя /dev/tty0. tty0обычная консоль ядра, например, если вы не выбрали явно. «Система сначала ищет VGA-карту [на которой работают VT], а затем - последовательный порт». Вы также можете установить консоль на определенный VT, например console=tty1.
«Если в вашей системе нет карты VGA, первый последовательный порт автоматически станет консолью». Подобно «последовательной консоли», ttyS0вероятно, является наиболее распространенной альтернативой tty0. Невозможно использовать систему VT поверх последовательной консоли.
Отсоединение от управляющего терминала является одним из шагов, традиционно необходимых для запуска фонового процесса, например , демона системного входа . Шаги, чтобы стать фоновым процессом, ужасно запутаны, но, если быть точным, шаг, который отсоединяется от управляющего терминала, является системным вызовом setsid . В более современных системах система init, например, systemd, запускает службу без какого-либо управляющего терминала.
Ответы:
Из документации :
В старые добрые времена
/dev/console
была консоль системного администратора. И TTY были последовательными устройствами пользователей, подключенными к серверу. Сейчас/dev/console
и/dev/tty0
представляем текущий дисплей и обычно одинаковы. Вы можете переопределить его, например, добавивconsole=ttyS0
вgrub.conf
. После этого ваш/dev/tty0
монитор и/dev/console
есть/dev/ttyS0
.Упражнение, чтобы показать разницу между
/dev/tty
и/dev/tty0
:Переключитесь на 2-ую консоль нажатием Ctrl+ Alt+ F2. Войти как
root
. Типsleep 5; echo tty0 > /dev/tty0
. Нажмите Enterи переключитесь на 3-ю консоль, нажав Alt+ F3. Теперь переключитесь обратно на 2-ю консоль, нажав Alt+ F2. Введитеsleep 5; echo tty > /dev/tty
, нажмите Enterи переключитесь на 3-ю консоль.Вы можете видеть, что
tty
это консоль, с которой начинается процесс, иtty0
всегда текущая консоль.источник
$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
sudo -i
, а вуаля - корневая оболочка.sudo anycommand
работает, тоsudo -i
и рут тоже работает. Не существует такой вещи, как Linux / BSD / Unix, где вы не можете получить root-права. (Тогда это больше не будет Linux / BSD / Unix.)/dev/console
это виртуальный набор устройств, который можно установить в качестве параметра во время загрузки. Он может быть перенаправлен на последовательное устройство или виртуальную консоль и по умолчанию указывает на/dev/tty0
. Когдаconsole=
в ядро передается несколько опций, вывод консоли будет идти на более чем одно устройство./dev/tty0
текущая виртуальная консоль/dev/tty[1-x]
это один из виртуальных консолей вы переключитесь с control- alt- F1и так далее./dev/tty
это своего рода псевдоним консоли (физического, виртуального или псевдоустройства, если таковое имеется), связанный с процессом, который его открывает. В отличие от других устройств, вам не нужны привилегии root для записи на него. Также обратите внимание, что такие процессы, как запущенныеcron
и подобные пакетные процессы, не могут быть использованы/dev/tty
, поскольку они не связаны ни с какими. Эти процессы есть?
вTTY
столбцеps -ef
вывода.источник
/dev/tty
может быть другое устройство, если оно есть, в зависимости от процесса, который его открывает. Ответ обновлен./ DEV / консоли
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst
В Linux консоль ядра можно настроить с помощью параметра
console=
загрузки . Код ядра, который вызывает,printk()
может записывать в него сообщения, например, когда устройство загружено или возникает ошибка. Эти сообщения также буферизируются ядром. (См. Такжеdmesg
). Когда консольное устройство найдено и запущено, оно получает все ранее буферизованные сообщения.Вы можете передать
console=
несколько раз, чтобы настроить несколько консолей, и сообщения будут записаны на всех них. Очевидно, вы можете выбрать только одну консоль каждого «типа»: вы не можете использовать обаconsole=ttyS0
иconsole=ttyS1
.Документация ядра указывает,
/dev/console
что символьное устройство нумеруется(5,1)
. При открытии этого символьного устройства открывается «главная» консоль, которая является последним tty в списке консолей. Первый неядерный процесс, называемыйinit
или «PID 1», запускается с/dev/console
подключением к стандартному выводу, стандартной ошибке и стандартному вводу.Если ни одна из консолей не является tty, то открытие
/dev/console
возвращает ошибкуENODEV
(«Нет такого устройства»). Ядро будетРаспечататьзарегистрировать сообщение и начатьinit
независимо. Для примера консоли ядра, которая не является устройством tty, см.netconsole
Или моя любимая консоль линейный принтер .Вы также можете увидеть список tty консолей, прочитав
/sys/class/tty/console/active
. В документации systemd указывается, что первое показанное устройство является главной консолью. Список на самом деле в обратном порядке командной строки ядра. В текущей документации ядра неверно указано, что последнее показанное устройство является основной или «активной» консолью. По какой-то причине возможно опросить этот файл на предмет изменений (в случае удаления консольных устройств?).Внутри
systemd-nspawn
контейнера стандартный/dev/console
файл заменяется псевдо-терминальным устройством (PTY). Их лучше всего описать как виртуальные терминальные устройства. Они создаются динамически, а также используются для реализации графических эмуляторов терминала, таких как GNOME Terminal, и для удаленного доступаssh
./ DEV / tty0
Узлы устройства Linux TTY
tty1
черезtty63
виртуальные терминалы. Их также называют VT или виртуальными консолями. Они моделируют несколько консолей поверх физического драйвера устройства консоли. Только одна виртуальная консоль отображается и контролируется одновременно. Активный терминал может быть переключен, например, используяchvt
, или Ctrl + Alt + F1 через любое количество функциональных клавиш, которые у вас есть.Вы также можете читать и писать в текущий VT, используя
/dev/tty0
.tty0
обычная консоль ядра, например, если вы не выбрали явно. «Система сначала ищет VGA-карту [на которой работают VT], а затем - последовательный порт». Вы также можете установить консоль на определенный VT, напримерconsole=tty1
.«Если в вашей системе нет карты VGA, первый последовательный порт автоматически станет консолью». Подобно «последовательной консоли»,
ttyS0
вероятно, является наиболее распространенной альтернативойtty0
. Невозможно использовать систему VT поверх последовательной консоли./ DEV / TTY
/dev/tty
является одним из трех стандартных файлов устройств, указанных в POSIX (/dev/
это одно из трех имен каталогов, указанных в POSIX). Открытие его эквивалентно открытию управляющего терминала текущего процесса. Управляющий терминал устанавливается, когда процесс впервые открывает терминал, по крайней мере, в Linux . Например, вinit
, это будет относиться к/dev/console
.Отсоединение от управляющего терминала является одним из шагов, традиционно необходимых для запуска фонового процесса, например , демона системного входа . Шаги, чтобы стать фоновым процессом, ужасно запутаны, но, если быть точным, шаг, который отсоединяется от управляющего терминала, является системным вызовом setsid . В более современных системах система init, например, systemd, запускает службу без какого-либо управляющего терминала.
источник