우리 서버에서 일부 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.types
libmagic은 이 파일을 확인하지 않으며 해당 파일의 존재는 대부분의 플랫폼에서 전혀 표준이 아닙니다. 대신 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
.
요약하자면, 원하는 결과를 얻으려면 다음과 같은 조언을 드리고 싶습니다.
file
최신 소스에서 새 버전을 다시 컴파일하고file -b -e cdf --mime-type
대신 플래그를 사용하세요file -bi
.
답변2
파일이 이에 대해 알 수 있도록 하려면 파일 시작 부분에 저장된 매직 넘버를 /etc/magic.conf에 기록해야 합니다. 이것"파일"에 대한 매뉴얼 페이지파일이 어떻게 작동하는지 설명하고"magic"에 대한 매뉴얼 페이지매직 파일에 사용되는 구문을 설명합니다.