나는 /dev/tcp/<host>/<port>
이것이 리디렉션의 일부 쉘에 의해 독점적으로 처리되는 매직 경로라는 것을 알고 있습니다. 그러나 따르면 man bash
:
bash를 실행 중인 운영 체제가 이러한 특수 파일을 제공하는 경우 bash는 해당 파일을 사용합니다. 그렇지 않으면 내부적으로 해당 파일을 에뮬레이션합니다.
지금 사용하고 있는 Linux 시스템에는 /dev/tcp
특수 파일이 존재하지 않으므로 Bash는시뮬레이션그것. 하지만 실제로 /dev/tcp
Bash에서 지원하는 것과 동일한 의미를 가진 특수 파일을 제공하는 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/tcp
TCP 연결을 열 수 있지만 경로 기반 설정을 사용하지 않으며 대상 호스트 및 포트(다른 매개변수 중)를 지정하는 별도의 데이터 구조가 있습니다.