Что хранится в/dev/pts файлах, и мы можем открыть их?

ADD эти строки к ~/.bashrc

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

    ;;
*)
    ;;
esac

работы хорошо с debian основывали Linux

75
20.01.2015, 11:37
3 ответа

Файлы в /dev/pts "pseudo-ttys". Они похожи на именованные каналы до степени, но они также подражают старым терминалам последовательного соединения, как VT-100s. Pseudo-ttys делают работу передачи байтов от клавиатуры до программы, и с программы на устройство вывода, которое звучит простым. Но это отвечает на Ваш explicity вопрос: ядро ничего не хранит в /dev/pts/0 например. Только потоки байтов от stdout программы, подключенной к pseudo-tty, входят, и программы, stdin которых подключен к тому же pseudo-tty, читают те байты.

Pseudo-ttys также помещают слой косвенности в те потоки байтов. Ядро может осмотреть байты для специальных значений как "Ctrl-C" или "Управление-D" или "Управление-U" (которые все настраиваются, видят man stty) и отправьте SIGINT, установите конец файла на stdin или сотрите строку на входе. Существует также функция буферизации там где-нибудь, таким образом, мои "хранилища ничто" не несколько неправильно, но только несколькими килобайтами.

Ядро может осмотреть значения байта на выводе и сделать вещам нравится, поворачивают новую строку (перевод строки ASCII, LF или "\n") в два байта, возврат каретки и перевод строки (CRLF или "\r\n"), или безотносительно байтов аппаратные средства последовательного терминала требуют. Косвенность pseudo-tty позволяет независимость от аппаратных средств.

Pseudo-ttys также позволяют всю "скорость в бодах набора", "установил четность" и т.д ioctl() системные вызовы, и вероятно ничего не делают с ними. Это позволяет программам, которые были записаны обратно в день VT-100s, ADM-3 и Wyse whatevers продолжают работать без erroring. Программное обеспечение, pseudo-ttys драйвер устройства, действует как аппаратные средства.

Pseudo-ttys может использоваться sshd и telnet, но они также используются между эмулятором терминала (как xterm или rxvt) и оболочка, которая обычно работает в xterm.

Linux и много Unixes имеют pseudo-ttys. План 9 не делает. Pseudo-ttys являются чем-то вроде пережитка, перенесенный со дней последовательного кабеля подключил аппаратные терминалы.

20
27.01.2020, 19:31

Ничто не хранится в /dev/pts. Эта файловая система живет просто в памяти.

Записи в /dev/pts псевдотерминалы (имущество, если коротко). Ядра Unix имеют универсальное понятие терминалов. Терминал позволяет, чтобы приложения отобразили вывод и получить вход через оконечное устройство. Процесс может иметь терминал управления — для приложения текстового режима, это - то, как он взаимодействует с пользователем.

Терминалы могут быть любой аппаратными терминалами (“tty”, короткий для “телетайпа”) или псевдотерминалы (“имущество”). Аппаратные терминалы подключены по некоторому интерфейсу, такому как последовательный порт (ttyS0, …) или USB (ttyUSB0, …) или по экрану PC и клавиатуре (tty1, …). Псевдотерминалы обеспечиваются эмулятором терминала, который является приложением. Некоторые типы псевдотерминалов:

  • Приложения GUI, такие как xterm, терминал гнома, консоль, … преобразовывает события клавиатуры и события от нажатия мыши во ввод текста и отображает вывод графически в некотором шрифте.
  • Приложения мультиплексора, такие как экран и tmux релейный ввод и вывод с и на другой терминал, для отделения приложений текстового режима от фактического терминала.
  • Удаленные приложения оболочки, такие как sshd, telnetd, rlogind, … релейный ввод и вывод между удаленным терминалом на клиенте и имуществом на сервере.

Если программа открывает терминал для записи, вывод из той программы появляется на терминале. Распространено иметь несколько выводов программ к терминалу одновременно, хотя это может время от времени сбивать с толку, поскольку нет никакого способа сказать, какая часть вывода прибыла из который программа. Фоновые процессы, которые пытаются записать в их терминал управления, могут быть автоматически приостановлены сигналом SIGTTOU.

Если программа открывает терминал для чтения, вход от пользователя передается той программе. Если несколько программ читают из того же терминала, каждый символ направляется независимо к одной из программ; это не рекомендуется. Обычно существует только единственная программа, активно читая из терминала в установленный срок; программы, которые пытаются читать из их терминала управления, в то время как они не находятся на переднем плане, автоматически приостановлены сигналом SIGTTIN.

Для экспериментирования работать tty в терминале для наблюдения, каково оконечное устройство. Скажем, это /dev/pts/42. В оболочке в другом терминале, выполненном echo hello >/dev/pts/42: строка hello будет отображен на другом терминале. Теперь выполненный cat /dev/pts/42 и введите в другом терминале. Уничтожить это cat команда (который сделает другой терминал трудно для использования), нажмите Ctrl+C.

Запись в другой терминал иногда полезна для отображения уведомления; например, write команда делает это. Чтение из другого терминала обычно не делается.

