/ dev / {udp, tcp}가 표준화되었거나 어디서나 사용 가능합니까?


17

나는 최근에 대해 배운 /dev/udp/dev/tcp유사 장치 여기 . 그것들은 일부 GNU / Linux 배포판에만 해당됩니까, 아니면 다른 유닉스 시스템에서 찾을 수 있습니까?

그들은 어떤 방식으로 표준화 되었습니까?

지금까지 OS X, Arch Linux 및 CentOS에서 성공적으로 사용할 수있었습니다.

답변:


26

이것은 운영 체제가 아닌 의 기능입니다 .

예를 들어 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

그래서 우리는 그것이 사용중인 쉘에 매우 의존적임을 알 수 있습니다.


4
또한 컴파일 타임 옵션에 의존합니다-모든 bash 빌드에서 활성화하지는 않습니다.
Charles Duffy

@CharlesDuffy 충분히 사실; 또한 ksh (ksh-88은 자동 감지를 시도했지만 제대로 작동하는지 확실하지 않습니다).
Stephen Harris

1
첫 번째 문장과 관련하여 POSIX는 일부 기본 쉘 기능을 표준화합니다 (단 /dev/tcp/..., 그중 하나는 아님).
Tanz87

3

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 소켓을 열려고 시도합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.