관련이 있지만아니요반복하다:
- /dev/fd가 일관성이 없습니다
- /dev/fd와 /proc/self/fd/ 사이의 관계는 무엇입니까?
- 프로세스 교체로 인해 파이프인 /dev/fd/63이라는 파일이 생성되는 이유는 무엇입니까?
Ubuntu 18.04 및 20.04(Ubuntu는 다음 alias ll='ls -alF'
에서 정의됨) 에서 ~/.bashrc
다음 출력이 표시됩니다."플로피 드라이브"/dev/fd
장비:
을 위한 ls
:
$ ls /dev/fd 0 1 2 3
을 위한 ll
:
$ ll /dev/fd lrwxrwxrwx 1 root root 13 Nov 5 11:46 /dev/fd -> /proc/self/fd/
/dev/fd
심볼릭 링크가 있다는 것을 /proc/self/fd/
알 수 있습니다 ll
.
$ ll /proc/self/fd/ total 0 dr-x------ 2 username username 0 Nov 8 19:01 ./ dr-xr-xr-x 9 username username 0 Nov 8 19:01 ../ lrwx------ 1 username username 64 Nov 8 19:01 0 -> /dev/pts/6 lrwx------ 1 username username 64 Nov 8 19:01 1 -> /dev/pts/6 lrwx------ 1 username username 64 Nov 8 19:01 2 -> /dev/pts/6 lrwx------ 1 username username 64 Nov 8 19:01 3 -> 'socket:[8239772]' lr-x------ 1 username username 64 Nov 8 19:01 4 -> /proc/29512/fd/
- 이 모든 것이 무엇을 의미합니까?
- 여기서 플로피 디스크는 어떻게 작동하나요?
- 은 무엇이고
/dev/pts/6
, 왜0
,1
, 그리고2
모든 것이 그것을 가리키는가? - 무엇인가요
'socket:[8239772]'
? - 무엇인가요
/proc/29512/fd/
? - 의 역사적 용도와 설명은 무엇입니까
/dev/fd
?
관련된:
- 이전 질문에서 영감을 받아 이런 질문을 하게 되었습니다.'-sh: 구문 오류: 임베디드 Linux 장치에서 프로세스 대체를 위해 'bash'를 사용하려고 할 때 예기치 않은 '(''
답변1
이 모든 것이 무엇을 의미합니까?
/proc
커널이 보고하는 파일 시스템입니다.다양한 정보프로세스에. 주로 프로세스에 대한 정보에 사용되므로 "프로세스"라는 이름이 붙었습니다. 실행 중인 각 프로세스에는 프로세스 ID가 포함된 /proc/<PID>
하위 디렉터리가 있습니다 .<PID>
/proc/self
"마법의" 심볼릭 링크입니다항상 액세스 중인 프로세스를 가리킵니다./proc
.
/proc/self/fd
프로세스에서 열린 보고서 파일입니다. 각 항목은 이름이 다음과 같은 "마법의" 기호 링크입니다.파일 설명자대상은 열린 파일입니다. 여기서 놀라운 점은 링크가 실제로 파일 자체를 가리킨다는 것입니다. 이는 호출을 통해 얻은 파일 이름이 readlink
유효한 파일 이름이 아닌 경우에도 발생할 수 있습니다. 예를 들어 이름이 없는 파일(예: 익명 파이프) 및 소켓) 파일을 삭제합니다.
lrwx------ 1 username username 64 Nov 8 19:01 0 -> /dev/pts/6 lrwx------ 1 username username 64 Nov 8 19:01 1 -> /dev/pts/6 lrwx------ 1 username username 64 Nov 8 19:01 2 -> /dev/pts/6 lrwx------ 1 username username 64 Nov 8 19:01 3 -> 'socket:[8239772]' lr-x------ 1 username username 64 Nov 8 19:01 4 -> /proc/29512/fd/
여기서 플로피 디스크는 어떻게 작동하나요?
플로피 디스크가 필요하지 않습니다. 약어 "fd"는 다음을 의미합니다.파일 설명자.
은 무엇이고
/dev/pts/6
, 왜0
,1
, 그리고2
모든 것이 그것을 가리키는가?
파일 설명자 0
이며 3개입니다 1
.2
표준 스트림) 모든 프로그램은 표준 입력(stdin), 표준 출력(stdout) 및 표준 오류(stderr)를 찾을 것으로 예상합니다. 이러한 스트림은 숫자로 정의됩니다. stdin은 정의상 파일 설명자 0이고 일반적인 역할은 사용자 입력 또는 입력 데이터를 수신하는 것입니다. stdout(1, 사용자 출력 또는 출력 데이터) 및 stderr(2, 오류 메시지)도 마찬가지입니다. ).
/dev/pts/6
터미널이다. 특정 터미널에서 입력을 읽고 출력을 쓰는 프로세스에서 사용되는 파일입니다. 터미널에서 프로그램을 "정상적으로" 실행하면 stdin, stdout, stderr이 모두 터미널에 연결됩니다.
무엇인가요
'socket:[8239772]'
?
그것은소켓. 파일 설명자 3에는 표준 역할이 없으므로 사용 중인 일부 소프트웨어(예: 터미널 에뮬레이터)에만 적용됩니다. 당신은 할 수소켓 반대편에 무엇이 있는지 확인하세요.궁금하다면.
무엇인가요
/proc/29512/fd/
?
이를 실행하면 ls /proc/self/fd/
프로그램 ls
이 열리고 /proc/self/fd
내용을 읽습니다. 파일 설명자 0부터 3까지는 ls
시작 시 이미 열려 있으므로 open
사용 가능한 첫 번째 파일 설명자를 사용하면 /proc/self/fd
파일 설명자 4에서 열립니다. 커널은 내부 추적을 통해 PID에 액세스하지 않기 때문에 PID와 함께 제공됩니다 /proc/self
. 커널은 이를 프로세스별 디렉터리로 기억한 /proc
다음 올바른 PID로 인쇄합니다. (그리고PID 네임스페이스, PID 및 경로는 찾고 있는 프로세스에 따라 달라질 수 있습니다. )
의 역사적 용도와 설명은 무엇입니까
/dev/fd
?
프로그램에 파일 이름이 필요하고 이미 열려 있는 파일을 참조하려는 경우 유용합니다. 이는 /dev/stdin
, /dev/stdout
및 의 일반화이며 각각 , 및 /dev/stderr
와 동일합니다 ( 더 일반적인 것 보다 먼저 존재했습니다 )./dev/fd/0
/dev/fd/1
/dev/fd/2
/dev/fd
많은 Unix 변형에서 사용할 수 있습니다..