Я знаю, /dev/tcp/<host>/<port>
что это магический путь, который обрабатывается определенными оболочками в перенаправлениях. Но согласно man bash
:
Если операционная система, в которой работает bash, предоставляет эти специальные файлы, bash будет использовать их; иначе это будет подражать им внутренне [...]
На Linux-коробке, которую я сейчас использую, /dev/tcp
специального файла нет, поэтому Bash будет эмулировать его. Но существует ли на самом деле Unix-подобная система, которая предоставляет /dev/tcp
специальному файлу ту же семантику, что и поддерживаемая Bash?
devices
tcp
character-special-files
Сильвен Леру
источник
источник
/dev
Это tmpfs на текущих Linux, и он был в корневом разделе в старых. Вот почему это невозможно в настоящее время. Это можно легко сделать с помощью расширения sysfs или procfs (оба fs очень гибкие и похожие (на самом деле, вероятно, никто не знает, почему они не одинаковые)), никто не делает это сегодня, но это можно сделать примерно за 100 строки кода.Ответы:
Я думаю, что документация Bash несколько вводит в заблуждение по этой теме. Глядя на код, даже возвращаясь к версии 2.04, где были введены перенаправления в сети,
/dev/tcp
и/dev/udp
работает следующим образом:configure
скрипт проверяет, поддерживаются ли различные сетевые функции; если это так, если сетевое перенаправление включено (что имеет место по умолчанию), встроенный внутренний сетевой код;/dev/tcp
и/dev/udp
(в правильном формате) обрабатывается внутренне; в противном случае выдается предупреждение («/ dev / (tcp | udp) / хост / порт не поддерживается без подключения к сети»), и Bash пытается открыть указанный путь в системе;То, к чему это сводится, является:
/dev/tcp
и/dev/udp
всегда будет обрабатываться внутри организации;/dev/(tcp|udp)/host/port
, то будет использоваться, иначе, по всей вероятности, перенаправление не удастся;/dev/(tcp|udp)/host/port
, то будет использоваться, иначе, по всей вероятности, перенаправление не удастся./dev/tcp
существует в некоторых системах, но, насколько я знаю, никто не поддерживает ту же абстракцию, что и Bash. На Solaris/dev/tcp
используется сndd
инструментом для запроса и изменения конфигурации сети. В XTI (см. Также «Открытая группа», если вы член) этуt_open
функцию можно использовать/dev/tcp
для открытия TCP-соединения, но она не использует настройку на основе пути, есть отдельная структура данных для указания целевого хоста и порт (и другие параметры).источник