짧은 답변:

짧은 답변:

우리 서버에서 일부 MIME 유형 문제가 발생했습니다. 명령줄에 file -b -i theFile.pub인쇄 하려면 Microsoft Publisher 파일에 MIME 유형을 추가해야 합니다 . application/x-mspublisher추가하려고 했지만 /etc/mimes.etc작동하지 않습니다. 그것은 계속됐다 application/x-msword.

또한 xml을 추가해 보았지만 xgd-mime그것도 도움이 되지 않았습니다.

hexedit를 통해 파일 시작 부분의 매직 바이트를 추출했지만 file.

다시 말하지만 이것은 아이콘에 관한 것이 아니라 명령줄에 관한 것입니다.

자세히 편집됨:

# Adobe ESP Script
#-------------------------------------------------------------------------
0               string  %\!PS-Adobe-3.1\ EPSF-3.0    Adobe EPS file
32              string  %\!PS-Adobe-3.1\ EPSF-3.0    Adobe EPS file
!:strength +50
!:mime application/postscript

나는 그것을 넣고 /etc/magic실행 file -C했고 이것은 작동합니다. 파일의 시작 부분이나 32바이트 이후의 문자열을 읽습니다.

# Mirosoft Powerpoint
#------------------------------------------------------------------------
1152    string/b        x50/x00/x6F/X00/x77&x00/x65/x00    Power
!:mime application/vnd.ms-powerpoint

# Microsoft Publisher
#--------------------------------------------------------------------------
0               quad    0xd0cf11e0a1b11ae1           Publisher Magic Number
4512            string  Microsoft\ Publisher\ 3.0    Microsoft Publisher
!:strength +50
!:mime application/vnd.ms-publisher

작동하지 않습니다. 나는 몇 시간 동안 16진수 편집기와 매뉴얼 페이지에 앉아 있었는데 오류를 찾을 수 없습니다. 나는 16진수, 문자열 등을 시도했습니다.

답변1

짧은 답변:

curl -Ls https://git.io/fj9xx > ole2compounddocs
file -m ole2compounddocs -e cdf -b --mime-type file.pub

application/vnd.ms-publisher

긴 답변:

첫 번째(후손을 위한 배경 정보):

유틸리티 file(즉, 오늘날 대부분의 시스템에서 사용되는 구현)는 Ian Darwin의 "Fine Free File Command"입니다(일부 패키지 관리자에서는 이를 file"Fine Free File Command libmagic"라고 함). 이 file명령은 CLI 유틸리티입니다. 래퍼 libmagic기본적으로는 동일합니다.

라이브러리 libmagic자체는 일반적으로 라이브러리가 사용하는 정규식과 기타 패턴을 포함하는 "마법" 파일(운영 체제에 따라 다양한 위치에 설치되는 "magic.mgc"라고 불리는 압축되고 연결된 목록)의 "데이터베이스"에 의존합니다. 사용할 수 있습니다. 지문은 원본 바이너리 샘플의 알 수 없는 파일(또는 데이터 스트림)의 "유형"에서 나옵니다.

파일의 파일 유형은 내부 규칙, 파일 이름/확장자(있는 경우), "기본" 압축 매직 파일 및 flags를 사용하여 명령줄에 추가된 매직 파일을 기반으로 하는 다양한 기준 목록을 통해 결정됩니다 -m.

도구는 파일의 "유형"과 파일에 포함된 정보 사이의 균형을 맞춰야 합니다. 대부분의 경우 파일 확장자는 가치가 거의 없지만 .zip 파일 및 .jar 파일의 전형적인 경우에 일부 가치가 있습니다. 둘 다 "zip 파일"입니다. 즉, Info-Zip 사양을 사용하여 압축된 파일입니다. 이 경우 파일 확장자는 이것이 단순한 zip 아카이브가 아니라 Java 실행 파일임을 알 수 있을 만큼 충분해야 합니다. 그러나 *nix 플랫폼에서 ".pub"의 가장 일반적인 사용은 SSH 공개 키용이므로 이는 Microsoft Publisher의 ".pub" 확장자에는 거의 가치가 없습니다.

