"dpkg --status-fd n" 이해

"dpkg --status-fd n" 이해

(Debian(7) 기반 Linux 배포판 의 man dpkg1.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. 그런 다음 프런트 엔드는 파이프의 읽기 끝에서 읽고 다른 것과 혼동될 위험 없이 결과 상태 메시지를 얻습니다.

관련 정보