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

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

나는 /dev/tcp/<host>/<port>이것이 리디렉션의 일부 쉘에 의해 독점적으로 처리되는 매직 경로라는 것을 알고 있습니다. 그러나 따르면 man bash:

bash를 실행 중인 운영 체제가 이러한 특수 파일을 제공하는 경우 bash는 해당 파일을 사용합니다. 그렇지 않으면 내부적으로 해당 파일을 에뮬레이션합니다.

지금 사용하고 있는 Linux 시스템에는 /dev/tcp특수 파일이 존재하지 않으므로 Bash는시뮬레이션그것. 하지만 실제로 /dev/tcpBash에서 지원하는 것과 동일한 의미를 가진 특수 파일을 제공하는 Unix와 같은 시스템이 실제로 있습니까 ?

답변1

나는 Bash 문서가 이 주제에 대해 약간 오해의 소지가 있다고 생각합니다. 코드를 보면 버전 2.04로 돌아가도 네트워크 리디렉션이 도입되었으며 다음과 같이 /dev/tcp작동합니다 ./dev/udp

  • 빌드 시 configure스크립트는 다양한 네트워킹 기능이 지원되는지 확인합니다. 지원되는 경우 네트워크 리디렉션이 활성화되어 있으면 내부 네트워킹 코드가 내장됩니다(기본값).
  • 런타임 시 내부 네트워킹 코드가 내장된 경우 내부적으로(올바른 형식으로) 처리 /dev/tcp됩니다 /dev/udp. 그렇지 않으면 경고가 생성됩니다("/dev/(tcp|udp)/host/port는 네트워킹 없이 지원되지 않습니다.") ), 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 연결을 열 수 있지만 경로 기반 설정을 사용하지 않으며 대상 호스트 및 포트(다른 매개변수 중)를 지정하는 별도의 데이터 구조가 있습니다.

관련 정보