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
Файлы в /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 являются чем-то вроде пережитка, перенесенный со дней последовательного кабеля подключил аппаратные терминалы.
Ничто не хранится в /dev/pts
. Эта файловая система живет просто в памяти.
Записи в /dev/pts
псевдотерминалы (имущество, если коротко). Ядра Unix имеют универсальное понятие терминалов. Терминал позволяет, чтобы приложения отобразили вывод и получить вход через оконечное устройство. Процесс может иметь терминал управления — для приложения текстового режима, это - то, как он взаимодействует с пользователем.
Терминалы могут быть любой аппаратными терминалами (“tty”, короткий для “телетайпа”) или псевдотерминалы (“имущество”). Аппаратные терминалы подключены по некоторому интерфейсу, такому как последовательный порт (ttyS0
, …) или USB (ttyUSB0
, …) или по экрану PC и клавиатуре (tty1
, …). Псевдотерминалы обеспечиваются эмулятором терминала, который является приложением. Некоторые типы псевдотерминалов:
Если программа открывает терминал для записи, вывод из той программы появляется на терминале. Распространено иметь несколько выводов программ к терминалу одновременно, хотя это может время от времени сбивать с толку, поскольку нет никакого способа сказать, какая часть вывода прибыла из который программа. Фоновые процессы, которые пытаются записать в их терминал управления, могут быть автоматически приостановлены сигналом SIGTTOU.
Если программа открывает терминал для чтения, вход от пользователя передается той программе. Если несколько программ читают из того же терминала, каждый символ направляется независимо к одной из программ; это не рекомендуется. Обычно существует только единственная программа, активно читая из терминала в установленный срок; программы, которые пытаются читать из их терминала управления, в то время как они не находятся на переднем плане, автоматически приостановлены сигналом SIGTTIN.
Для экспериментирования работать tty
в терминале для наблюдения, каково оконечное устройство. Скажем, это /dev/pts/42
. В оболочке в другом терминале, выполненном echo hello >/dev/pts/42
: строка hello
будет отображен на другом терминале. Теперь выполненный cat /dev/pts/42
и введите в другом терминале. Уничтожить это cat
команда (который сделает другой терминал трудно для использования), нажмите Ctrl+C.
Запись в другой терминал иногда полезна для отображения уведомления; например, write
команда делает это. Чтение из другого терминала обычно не делается.
strace
вход чтения программы, но это - это.
– Patrick
05.10.2013, 08:20
tostop
флаг tty установлен. Этот флаг не установлен по умолчанию. И я признаю ошибку на чтении от другого TTY. Я попробовал его, и это действительно работает, но это находится на основе на чтение, не основании на символ (при нахождении при приглашении оболочки, они совпадают с чтением оболочек 1 символ за один раз). Могло бы быть хорошо прояснить эту мысль, как это теперь, как я интерпретировал Ваш ответ.
– Patrick
05.10.2013, 19:05
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 и кошка конкурируют для чтения из того же устройства, в которое оболочка является выводом.