상황을 더욱 복잡하게 만들기 위해 Microsoft는 여러 가지 다른 버전의 제품을 사용합니다."객체 연결 및 포함(OLE)""복합 문서 파일" 아카이브의 형식은 수많은 다양한 응용 프로그램에 적합합니다. 파일 자체는 일반적으로 압축된 XML 파일입니다. 이 모든 것에는 "게시자" 문서와 Microsoft Outlook 데이터베이스 등을 구별할 수 있도록 여러 바이너리/압축 형식을 파헤치는 상당히 어렵고 계산 비용이 많이 드는 논리가 추가됩니다.

마지막으로 MIME 유형(기술적으로는IANA 미디어 유형)는 정확하게 위에서 언급한 이유와 많은 개발자가 자신의 "공급업체"( vdn.xxxxxxx) 유형을 등록하는 데 신경을 쓰지 않기 때문에 매우 신뢰할 수 없는 "콘텐츠 처리" 태그입니다. Microsoft는 여러 미디어 유형을 등록했지만 application/vnd.ms-office(이것이 file사용되는 유형입니다) CDF/CDF2 파일의 경우)은 등록되지 않습니다 application/ms-publisher. 실제로 mime.typeslibmagic은 이 파일을 확인하지 않으며 해당 파일의 존재는 대부분의 플랫폼에서 전혀 표준이 아닙니다. 대신 MIME 유형은 단순히 "magic" 파일에 하드코딩되어 application/vnd.ms-publisher최근에야 추가되었습니다.

-i또한 이 플래그의 기능은 예상과 상당히 다른 경우가 많으며 버전마다 다르게 작동하거나 file전혀 존재하지 않을 수도 있다는 점을 기억하는 것도 중요합니다 . 그러나 일반적으로 말하면 이는 기계 가독성을 위한 것이며 (중요하게) 일부 버전에서는그것은 휴리스틱을 바꾼다더 많은 기계 관련 결과를 선호합니다. 따라서 일부 버전 file과 해당 데이터베이스 에서는 file -bi( application/octet-stream; charset=binary유효한 비공급업체 MIME 유형) 대신 (CDF)가 반환되는 application/vnd.ms-office경우 이를 효과적으로 "전달"하기 위해 application/vnd.ms-office플래그가 필요합니다. -e cdf(가설적으로) CDF 파일이 게시자 파일이라는 사실보다 CDF 파일을 읽을 수 있는 다른 프로그램/알고리즘과 더 관련이 있습니다. 검색을 계속하고 ODF2 식별자와 해당 MIME 유형을 얻기 위해 CDF 결과를 무시하는 것은 계산 비용이 훨씬 더 많이 듭니다. 결과에는 수백 또는 수천 개가 application/vnd.ms-office아닌 6개의 매직 테스트 작업이 필요합니다 application/vnd.ms-publisher( 플래그로 확인할 수 있음 -d). 피하는 것이 가장 좋은 또 다른 이유 -i: 대부분의 최신 버전에서 file이 플래그는 MIME 유형뿐만 아니라 MIME 인코딩도 반환하므로 --mime-type결과를 원하지 않으면 를 사용하는 것이 좋습니다 application/vnd.ms-publisher; charset=binary.

요약하자면, 원하는 결과를 얻으려면 다음과 같은 조언을 드리고 싶습니다.

  1. file최신 소스에서 새 버전을 다시 컴파일하고
  2. file -b -e cdf --mime-type대신 플래그를 사용하세요 file -bi.

답변2

파일이 이에 대해 알 수 있도록 하려면 파일 시작 부분에 저장된 매직 넘버를 /etc/magic.conf에 기록해야 합니다. 이것"파일"에 대한 매뉴얼 페이지파일이 어떻게 작동하는지 설명하고"magic"에 대한 매뉴얼 페이지매직 파일에 사용되는 구문을 설명합니다.

관련 정보