В системе Linux, в чем разница /dev/console, /dev/ttyи /dev/tty0?
Каково их соответствующее использование и как они сравниваются?
В системе 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/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может быть другое устройство, если оно есть, в зависимости от процесса, который его открывает. Ответ обновлен.
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.
Узлы устройства Linux TTY tty1через tty63виртуальные терминалы. Их также называют VT или виртуальными консолями. Они моделируют несколько консолей поверх физического драйвера устройства консоли. Только одна виртуальная консоль отображается и контролируется одновременно. Активный терминал может быть переключен, например, используя chvt, или Ctrl + Alt + F1 через любое количество функциональных клавиш, которые у вас есть.
Вы также можете читать и писать в текущий VT, используя /dev/tty0. tty0обычная консоль ядра, например, если вы не выбрали явно. «Система сначала ищет VGA-карту [на которой работают VT], а затем - последовательный порт». Вы также можете установить консоль на определенный VT, например console=tty1.
«Если в вашей системе нет карты VGA, первый последовательный порт автоматически станет консолью». Подобно «последовательной консоли», ttyS0вероятно, является наиболее распространенной альтернативой tty0. Невозможно использовать систему VT поверх последовательной консоли.
/dev/ttyявляется одним из трех стандартных файлов устройств, указанных в POSIX ( /dev/это одно из трех имен каталогов, указанных в POSIX). Открытие его эквивалентно открытию управляющего терминала текущего процесса. Управляющий терминал устанавливается, когда процесс впервые открывает терминал, по крайней мере, в Linux . Например, в init, это будет относиться к /dev/console.
Отсоединение от управляющего терминала является одним из шагов, традиционно необходимых для запуска фонового процесса, например , демона системного входа . Шаги, чтобы стать фоновым процессом, ужасно запутаны, но, если быть точным, шаг, который отсоединяется от управляющего терминала, является системным вызовом setsid . В более современных системах система init, например, systemd, запускает службу без какого-либо управляющего терминала.