111
27.01.2020, 19:31
  • 1
    Или я неправильно понимаю то, что Вы пытаетесь сказать, или Ваша информация выключена. Процессы Backgrounded, пишущие в терминал, не приведут к SIGTTIN. И при этом несколько программ не могут читать из терминала одновременно (Ваш оператор, что "каждый символ направляется независимо"). Только одна программа может читать из терминала в любое время, и попытка фоновой программы для чтения из того терминала приведет к SIGTTIN. Это - единственный случай, куда SIGTTIN автоматически отправляется. –  Patrick 05.10.2013, 08:14
  • 2
    Также Вы не можете читать из другого терминала также. Сделать так было бы значительной уязвимостью системы обеспечения безопасности, поскольку Вы сможете прервать данные. Вы можете strace вход чтения программы, но это - это. –  Patrick 05.10.2013, 08:20
  • 3
    @Patrick, пишущие в терминал, получают SIGTTOU, который был опечаткой. Несколько программ могут читать из терминала одновременно (попробуйте его и посмотрите, способ, которым я описываю в следующем абзаце; необходимо сделать это от процесса, управление которого терминалом не является тем терминалом). Да, можно ли читать из другого терминала, пока он принадлежит Вам — почему Вы думаете, что это было бы невозможно? –  Gilles 'SO- stop being evil' 05.10.2013, 14:09
  • 4
    , пишущие в терминал только, получают SIGTTOU если tostop флаг tty установлен. Этот флаг не установлен по умолчанию. И я признаю ошибку на чтении от другого TTY. Я попробовал его, и это действительно работает, но это находится на основе на чтение, не основании на символ (при нахождении при приглашении оболочки, они совпадают с чтением оболочек 1 символ за один раз). Могло бы быть хорошо прояснить эту мысль, как это теперь, как я интерпретировал Ваш ответ. –  Patrick 05.10.2013, 19:05
  • 5
    @Patrick Несомненно, a read вызов только возвратит последовательные символы (или скорее байты, я должен сказать), но приложение не имеет никакого контроля сколько байтов a read вызов возвратится, таким образом, это будет не лучше. –  Gilles 'SO- stop being evil' 06.10.2013, 21:13

/dev/ специальный каталог для файлов устройств. Это абстракции, они не реальные файлы на диске. Каталог заполняется при начальной загрузке и подлежащий изменению для отражения существующих интерфейсов устройства, которые создаются и уничтожаются ядром и демоном пространства пользователя, udevd.

Многие устройства, так представленные, являются виртуальными. Это включает записи в /dev/pts, которые являются консольными устройствами. Поэтому каждый создается для удаленных сеансов; они также создаются, когда Вы открываете локальный терминал GUI.

Можно открыть их как файлы, хотя это не имеет большого количества ценности использования. Добираться /dev/pts узел Ваша оболочка соединен, использование tty:

> tty
/dev/pts/4

Теперь переключитесь на некоторую другую консоль и попытку:

> echo "duck!" > /dev/pts/4

Умный. Теперь попытка:

> cat /dev/pts/4

Затем попытайтесь использовать оболочку в/dev/pts/4. Вы застреваете, пока Вы не выходите cat с другой стороны, но большая часть того, что Вы вводите на pts/4, пройдет (например, пробующий "привет мир", я закончил с hl на pts/4 и ello word на cat консоль).

Мое предположение здесь - то, что устройство берет вход от оболочки и производит его через систему, которая является, как материал заканчивается на экране - оболочка не имеет дело с аппаратными средствами, система. Попробовать strace bash (и взгляните на man strace если Вы не знаете то, что это); Вы получаете предварительный шквал вызовов, поскольку удар запускает. Теперь начните нажимать клавиши:

read(0, "h", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "h", 1h)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, "e", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "e", 1e)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, "y", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "y", 1y)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0

Для каждой буквы, введенной существует чтение от стандартного входа и записи к стандарту. Но с чем оболочка является стандартной подключенная? Теперь попробуйте strace на Вашем терминале GUI - необходимо будет выяснить имя, если Вы не знаете это, например, на KDE это konsole, и GNOME имеет gnome-terminal, Я верю. Вывод от этого strace является, вероятно, более загадочным - мой имеет много из poll() и recvfrom(). Я не вижу записей, но если Вы теперь вытягиваете cat прием от другого терминала, Вы заметите, когда Вы введете, нажатия клавиш, которые читаются кошкой, не вызывают ответа вообще в выводе strace - терминал не получает их. Таким образом, приложение для терминала GUI и кошка конкурируют для чтения из того же устройства, в которое оболочка является выводом.

14
27.01.2020, 19:31
  • 1
    , что является использованием 'кошки/dev/pts/4', когда мы застреваем и почему мы - stucking при выполнении этой команды. –  user2720323 04.10.2013, 11:14
  • 2
    я добавил несколько абзацев, чтобы попытаться объяснить это. –  goldilocks 04.10.2013, 12:18

Теги

Похожие вопросы