トップ «前の日記(2009-06-08(Mon)) 最新 次の日記(2009-06-10(Wed))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2009-06-09(Tue) もうじき降るかも

XZ Utils

まだ Experimental にも入ってないのだろうか。
と思ったら、lzmaがそれのような。xz-4.999.8betaには同名のコマンド (xz(1)のシンボリックリンクだけど)があるし...

で、追試。GNU tar-1.22 は J オプションで xz(1) にフィルタする。
また、 --lzma も指定できる。

適当に色々圧縮、展開して試す。 lfs に入れた xz-4.999.8beta より、特に指定しない場合はlzma が幾らか 高い圧縮率を示すようだった。
ちなみに、*.xz も *.lzma も、GNU fileutilsのデフォルトでは "data"としか表示されない。

file(1)ちょっとだけ。

さて、どうやったら "data" 以外の文字列を出力できるのか。
man 1 fileによれば、マジックナンバーをmagic(4) の参照から得ているようだ。
とりあえず Linux From Scratch SVN で少し遊んでみる。

$ file --version
file-5.00
magic file from /usr/share/file/magic

そんなファイルはない。/usr/share/file/magic.mgc ならあるが。
man 3 libmagic すると、Filesの項目に、

/usr/share/file/magic      The non-compiled default magic database.
/usr/share/file/magic.mgc  The compiled default magic database.

古いfile(4.17)のマニュアルには、この他に magic.mime{,.mgc}も 記述されていた。
まず悪戯から。

$ cd /usr/share/magic
 
$ file magic.mgc  
magic.mgc: magic binary file for file(1) cmd (version 7) (little endian)
 
$ sudo mv magic.mgc magic.hoge
 
$ file magic.hoge 
file: could not find any magic files!

マジックナンバーはソースツリーの magic/Magdir 配下に定義されており、 make 時に magic.mgc が作られている...らしい。
適当に s/bzip2/bakka/ して make install すると、

$ ./file some.tar.bz2 
some.tar.bz2: bakka compressed data, block size = 900k

そこまで凝らなくても、~/.magic を編集すればいい。
magic/Magdir/pdf を参考にして、適当なフォーマットを定義してみる。

$ cat > ~/.magic <<"EOF"
>0       string          %myformat-   my test document
>!:mime  application/myformat
>EOF
 
$ echo "%myformat-0.01" > new.img
$ dd if=/dev/urandom of=temp count=1 >&/dev/null
$ cat temp >> new.img
$ file new.img
new.img: my test document

さて、xzやlzmaのマジックナンバーを調べろ、ということに なりそうだけど、ど、ど、

左手首がおかしくなってきたので、ここまで。


リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。