Из этого ответа для Linux: Разница между / dev / console, / dev / tty и / dev / tty0
Из документации :
/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/console
выглядит как файл устройства текстового физического терминала, так же как /dev/tty{1..63}
файлы устройств для виртуальных консолей.
По словам « /dev/console
и /dev/tty0
представляют текущий дисплей и обычно одинаковы», /dev/console
мне кажется, что это также может быть файл устройства виртуальной консоли. /dev/console
похоже больше, /dev/tty0
чем нравится /dev/tty{1..63}
( /dev/tty0
в настоящее время активная виртуальная консоль, и может быть любой из /dev/tty{1..63}
).
Что такое /dev/console
? Для чего его используют?
Играет ли /dev/console
ядро Linux ту же роль, что /dev/tty
и процесс? ( /dev/tty
является управляющим терминалом сеанса процесса и может быть pts, /dev/ttyn
где n
от 1 до 63 или больше?)
В другом ответе упоминается:
В документации ядра указано
/dev/console
символьное устройство с номером 5: 1. При открытии этого символьного устройства открывается «главная» консоль, которая является последним tty в списке консолей.
Есть ли «список консолей» означает все console=
«S в варианте загрузки ?
« /dev/console
Как символьное устройство с номером 5: 1» означает ли это, что /dev/console
это файл устройства физического текстового терминала, то есть системной консоли? (Но, опять же, первый ответ, который я цитировал выше, говорит, что это /dev/console
может быть /dev/tty0
не физический текстовый терминал, а виртуальная консоль)
Благодарю.
Ответы:
/dev/console
существует главным образом для предоставления консоли ядра пользовательскому пространству. Документация ядра Linux на устройствах теперь говорит/dev/console
узел устройства со старшим 5 и второстепенным 1 обеспечивает доступ ко всему, что ядро считает своими основными средствами взаимодействия с системным администратором; это может быть физическая консоль, подключенная к системе (с абстракцией виртуальной консоли сверху, так что она может использоватьtty0
или любую,ttyN
где N находится между 1 и 63), или последовательная консоль, или консоль гипервизора, или даже устройство Брайля. Обратите внимание, что само ядро не использует/dev/console
: узлы устройств предназначены для пространства пользователя, а не для ядра; он, однако, проверяет, что/dev/console
существует и может использоваться, и настраиваетсяinit
со стандартным вводом, выводом и ошибкой, указывающими на/dev/console
.Как описано здесь,
/dev/console
это символьное устройство с фиксированным основным и второстепенным, потому что это отдельное устройство (например, средство доступа к ядру; не физическое устройство), не эквивалентное/dev/tty0
или любое другое устройство. Это несколько похоже на ситуацию, в/dev/tty
которой находится его собственное устройство (5: 0), поскольку оно предоставляет немного отличающиеся функции, чем другие виртуальные консоли или терминальные устройства.«Список консолей» - это действительно список консолей, определяемых
console=
параметрами загрузки (или консоль по умолчанию, если таковых нет). Вы можете увидеть консоли, определенные таким образом, посмотрев на/proc/consoles
./dev/console
действительно предоставляет доступ к последнему из них :источник
"Что такое
/dev/console
?" ответ в предыдущем ответе . Возможно, этот ответ более ясен, если вы знаете ответы на два других вопроса.Q1. «Что такое файл устройства, представляющий сам физический терминал?»
Нет такого файла устройства.
Q2. "Для чего
/dev/console
используется?"В Linux
/dev/console
используется для отображения сообщений во время запуска (и выключения). Он также используется для «однопользовательского режима», как указано в ответе Стивена Китта. Существует не так много, имеет смысл использовать его для.«В старые добрые времена» Unix
/dev/console
был выделенным физическим устройством. Но это не так в Linux.Связанные доказательства
1. «Что такое файл устройства, представляющий сам физический терминал?»
Основное устройство (а) для
/dev/tty{1..63}
являютсяstruct con_driver
. Чтобы увидеть все возможные драйверы, проверьте https://elixir.bootlin.com/linux/v4.19/ident/do_take_over_consoleДля этих базовых устройств нет файлов устройств!
Существует только минимальный пользовательский интерфейс для управления ими.
Если вы действительно хотите знать больше, обозначает модуль . Т.е. фиктивное консольное устройство не предоставляется загружаемым модулем ядра; это часть исходного образа ядра (он же «встроенный»).
(M)
Во-вторых,
bind
файл в каждом подкаталоге/sys/class/vtconsole
появляется, чтобы сообщить вам, какое устройство vtconsole активно. Если я пишу0
активному, он переключается на фиктивный. (VT GUI кажутся незатронутыми, но текстовые VT перестают работать). Письмо1
для фиктивного не активирует его. Любой метод работает, чтобы вернуться к реальному. Если я правильно прочитал код, дело в том, чтоecho 1 > bind
он должен работать только для драйверов консоли, которые построены как модуль (?!).В частности, для консолей с кадровым буфером есть дополнительная информация о привязке различных устройств кадрового буфера (
/dev/fb0
...) к конкретным виртуальным консолям в https://kernel.org/doc/Documentation/fb/fbcon.txt . Это включает параметр ядраfbcon:map=
или команду с именемcon2fbmap
.Конечно, детали могут различаться в зависимости от версии ядра, архитектуры, прошивки, устройств, драйверов и т. Д. Мне никогда не приходилось использовать ни один из перечисленных выше интерфейсов. Ядро просто позволяет
i915
/inteldrmfb
/ все , что вы хотите назвать это взять на себя , когда он загружает, заменяя , напримерvgacon
.Похоже, моя машина EFI никогда не имела
vgacon
. Так, во-первых, он использует фиктивную консоль, а во-вторых, через 1,2 секунды он переключается в режимfbcon
работы поверхefifb
. Но до сих пор мне не было дела до деталей; это просто работает.2. «Для чего
/dev/console
используется?»Вы можете использовать / dev / console как устройство TTY. Запись в него, например, приведет к записи в конкретное базовое устройство, которое также будет иметь собственный номер символьного устройства.
Часто / dev / console привязан к / dev / tty0, но иногда он может быть привязан к другому устройству.
Поэтому в этом случае запись в / dev / console приведет к записи в / dev / tty0. И, в свою очередь, запись в / dev / tty0 эквивалентна записи в любое активное устройство / dev / ttyN.
Но это поднимает интересный вопрос. При
tty0
доступе будут доступны разные виртуальные консоли, в зависимости от того, какая из них активна в данный момент. Что люди на самом деле используютtty0
, и так же, какconsole
для Linux?Технически вы можете читать и писать из
console
/tty0
, например, запустив,getty
чтобы разрешить вход в системуtty0
. Но это полезно только как быстрый взлом. Потому что это означает, что вы не можете использовать преимущества нескольких виртуальных консолей Linux.systemd
ищетsysfs
атрибут, связанный с устройством / dev / console, чтобы обнаружить базовое устройство TTY. Это позволяетsystemd
автоматически порождать agetty
и разрешать вход в систему, например, на последовательной консоли, когда пользователь настраивает консоль ядра путем загрузки сconsole=ttyS0
. Это удобно; это избавляет от необходимости настраивать эту консоль в двух разных местах. Снова смотриman systemd-getty-generator
. Однако наsystemd
самом деле не открывается/dev/console
для этого.Во время начальной загрузки системы у вас может даже не быть sysfs. Но вы хотите иметь возможность показывать сообщения об ошибках и прогресс как можно скорее! Итак, мы обходим вокруг пункта 1). Ядро запускает PID 1 с подключенным stdin / stdout / stderr
/dev/console
. Очень приятно иметь этот простой механизм с самого начала.Внутри контейнера Linux файл at
/dev/console
может быть создан как нечто иное, а не символьный номер устройства5:1
. Вместо этого он может быть создан как файл устройства PTS. Тогда имеет смысл войти через этот/dev/console
файл.systemd
внутри контейнера позволит войти на таком устройстве; смman systemd-getty-generator
.Этот механизм используется при запуске контейнера с помощью
systemd-nspawn
команды. (Я думаю, только когда вы работаетеsystemd-nspawn
на TTY, хотя я не могу судить по поиску на странице man).systemd-nspawn
создает контейнер/dev/console
как связывающее устройство устройства PTS с хоста. Это означает, что это устройство PTS не видно внутри/dev/pts/
контейнера.Устройства PTS являются локальными для определенного
devpts
монтирования. Устройства PTS являются исключением из обычного правила: устройства идентифицируются по номеру устройства. Устройства PTS идентифицируются по комбинации номера устройства и ихdevpts
подключения.Вы можете писать срочные сообщения в
console
/tty0
, чтобы записать в текущую виртуальную консоль пользователя. Это может быть полезно для срочных сообщений об ошибках в пользовательском пространстве, аналогично срочным сообщениям ядра, которые выводятся на консоль (см.man dmesg
). Однако это не распространено, по крайней мере, после завершения загрузки системы.rsyslog имеет один пример на этой странице , который печатает сообщения ядра
/dev/console
; в Linux это бессмысленно, потому что ядро уже сделает это по умолчанию. Один пример, который я не могу найти снова, говорит о том, что не стоит использовать это для сообщений, не относящихся к ядру, потому что слишком много сообщений системного журнала, вы заполняете консоль, и она слишком сильно мешает.systemd-journald также имеет опции для пересылки всех журналов на консоль. В принципе это может быть полезно для отладки в виртуальной среде. Хотя для отладки мы обычно ждем
/dev/kmsg
вместо этого. Это сохраняет их в буфере журнала ядра, чтобы вы могли читать их с помощьюdmesg
. Как и сообщения, сгенерированные самим ядром, эти сообщения могут выводиться на консоль в зависимости от текущей конфигурации ядра.источник
xconsole
для отслеживания происходящего ;-). (И чтобы избежать записи сообщений непосредственно в кадровый буфер, например, на SPARCstations.)/dev/tty{1..63}
и/dev/pts/n
являются файлами устройств, представляющими сами устройства (хотя они являются эмуляциями), а не по отношению к процессу или ядру./dev/tty0
представляет тот, в/dev/tty{1..63}
котором в данный момент что-то используется (может, процесс ядра или оболочки?)./dev/tty
представляет управляющий терминал, в настоящее время используемый сеансом процесса./dev/console
представляет терминал, используемый в настоящее время ядром? Что представляет собой файл устройства, представляющий сам физический терминал, а не по отношению к ядру или процессу?