Что может вас смущать: [
на самом деле является командой оболочки Unix. Вы можете найти его в /bin
, а если присмотреться, это жесткая ссылка на команду test
, что означает, что вы также можете написать:
test -f /etc/bashrc && source /etc/bashrc
(.
- это сокращение для source
).
Историческая справка для вашего удовольствия: когда Unix был изобретен, не было экранов, кроме «телетайпов», которые являются своего рода пишущей машинкой. Вы отправили команду на хост Unix, и телетайп напечатает результат. Слух звучит так: поскольку ранние разработчики Unix устали от всех ракет, созданных телетайпами, они пытались сократить все команды до двух букв, а все опции - до одной буквы.
Если вы зеленый, то ходят слухи: чтобы сохранить бумагу и красящую ленту, они пытались сократить все команды до двух букв, а все параметры - до одной буквы.
И если вы посмотрите на /dev
, вы увидите все эти tty
файлы, единственное, что осталось от исходных телетайпов.
[РЕДАКТИРОВАТЬ] Как выяснить, что эти [
и test
- это одно и то же:
Это двухэтапный процесс. ls -il [ test echo
дает:
356954 -r-xr-xr-x 2 root wheel 46K May 31 2008 [
356954 -r-xr-xr-x 2 root wheel 46K May 31 2008 test
67392 -rwxr-xr-x 1 root wheel 18K Sep 22 2007 echo
Сначала вы замечаете «2» перед «корнем». Это означает, что есть две записи каталога (имена файлов a.k.a), которые указывают на одни и те же данные (Unix lingo: inode, i-node или "index node"). Каждый индекс на диске имеет уникальный номер, который является первым номером в приведенном выше примере (356954). Вы можете видеть, что [
и test
используют один и тот же индекс, но echo
не имеет.
Обратите внимание, что нет быстрого способа получить все записи каталога, которые указывают на один и тот же индекс. Вы должны выполнить поиск по всей файловой системе для записи с тем же индексом (используя find /path -inode 356954
)
[EDIT2] Что касается tty "файлов": это фактически узлы устройства. Первая буква разрешений - «c», как в «символьном устройстве». Вы можете найти «-» для файлов, «d» для каталогов и «b» для блочных устройств (таких как жесткие диски, дискеты и т. Д.). Это не файл, но это действительно программа. Вы можете поговорить с ним, отправив ему данные («записав» что-то в «файл») или считав данные из него. Концепция казалась настолько близкой к реальным файлам, что изобретатели Unix использовали файловый API плюс что-то, называемое «управление IO» (или ioctl), для отправки специальных команд (например, запрос терминала на его размер).
Если вы переключитесь в режим консоли («Ctrl-Alt-F1»), вы увидите что-то вроде:
Welcome to .... - Kernel .... (tty1)
Переключитесь на другую консоль (с Alt-F2 ... Alt-F6), и вы увидите, что они подключены к tty2
к tty6
. Авторизуйтесь на одном из них и попробуйте
эхо-тест> / dev / tty1
И строка появится на консоли, подключенной к tty1
. Чтение из tty не так просто, так как из него уже есть чтение программы (либо mingetty
, если вы не вошли в систему, и login
или bash
после входа в систему). Если вы попробуете read line < /dev/tty1
, это будет конфликтовать с программой, которая уже запущена на этой консоли, но в принципе это будет работать.