私たちのサーバーでいくつかの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」と呼ばれる圧縮されたリンクリスト)の「データベース」に依存します。使用できます。指紋は、元のバイナリサンプルの未知のファイル(またはデータストリーム)の「タイプ」から来ます。
ファイルのファイルタイプは、内部ルール、ファイル名/拡張子(存在する場合)、「デフォルト」圧縮マジックファイル、およびフラグを使用してコマンドラインに追加されたマジックファイルに基づいて、さまざまな基準のリストによって決まります-m
。
ツールは、ファイルの「タイプ」とファイルに含まれる情報とのバランスをとる必要があります。ほとんどの場合、ファイル拡張子はほとんど価値がありませんが、.zipファイルと.jarファイルの典型的なケースではいくつかの価値があります。どちらも「zipファイル」です。つまり、Info-Zip仕様を使用して圧縮されたファイルです。この場合、ファイル拡張子はこれが単なるzipアーカイブではなくJava実行可能ファイルであることを知るのに十分なはずです。ただし、* nixプラットフォームでの「.pub」の最も一般的な使用はSSH公開鍵用であるため、Microsoft Publisherの「.pub」拡張子にはほとんど価値がありません。
状況をより複雑にするために、マイクロソフトはさまざまなバージョンの製品を使用しています。「オブジェクトのリンクと埋め込み(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
)。回避するのが最善のもう1つの理由-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"のマニュアルページマジックファイルで使用される構文を説明します。