어떤 유닉스 계열 시스템이 실제로 / dev / tcp 특수 파일을 제공합니까?


9

나는 /dev/tcp/<host>/<port>리디렉션의 일부 쉘이 특별히 처리하는 마법의 경로 라는 것을 알고 있습니다. 그러나에 따르면 man bash:

bash가 실행중인 운영 체제가 이러한 특수 파일을 제공하는 경우 bash는이 특수 파일을 사용합니다. 그렇지 않으면 내부적으로 그들을 모방 할 것이다 ...]

내가 지금 사용하고있는 Linux 상자에는 /dev/tcp특수 파일이 없으므로 Bash 가이 파일을 에뮬레이트 합니다. 그러나 실제로 /dev/tcpBash가 지원하는 것과 동일한 의미를 가진 특수 파일을 제공하는 유닉스 계열 시스템이 있습니까?


에뮬레이트 된 디렉토리가 필요합니다. 에뮬레이트 된 디렉토리를 만드는 것은 특정 파일 시스템에서만 가능합니다 (예 : procfs 또는 sysfs). /dev현재 리눅스에서는 tmpfs이며, 오래된 리눅스에서는 루트 파티션에있었습니다. 이것이 현재 불가능한 이유입니다. sysfs 또는 procfs 확장자로 쉽게 가능할 수 있습니다 (fs는 매우 유연하고 유사합니다 (실제로 아무도 왜 같은지 알지 못합니다)). 오늘은 아무도하지 않지만 약 100 개 안에 만들 수 있습니다. 코드 줄.
peterh-복 직원 모니카

그러나 이미 다른 OS가 있습니까? 어느 시점에서, 나는 계획 9가 그것을했다고 생각했지만 틀렸다.
Sylvain Leroux

1
나는 아마 모른다. (아시다시피 그것은 bash 발명이다). 답변도 흥미 롭기 때문에 귀하의 질문에 투표했습니다. 내가 아는 한, 인기있는 x86 가능 유닉스 OS는 이것을 할 수 없습니다.
peterh-복 직원 모니카

답변:


8

Bash 문서 가이 주제에 대해 다소 오도 된 것으로 생각합니다. 심지어 코드를 보면 네트워크 리디렉션이 도입 된 버전 2.04으로 되돌아 가고, /dev/tcp그리고 /dev/udp다음과 같이 작동합니다 :

  • 빌드시 configure스크립트는 다양한 네트워킹 기능이 지원되는지 확인합니다. 그렇다면 네트워크 리디렉션이 활성화 된 경우 (기본적으로) 내부 네트워킹 코드가 내장되어 있습니다.
  • 내부 네트워킹 코드가 내장되어 /dev/tcp있고 /dev/udp(올바른 형식으로) 내부적으로 처리되는 경우 런타임에 ; 그렇지 않으면 경고가 생성되고 ( "/ dev / (tcp | udp) / 호스트 / 포트는 네트워킹없이 지원되지 않습니다") Bash는 시스템에서 지정된 경로를 열려고 시도합니다.
  • 네트워크 리디렉션이 구성된 경우 특별한 작업이 수행되지 않습니다.

이것으로 요약하면 다음과 같습니다.

  • 네트워크 리디렉션이 활성화 된 경우 :
    • 경우 네트워킹은 대상 플랫폼에서 지원됩니다, /dev/tcp그리고 /dev/udp항상 내부적으로 처리됩니다;
    • 그렇지 않으면 Bash가 경고하고 파일을 "맹목적으로"열려고 시도합니다. 시스템이 어떻게 든 지원한다면 /dev/(tcp|udp)/host/port, 그것은 사용될 것이며, 그렇지 않으면 리디렉션은 실패 할 것이다.
  • 네트워크 리디렉션이 비활성화 된 경우 특별한 처리가 수행되지 않습니다. 위와 같이 시스템이 어떤 식 으로든 지원 /dev/(tcp|udp)/host/port하면 사용되며, 그렇지 않으면 리디렉션이 실패합니다.

/dev/tcp일부 시스템에는 존재하지만 Bash와 동일한 추상화를 지원하는 시스템은 없습니다. Solaris에서는 네트워크 구성을 조회하고 변경 /dev/tcp하는 ndd도구 와 함께 사용됩니다 . 에서 XTI (참조 열기 그룹 , 유틸리티가 회원 인 경우) t_open기능을 사용할 수 있습니다 /dev/tcpTCP 연결을 열 수 있지만, 경로 기반 설치를 사용하지 않고, 대상 호스트를 지정하는 별도의 데이터 구조가있다 및 포트 (및 기타 매개 변수).


기능 자체는 ksh93에서 제공됩니다. SysV 시스템의 / dev / tcp는 STREAMS tcp 모듈 의 핸들입니다 .
Stéphane Chazelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.