短い答え:

短い答え:

私たちのサーバーでいくつかの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.typeslibmagicはこのファイルをチェックせず、そのファイルの存在はほとんどのプラットフォームではまったく標準ではありません。代わりに、MIMEタイプは単に "magic"ファイルにハードコーディングされ、application/vnd.ms-publisher最近追加されました。

-iまた、このフラグの機能は予想とはかなり異なることが多く、バージョンごとに異なる動作や全くfile存在しない可能性があることを覚えておくことも重要です。しかし、一般的に言えば、これは機械可読性のためのものであり、(重要)いくつかのバージョンではそれはヒューリスティックを変えるより多くの機械関連の結果を好む。したがって、一部のバージョンfileおよびそのデータベースでは、file -biapplication/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

要約すると、希望の結果を得るために、次のアドバイスをしたいと思います。

  1. file最新のソースから新しいバージョンを再コンパイルし、
  2. file -b -e cdf --mime-type代わりにフラグを使用してくださいfile -bi

答え2

ファイルがこれを理解できるようにするには、ファイルの先頭に保存されているマジック番号を/etc/magic.confに書き込む必要があります。これ「ファイル」のマニュアルページファイルがどのように機能するかを説明し、"magic"のマニュアルページマジックファイルで使用される構文を説明します。

関連情報