there isn't the path /dev/tcp nor /dev/udp
Isso está correto. Aqueles não estão presentes no seu sistema de arquivos como diretórios, mas quando você inclui tanto um hostname / ip-address ee o número da porta E usá-los em um redirecionamento bash vai fazer alguma mágica. Como formulado no manual:
Bash handles several filenames specially when they are used in redirections, as described in the following table:
/dev/fd/fd
Iffd
is a valid integer, file descriptorfd
is duplicated./dev/stdin
File descriptor 0 is duplicated./dev/stdout
File descriptor 1 is duplicated./dev/stderr
File descriptor 2 is duplicated./dev/tcp/host/port
Ifhost
is a valid hostname or Internet address, andport
is an integer port number or service name, bash attempts to open a TCP connection to the corresponding socket./dev/udp/host/port
Ifhost
is a valid hostname or Internet address, andport
is an integer port number or service name, bash attempts to open a UDP connection to the corresponding socket.
Em vez de, por exemplo:
$ ls -l /dev/tcp/serverfault.com/80
ls: cannot access /dev/tcp/serverfault.com/80: No such file or directory
tente um redirecionamento com > ou <
$ echo "" > /dev/tcp/serverfault.com/80
$ echo " " > /dev/tcp/serverfault.com/81
-bash: connect: Connection refused