Да, однако файл терминала не является обычным файлом.
Если вы перечислите расширенные свойства терминального файла, вы увидите:
$ ls /dev/tty1 -lah
crw--w---- 1 root tty 4, 0 Apr 6 13:07 /dev/tty1
обратите внимание, что первый символ в разделе разрешений — это буква «c», это указывает на то, что файл является символьным специальным устройством. Напротив, обычный файл будет иметь там «-», каталог «d», специальное блочное устройство «b», символическую ссылку «l» и сокет домена unix «s».
Важно отметить, что в системах Unix, таких как Linux, файловая система на самом деле больше похожа на пространство имен для взаимодействия с объектами ядра, где вы можете давать имена различным объектам ядра, чтобы на них можно было однозначно ссылаться в различных частях системы. Эти объекты ядра представляют собой не только обычные файлы, поддерживаемые постоянным хранилищем, но и такие вещи, как аппаратное устройство, сокеты и т. д.
Символьное специальное устройство — это объект ядра, который взаимодействует с пользовательским пространством путем чтения и записи потоков символов. , к ним можно получить доступ, выполнив системные вызовы read()
и write()
.
Например, на моей машине с помощью Ctrl+Alt+F1 (то есть /dev/tty1 на моей машине, а не tty0) я мог считывать все, что набирается, на виртуальную консоль с помощью программы, использующей read()
системный вызов типа cat
:
sudo cat /dev/tty1
cat
Наоборот, я мог бы также отображать символы в виртуальной консоли, используя программу, которая использует системный вызов write()
, например tee
:
echo "привет мир" | sudo tee /dev/tty1
Большинство обычных текстовых редакторов откажутся открывать -обычные специальные файлы, потому что они запрограммированы на проверку типа файла и отказываются редактировать нестандартные файлы. Это сделано для предотвращения "случайностей", потому что нет большого смысла редактировать специальные устройства в обычных текстовых редакторах. Кроме того, большинство обычных текстовых редакторов на самом деле не просто вызывают write()
для существующего файла, а вместо этого записывают в новый файл и переименовывают()
файл подкачки. заменить старый файл.Даже если у вас есть текстовый редактор, который поддерживает запись на месте, они обычно пытаются сначала обрезать файл, что, конечно, не поддерживается в устройстве со специальными символами.