`>&`의 두 버전 중 `[n]>&/dev/tcp/localhost/9999`에 사용되는 버전은 무엇입니까?

`>&`의 두 버전 중 `[n]>&/dev/tcp/localhost/9999`에 사용되는 버전은 무엇입니까?

/dev/tcp/localhost/9999정수(파일 설명자)로 해석되는지 파일 이름으로 해석되는지 잘 모르겠습니다 .

그러므로 잘 모르겠다"표준 출력 및 표준 오류 리디렉션” (1) 또는 “파일 설명자 복사Bash 매뉴얼의 섹션 (2)는 위의 리디렉션에 적용됩니다.

리디렉션은 지정 여부에 관계없이 작동 n하지만 (1) 매개 변수를 사용하지 않습니다 n. 이는 (1)이 사용되지 않는다는 의미입니까?

또한 /dev/tcp/localhost/9999파일 이름(정수 아님)으로 간주되는 경우 <&1아래 명령이 작동하는 이유는 무엇입니까? :

/bin/bash >&/dev/tcp/localhost/9999 <&1

이 경우 1(stdout)은 입력을 위해 열려 있는 파일 설명자가 아니므로 (2)가 실패하게 됩니까?

답변1

/dev/tcp/host/port<>, 또는 <>(및 >&또는 &>에서 ) 사용 여부에 관계없이 bash항상 읽고 쓰기 위해 열립니다.

>& /dev/tcp/host/porthost:port표준 출력 및 표준 오류에 연결하고 리디렉션합니다 .

해커들은 및 내부적으로 을 /dev/tcp사용하고 있으며 마치 읽기나 쓰기용으로만 열리는 파일 설명자인 것처럼 tcp 소켓을 사용하는 명확하고 일관된 방법은 없습니다.socket(2)connect(2)

파일 설명자가 1번이고 자신을 stdout이라고 부른다고 해서 입력이 가능하지 않다는 의미는 아닙니다. cat <&1터미널에서도 사용할 수 있습니다.

리디렉션은 n 지정 여부에 관계없이 작동하지만 (1)은 n 매개 변수를 사용하지 않습니다. 이는 (1)이 사용되지 않음을 의미합니다.

여기는 아니야.

true 3>&/dev/tcp/127.0.0.1/9999
bash: /dev/tcp/127.0.0.1/9999: ambiguous redirect

관련 정보