tty

Что такое команда tty в Linux

Команда tty (от английского teletypewriter) возвращает путь к активному терминалу процесса. В Unix‑подобных системах терминалы представляют собой устройства, через которые пользователь взаимодействует с системой. Команда позволяет быстро определить, какой именно терминал используется для текущей сессии, а также проверить наличие открытого терминала.

Основные применения

  1. Диагностика подключений
    При работе с удалёнными сеансами (SSH, Telnet) tty помогает убедиться, что ввод и вывод действительно идут через нужный терминал.
  2. Автоматизация скриптов
    В shell‑скриптах можно проверить наличие терминала перед выполнением команд, требующих интерактивного ввода.
  3. Проверка прав доступа
    Путь к устройству (например, /dev/pts/0) содержит информацию о владельце и правах, что важно для настройки безопасности.

Как использовать команду tty

ШагКомандаОписание
1ttyВыводит путь к текущему терминалу.
2tty -sВозвращает код завершения без вывода; полезно в условных конструкциях.
3tty -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

  1. Проверка наличия терминала перед запуском интерактивных программ
    Добавьте if tty -s; then … else … fi в скрипты, чтобы избежать ошибок при выполнении в фоне.
  2. Используйте 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

Эти команды позволяют увидеть процессы, связанные с конкретным терминалом.