Рассмотрим теперь некоторые более общие понятия. При входе в систему вы устанавливаете связь вашего терминала с системой и, значит, получаете в каталоге /dev
tty сообщает, какой терминал вы используете:$ whoami
you tty0 Sep 28 01:02
$ tty
/dev/tty0
$ ls -l /dev/tty0
crw--w--w- 1 you 1, 12 Sep 28 02:40 /dev/tty0
$ date >/dev/tty0
Wed Sep 28 02:40:51 EDT 1983
$
Заметьте, что вы владелец устройства и только у вас есть право на чтение с него. Иными словами, никто не может непосредственно читать вводимые вами символы, но выводить на ваш терминал может любой. Во избежание этого можно изменить права доступа к устройству, запретив тем самым другим использовать программу write
mesg.$ mesg n
$ ls -l /dev/tty0
crw--w---- 1 you 1, 12 Sep 28 02:41 /dev/tty0
$ mesg y
$ ls -l /dev/tty0
crw--w--w- 1 you 1, 12 Sep 28 02:42 /dev/tty0
$
Часто бывает удобно использовать имя для ссылки на применяемый терминал, но трудно определить, каково имя вашего терминала. Имя устройства /dev/tty
$ date >/dev/tty
Wed Sep 28 02:42:23 EDT 1983
$
Имя /dev/tty
crypt является одной из команд, использующих имя /dev/tty. "Открытый" текст поступает из стандартного входного потока, а зашифрованная информация направляется в стандартный выходной поток, поэтому команда crypt читает ключ для шифрования с /dev/tty:$ crypt
Enter key:
$
В данном примере имя /dev/tty
crypt читала ключ из стандартного входного потока, она бы прочла первую строку из файла cleartext. Вместо этого она открывает файл /dev/tty, отключает автоматическое эхо вводимых символов, чтобы ваш ключ не появился на экране, и читает ключ. В гл. 5 и 6 приводится несколько других примеров использования /dev/tty.Иногда вы хотите запустить программу, но вам не важен результат ее выполнения. Например, вы могли уже ознакомиться с сегодняшними новостями и не желаете читать их еще раз. Переключение вывода команды news
/dev/null приведет к игнорированию выходного потока:$ news >/dev/null
$
Информация, направляемая в /dev/null
Обычно файл /dev/null
time (time(1)) сообщает об использованном программой процессорном времени. Результат выдается в стандартный поток диагностики, так что можно хронометрировать команды, производящие преобразование входного потока в выходной, переключая стандартный выходной поток в файл /dev/null:$ ls -l /usr/diet/words
-r--r--r-- 1 bin 196513 Jan 20 1979 /usr/dict/words
$ time grep e /usr/dict/words/ >/dev/null
real 13.0
user 9.0
sys 2.7
$ time egrep e /usr/dict/words >/dev/null
real 8.0
user 3.9
sys 2.8
$
Команда time
egrep — это мощный вариант команды grep, который мы обсудим в гл. 4; она выполняется почти в два раза быстрее команды grep при просмотре больших файлов. Если бы выдача команд egrep или grep не была переключена в /dev/null или текущий файл, пришлось бы ждать, пока сотни тысяч символов "пробегут" на экране, прежде чем появятся нужные нам временные характеристики.