Відповіді:
Це особливість оболонки, а не операційної системи.
Так, наприклад, на Solaris 10 з ksh88
оболонкою:
% cat < /dev/tcp/localhost/22
ksh: /dev/tcp/localhost/22: cannot open
Однак якщо ми переходимо до bash
:
% bash
bash-3.2$ cat < /dev/tcp/localhost/22
SSH-2.0-Sun_SSH_1.1.5
Так bash
трактує, /dev/tcp
але ksh88 не зробив.
На Solaris 11 з ksh93
оболонкою:
% cat < /dev/tcp/localhost/22
SSH-2.0-Sun_SSH_2.2
Тож ми можемо бачити, що це дуже залежить від оболонки, яка використовується.
/dev/tcp/...
це не одна з них).
Щоб додати, з вузла Bash Info :
Bash обробляє кілька імен файлів спеціально, коли вони використовуються в перенаправленнях, як описано в наступній таблиці. Якщо операційна система, на якій працює Bash, надає ці спеціальні файли, bash використовуватиме їх; інакше це буде імітувати їх внутрішньо поведінкою, описаною нижче.
'/ dev / fd / FD' Якщо FD є дійсним цілим числом, дескриптор файлу FD дублюється.
'/ dev / stdin' Дескриптор файлу 0 дублюється.
'/ dev / stdout' Дескриптор 1 файлу дублюється.
'/ dev / stderr' Дескриптор файлу 2 дублюється.
'/ dev / tcp / HOST / PORT' Якщо HOST є дійсним іменем хоста або адресою Інтернету, а PORT - цілим номером порту або іменем послуги, Bash намагається відкрити відповідний TCP-розетку.
'/ dev / udp / HOST / PORT' Якщо HOST є дійсним іменем хоста або адресою Інтернету, а PORT - цілим номером порту або іменем послуги, Bash намагається відкрити відповідний сокет UDP.