• ベストアンサー

".bib"自己解凍形式ファイルの作り方

Linuxにおいて、".bin"という拡張子の、シェルスクリプトな自己解凍形式のファイルがあります。 この".bin"ファイルはどのようにして作成すればよいのでしょうか?何かツールやコマンドがあるのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • masa19
  • ベストアンサー率75% (22/29)
回答No.3

jre-6u1-linux-i586.bin を見てみましたが、 前半がシェルスクリプトで後半がELF形式の実行ファイルのようですね。 シェルスクリプトの途中で、 % tail -n +373 "$0" > outname としてバイナリ部分を outnameファイルとして書き出した後、 % ./outname として実行しているようです。 ご自分で作成する場合は、 シェルスクリプトとtar.gzアーカイブを用意して、 シェルスクリプト内でtail等で自身のスクリプトからバイナリ部分のみを抽出するコードを書いておいて、 cat で結合してやれば良いと思います。 例えば、aaa.sh と bbb.tar.gz を用意して ==== aaa.sh の内容 ==== #!/bin/sh tail -n +4 $0 | gzip -dc | tar xvf - exit ======================= ファイルの結合 % cat aaa.sh bbb.tar.gz > ab.bin 作成した ab.bin の実行 % sh ab.bin のようにするとスクリプト内で解凍されると思います。 スクリプト内の exit 前に解凍したものを実行してやるようなコードを書いておけばいろいろなことができます。 詳しくは java の bin ファイル内のスクリプトを読んでみてはいかがでしょうか?

foelinux
質問者

お礼

詳細な解説ありがとうございます! 今回の内容の、点と点が線で結ばれました(^^) 基本的な仕組みが理解できましたので、 ファイル内のスクリプトを読んだり、さらに調査するなどして、 解決していきたいと思います。 お答え頂いた皆様、本当にありがとうございました! ひとまずこのトピックはクローズしたいと思います。

その他の回答 (2)

  • dedenn
  • ベストアンサー率54% (6/11)
回答No.2

いい例ですね。 本題からずれそうなので・・・・ では、ダウンロードしたbinファイルの拡張子をshに変えて 実行してみてください。 同じ結果が得られるはずです^^

foelinux
質問者

お礼

実行できました!ありがとうございます。 エディタでさきほどの.binファイルを開いてみますと、 頭部分に見慣れたシェルスクリプトが記述されていました。 後半は、テキストエディタで開いたせいか、メチャクチャですが…。 つまり今回の結論だと…  .binは.shの拡張子を書き換えただけのもの ということですね? ということは、本題から今回の質問がずれてきそうですが…。 今まで".shファイル"というのは、単純にシェルコマンドを羅列したファイルと思っていましたが、 どうやら今回の結果を見てみると、展開していく中身(?)も内包した状態で、.shファイルが生成されているということが分かりました。 今回したい質問が大きく変わりましたね(^^; 「.shファイルひとつに複数のファイルをまとめる(アーカイブ?)する方法はどうすればいいのでしょうか?」 ということになるのでしょうか…。

  • dedenn
  • ベストアンサー率54% (6/11)
回答No.1

はじめまして^^ ご自分でもお書きですが、スクリプトの拡張子を”.bin”にしている ものが多いようですね。 というか、ほとんどシェルスクリプトだし(笑 自前で書いて、拡張子がbinというだけですね。 結局コード(何のシェルを使うのか)が問題になるので、 ツールやコマンドが必要なのではありません。

foelinux
質問者

お礼

はじめまして、回等ありがとうございます! 気になる点として、 http://www.java.com/ja/download/linux_manual.jsp の、SunMicroのサイトで、自己解凍形式の.binファイルがダウンロードできますよね。 このbinファイルのイメージとして、 binという圧縮(?)されたファイルの中に、 自動実行のためのシェルスクリプトファイルと、実行されるrpmファイルが含まれているイメージを持っていました。 dedenn様がおっしゃっておられるのは、 .shの拡張子を.binに書き換えているということでしょうか? Linux初心者であまり分かっていなくて、申し訳ありません。 よろしくお願いします。

関連するQ&A

専門家に質問してみよう