나는 최근에 대해 배운 /dev/udp
및 /dev/tcp
유사 장치 여기 . 그것들은 일부 GNU / Linux 배포판에만 해당됩니까, 아니면 다른 유닉스 시스템에서 찾을 수 있습니까?
그들은 어떤 방식으로 표준화 되었습니까?
지금까지 OS X, Arch Linux 및 CentOS에서 성공적으로 사용할 수있었습니다.
답변
이것은 운영 체제가 아닌 쉘 의 기능입니다 .
예를 들어 ksh88
쉘이있는 Solaris 10의 경우 :
% 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
따라서 ksh88은 bash
해석 /dev/tcp
하지 않았습니다.
ksh93
쉘이있는 Solaris 11의 경우 :
% cat < /dev/tcp/localhost/22
SSH-2.0-Sun_SSH_2.2
그래서 우리는 그것이 사용중인 쉘에 매우 의존적임을 알 수 있습니다.
답변
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 소켓을 열려고 시도합니다.