(Debian(7) 기반 Linux 배포판 의 man dpkg
1.16.16(i386)):
--status-fd n
기계가 읽을 수 있는 패킷 상태 및 진행 정보를 파일 설명자에게 보냅니다.N
나는 이것을 다음과 같이 읽었습니다: "printf
예를 들어 파일 설명자로 생성된 기계 판독 가능 코드 전달stdin
". 나는 파일 설명자 (0), stdout
(1) 및 stderr
(2)를 알고 있다고 생각합니다 .
몇 가지 예를 찾으려고 노력했지만 파일 설명자 부분이 두 자리(아마 그 이상...)로 구성되어 있다는 오류 보고서만 발견했습니다.이를 통해 파일 설명자에 대한 지식이 확장됩니다., 이는 더 많은 문제를 야기합니다. 그러므로:
질문dpkg
:옵션은 어떻게 사용하나요 --status-fd
?
실제적인 예와 무슨 일이 일어나고 있는지에 대한 몇 가지 의견은 이해하는 데 도움이 될 것입니다.
답변1
이 옵션은 GUI에서 사용자에게 멋진 진행 보고서를 제공하는 등 다른 프로그램이 구문 분석할 수 있는 방식으로 진행 상황을 보고하도록 --status-fd
지시합니다 .dpkg
매개변수 --status-fd
는 다음과 같습니다.파일 설명자, 열린 파일 수를 지정합니다. 조금 단순화하려면 다음을 수행하십시오.
- 프로세스가 처음으로 파일을 열면 파일에 설명자 번호 0이 할당됩니다. 다음번에는 파일에 설명자 번호 1이 할당되는 식으로 진행됩니다. 시스템
open
호출은 파일 설명자를 반환합니다. - 프로세스가 파일에서 읽기 또는 쓰기와 같은 작업을 수행하려는 경우 파일 설명자로 파일을 지정합니다. 이는
read(0, addr, 10)
예를 들어 "설명자 0에서 10바이트를 읽고 메모리 주소에 배치합니다addr
" 를 의미합니다. . - 각 프로세스에는 고유한 파일 설명자가 있습니다: 파일 설명자N진행 중피파일 설명자와 아무 관련이 없습니다.N진행 중큐.
- 프로세스는 생성될 때 상위 프로세스의 파일 설명자를 상속합니다.
- 관례적으로 프로세스는 파일 설명자 0, 1, 2가 열린 상태로 실행됩니다. 0은 입력에 사용되고, 1은 일반 출력에 사용되고, 2는 오류 메시지에 사용됩니다.
리디렉션특정 설명자에서 파일을 엽니다. 예를 들어, 쉘 스크립트 또는 명령줄에서 mycommand <somefile
파일 설명자 번호 0(표준 입력)을 연결하여 somefile
그 이전의 항목(명령이 터미널에서 실행되는 경우 터미널) 대신 (읽기 위해 열림)로 연결합니다. 리디렉션 연산자 앞에 설명자 번호를 추가할 수 있습니다. mycommand 3<somefile
파일 설명자 번호 3을 연결합니다 somefile
(대부분의 명령은 이 파일 설명자를 사용하여 아무 작업도 수행하지 않습니다).
dpkg는 패키지를 설치, 업그레이드 또는 제거할 때 패키지의 사전 설치/설치 후/제거 스크립트 내에서 다양한 기타 명령을 실행합니다. 이러한 명령 중 일부는 입력을 읽거나 메시지를 표시할 수 있으므로 dpkg는 호출 시 연결된 모든 항목에 연결된 표준 설명자를 유지합니다.
표준 파일 설명자가 채택되었으므로 dpkg
호출자는 상태 보고를 위해 다른 파일 설명자를 지정할 수 있습니다. 상태 보고서를 파일에 넣을 수 있습니다. 예를 들면 다음과 같습니다.
dpkg --status-fd 3 -i somefile.deb 3>/tmp/dpkg.status
다른 터미널에서 실행 tail -n +1 -f /tmp/dpkg.status
하고 상태 메시지가 나타나는지 확인하세요.
dpkg
일반적으로 상태 보고서를 호출하고 원하는 프런트엔드는관로(단방향 통신 채널) 실행하기 전에 dpkg
파일 설명자를 쓰기 파이프 끝에 인수로 전달합니다 --status-fd
. 그런 다음 프런트 엔드는 파이프의 읽기 끝에서 읽고 다른 것과 혼동될 위험 없이 결과 상태 메시지를 얻습니다.