ファイルは、さまざまなオペレーティングシステムでさまざまなMimeタイプを提供します。

ファイルは、さまざまなオペレーティングシステムでさまざまなMimeタイプを提供します。

そのため、以下を部分的に実行するbashスクリプトがあります。

file -b --mime-type "$1"

次に、予想されるファイル形式であることを確認するロジックがあります。

if [[ $type == "application/gzip" ]]; then
    <stuff>
    exit 0
fi

# basically the else
echo "File type $type not supported"

だから私はDebianシステムでこのスクリプトを作成し、すべてのロジックがうまくいきました。しかし、同僚が自分が作業している一部のシステム(CentOSベース)でそれを使用できるかどうか尋ねたとき、彼は次のエラー出力を受け取り続けました。

File type application/x-gzip not supported

スクリプト以前は移植性を目指しますので、bashやファイルなどを使用してください。 CentOSシステムで見ようとしましたが、/usr/share/magicプレーンテキストのようです。しかし、Debianではバイナリ形式なので、対話するのは難しいです。

だから私が理解したように、 を呼び出すと、---mime-typeすべてのオペレーティングシステムで毎回同じMIMEタイプが表示されます。 ifステートメントに追加できることを知っていますが、application/x-gzip出力を一貫して作成する方法がある場合は、それをオプションとして残します。また、後でこのスクリプトに別の部分を追加したり、将来の作業のためのテンプレートとして使用したりする場合は、オペレーティングシステム全体で一貫した出力を取得する方法があるため、多くのエッジについて心配する必要はありません。ケース。

一貫した回答を得る方法がある場合は、ファイル以外のものに変更することもできます。

よろしくお願いします。

編集#00

もともとIANAを参考にしていましたが、IANAが認識しないタイプが多いことに気づきました。もちろん、これは状況をさらに悪化させます。

バージョンの違いに対するあなたの提案によれば、Debian システムは次のようになるので、これが根本的な原因である可能性があると思います。

redacted@redacted ~$ file -v
file-5.35
magic file from /etc/magic:/usr/share/misc/magic

CentOSシステムは次の場所にあります。

redacted@redacted ~$ file -v
file-5.11
magic file from /etc/magic:/usr/share/misc/magic

straceテストでは、上記の2つの環境のバックアップも含めて/ etc / magicのファイルを読み込んでいることを示し、CentOSの場合、ファイルはプレーンテキストです。 straceは次のとおりです。

strace -e trace=stat,open,openat file -i bob.txt
open("/usr/lib64/tls/x86_64/libmagic.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/tls/x86_64", 0x7fff0427d1d0) = -1 ENOENT (No such file or directory)
open("/usr/lib64/tls/libmagic.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/tls", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
open("/usr/lib64/x86_64/libmagic.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/x86_64", 0x7fff0427d1d0) = -1 ENOENT (No such file or directory)
open("/usr/lib64/libmagic.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib64/tls/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib64/libz.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib64/tls/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
stat("/root/.magic.mgc", 0x7fff0427e750) = -1 ENOENT (No such file or directory)
stat("/root/.magic", 0x7fff0427e750)    = -1 ENOENT (No such file or directory)
stat("/etc/sysconfig/64bit_strstr_via_64bit_strstr_sse2_unaligned", 0x7fff0427dcb0) = -1 ENOENT (No such file or directory)
open("/etc/magic.mgc", O_RDONLY)        = -1 ENOENT (No such file or directory)
stat("/etc/magic", {st_mode=S_IFREG|0644, st_size=111, ...}) = 0
open("/etc/magic", O_RDONLY)            = 3
open("/usr/share/misc/magic.mgc", O_RDONLY) = 3
open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3
stat("bob.txt", {st_mode=S_IFREG|0644, st_size=19, ...}) = 0
open("bob.txt", O_RDONLY)               = 3
bob.txt: text/troff; charset=us-ascii
+++ exited with 0 +++

troffと.txtが一致しないことを気にしないでください。これは意図的なものです。 TROFFが選択された理由は、単純なプレーンテキスト以上であるためです。

同僚の1人がCentOSシステムでファイルのバージョンを更新できることを確認し、結果が良いかどうかを確認します。

編集#01

それで、他のツールxdg-mimeを調べている間、私はそのプログラム内で(少なくとも)x-gzipとgzipの間に機能的な違いがないようです。

xdg-mime型のソースコード、ll。 2427-35

プログラム内でエイリアスと見なされているようです(この問題を解決するために、プログラムに別のマジックストアがあるかどうかを調べています)。したがって、両方のバリアントがマジックファイルに存在するのが一般的なようです。

ベストアンサー1

application/gzip2012年IANAによって定義されました。

ただし、HTTPの場合は、次のコメントがあります。

[...]または以前のHTTP実装との互換性のために、アプリケーションは「x-gzip」および「x-compress」をそれぞれ「gzip」および「compress」と同じように処理する必要があります。

しかし、これはかなり(非常に)古いHTTP / 1.1のためのものであり、人々がそれを使用する用途に応じてまったく異なるゲームです。

x-gzip自体は、誰もが登録されていないサブタイプに使用できると言った1990年代初頭の製品です。

一般的に言えば、どちらも使用されており、使用されています。できれば選ぶ私は非x-変形を使用します。しかし、100%一貫性なぜなら、そのようなことは獣の本性上非常に難しいだろうからだ。時代が変わるように、file同じ機能を持つ他のツールも変わります。

基準等についてはRFC 6838(2013年1月) 強くタイプの使用はお勧めできませんx-


誰でも見てください。file注文するそれ自体はx-gzip次のように置き換えられます。gzip 2019(外観で判断)。

BGZF(ブロックされたgzip)があります。x-gzipを使うしかも。それは「もっと」上記のRFCとの競合はありますが、gzipのバリエーションなので理解できます。しかし、このようなものを所定の位置に置くには長い時間がかかります。どのように多くのアプリケーションなどで使用されているか誰が知っていますか?


一貫性を確保する唯一の方法は、同じデータベースがシステム全体で使用されるようにすることです。

file使用マジックパターンファイル そしてできる講座配布magic.mgcスクリプトを使用して挿入する必要があると言う$HOME/.magic-m、スクリプトのオプションを使用します(この/このマジックファイルを使用してください)。別のバージョンを使用すると問題が発生する可能性がありますが、fileどのバージョンを使用するかはわかりません。

マジックファイルは、テキスト形式で作成された後にmgcにコンパイルされます。

file -C -m my-magic-file

しかし、一つあります。できるプレーンテキストとしても使用してください。たぶんCentOSシステムで何が起こったのでしょうか? Aはstrace何が起こったのかを明らかにしなければなりません。

strace -e trace=stat,open,openat file -i foo.ext

これが非常に一貫性がなく、あちこちに現れている場合は申し訳ありません。

おすすめ記事