tty
Что такое команда tty в Linux
Команда tty (от английского teletypewriter) возвращает путь к активному терминалу процесса. В Unix‑подобных системах терминалы представляют собой устройства, через которые пользователь взаимодействует с системой. Команда позволяет быстро определить, какой именно терминал используется для текущей сессии, а также проверить наличие открытого терминала.
Основные применения
- Диагностика подключений
При работе с удалёнными сеансами (SSH, Telnet)ttyпомогает убедиться, что ввод и вывод действительно идут через нужный терминал. - Автоматизация скриптов
В shell‑скриптах можно проверить наличие терминала перед выполнением команд, требующих интерактивного ввода. - Проверка прав доступа
Путь к устройству (например,/dev/pts/0) содержит информацию о владельце и правах, что важно для настройки безопасности.
Как использовать команду tty
| Шаг | Команда | Описание |
|---|---|---|
| 1 | tty | Выводит путь к текущему терминалу. |
| 2 | tty -s | Возвращает код завершения без вывода; полезно в условных конструкциях. |
| 3 | tty -F <device> | Проверяет, является ли указанный файл терминалом. |
Пример использования в скрипте
Bash
#!/bin/bash
if tty -s; then
echo "Терминал: $(tty)"
else
echo "Скрипт запущен без терминала"
fiЭтот фрагмент определяет, может ли пользователь взаимодействовать с консолью, и выводит путь к устройству.
Различия между физическими и виртуальными терминалами
| Тип | Путь устройства | Краткое описание |
|---|---|---|
| Физический | /dev/tty | Реальный последовательный порт (обычно не используется в современных системах). |
| Консоль | /dev/console | Системная консоль, доступна даже при отключённом терминале пользователя. |
| Pseudo-terminal | /dev/pts/* | Виртуальные терминалы, создаваемые при запуске графических сеансов и удалённых подключений. |
Команда tty обычно возвращает один из путей в каталоге /dev/pts, если сессия запущена через SSH или графическую оболочку.
Советы по работе с командой tty
- Проверка наличия терминала перед запуском интерактивных программ
Добавьтеif tty -s; then … else … fiв скрипты, чтобы избежать ошибок при выполнении в фоне. - Используйте
readlink /dev/ttyдля получения абсолютного пути
Это удобно, когда нужно передать путь к терминалу в другую программу или сохранить в лог.
Технические детали реализации
- Внутреннее устройство –
ttyобращается к системному вызовуisatty(3)и читает атрибуты файлового дескриптора 0 (stdin). - Права доступа – В Linux права на
/dev/pts/*управляются через правила udev. Обычно они принадлежат пользователю, который открывает терминал, с правамиrw. - Механизм псевдо‑терминалов – При создании PTY ядро создает пару устройств: master (
/dev/ptmx) и slave (/dev/pts/N). Командаttyвозвращает путь к slave‑у.
Как получить список всех открытых терминалов
Bash
ls -l /dev/pts/или
Bash
ps -t $(tty) -o pid,cmdЭти команды позволяют увидеть процессы, связанные с конкретным терминалом.