GNU/Linux >> Linux の 問題 >  >> Linux

自己解凍型スクリプト:Tar -xoとDd?

自己解凍型のスクリプトを使用しています。これは、QNAPNASにパッケージをインストールするためのスクリプトです。

開始時に、ファイルの残りの部分を抽出するスクリプトがいくつかあります。

script_len=102
/bin/dd if="${0}" bs=$script_len skip=1 | /bin/tar -xO | /bin/tar -xzv

これはddを使用します バイト102以降のバイトをtarにコピーし、そこで抽出します。

-xOとは 行う?そして、なぜそれが「2回」抽出されるのですか(-xを使用したtarの2回の呼び出し) )? このオンラインでの議論はあまり見つかりませんでした。manページは、「ドライブ」と関係があることを示唆しているようです。 (0とOが混同されたようです!)

その後、スクリプトは次のことを行います。

offset=$(/usr/bin/expr $script_len + 2042)
/bin/dd if="${0}" bs=$offset skip=1 | /bin/cat | /bin/dd bs=1024 count=7 of=$_EXTRACT_DIR/data.tar.gz

これはファイルにさらにスキップし、そこでバイトを新しいzip形式のTARにコピーするように見えます。おそらく、それらのバイトはすでにそのように構造化およびエンコードされています。

しかし、最初のコマンドでtarを介してこれらのバイトをすでに読み取っていませんか? ddがどのように表示されるかわかりません ファイルの読み取りを停止するように指示されました。

承認された回答:

QNAPパッケージを見てみましょう。例: http://www.twonkyforum.com/downloads/8.3/TwonkyServerEU_8.3_arm-x41.qpkg

....
script_len=2467
/bin/dd if="${0}" bs=$script_len skip=1 | /bin/tar -xO | /bin/tar -xzv -C $_EXTRACT_DIR script_len=2467
....

次に、ddを使用してデータをコピーしましょう 、中身を見てください:

%dd if=TwonkyServerEU_8.3_arm-x41.qpkg bs=2467 skip=1 > first

これは生のTARアーカイブであり、その中に単一のtar.gzファイルが含まれています:

%file first 
first: POSIX tar archive (GNU)

%tar -tvf first 
-rw-r--r-- admin/administrators 7175 2017-01-06 17:49 control.tar.gz

次のパイプラインステップは/bin/tar -xOです 、およびTARマニュアルに記載されている内容は次のとおりです。

抽出されたファイルを標準出力に書き込むには、ファイルシステム上にファイルを作成する代わりに、--to-stdout' ()を使用します。 -O’)と--extract' ( –get’、 `-x’)。

このオプションは、ファイルを抽出してパイプ経由で送信する場合に便利であり、ファイルシステムに保存する必要はありません。複数のメンバーを抽出すると、それらは連結された標準出力に表示されます 、アーカイブで見つかった順序で。

control.tar.gzファイルは1つしかないため アーカイブ内では、STDOUTに抽出され、次のパイプラインステップで処理されます。このステップでは、TARが再度呼び出され、アーカイブから内部コンテンツが抽出されます。

関連:PythonのIDLEで開く.pyスクリプトを取得しますか?

したがって、基本的に、「tar」アーカイブ内に「tar.gz」アーカイブがあります。これが、2つの連続したtarである理由です。 抽出するにはコマンドが必要です。

tarに注意してください 本質的にストリームデータを操作するように設計されているため、
アーカイブの終わりを確実に検出でき、その後にさらにデータが続く場合でも、

物理的には、アーカイブは、ゼロバイトの2つの512ブロックで構成されるアーカイブ終了エントリで終了する一連のファイルエントリで構成されます。

したがって、tar -xO は、最初のデータファイルの読み取り後に停止し、残りを破棄します。これは、qpkgでこのストレージ形式を使用する理由であると思います。 。


Linux
  1. Linuxで.gzファイルと.tar.gzファイルを抽出する方法

  2. tarおよびxzユーティリティを使用してLinuxで.xzファイル形式を解凍するにはどうすればよいですか?

  3. ファイルのアクセス許可と保存?

  1. リダイレクトとパイプ出力?

  2. アクセス許可とファイル所有者を維持する圧縮/アーカイブ?

  3. Linux でファイルを tar および untar し、tar ファイルの内容を表示する方法

  1. vsFTPDのインストールと構成

  2. unix - ファイルの先頭と末尾

  3. *.tar.bz2 ファイルを抽出していますか?