bsdtarを使用してアーカイブを抽出すると、「/dev/st0」を開くことができません」というエラーが発生するのはなぜですか?

bsdtarを使用してアーカイブを抽出すると、「/dev/st0」を開くことができません」というエラーが発生するのはなぜですか?

bsdtarrpmにあったのでソース(libarchive Webサイト)からインストールしましたyum

bsdtarヘルプメッセージを見ることができます。たとえば、

$ bsdtar --help
First option must be a mode specifier:
  -c Create  -r Add/Replace  -t List  -u Update  -x Extract
Common Options:
...
bsdtar 3.1.2 - libarchive 3.1.2

ただし、ファイルを抽出しようとすると、次のエラーが発生します。

$ bsdtar -xzC . < archive.tar.gz
bsdtar: Error opening archive: Failed to open '/dev/st0'

このエラーをどのように解決できますか?

答え1

xモードではtarrequireのすべてのPOSIX互換バージョン-fデフォルト以外の場所から入力アーカイブを読み込みます。を読むには、POSIXではファイル名も指定するstdin必要があります。-

$ tar -xf - < file.tar

GNUとGNUのtar両方がbsdtarこの構文を理解しています。

GNUは、次の場所でアーカイブをtar許可するという点でPOSIXとは異なりますtarstdin いいえ明確な-f -主張。実際にPOSIXではがなければ-f -まったく使用してはいけないと言いますstdin。あなたの質問からtarGNUユーザーからコマンドラインの例を得ていることが明らかになりました。

bsdtarPOSIXをフォロー-f -stdinファイルの代わりに読みたい場合に必要です。

これは実際の質問につながります。何も提供されていない場合、読み取りが選択されるの-f -はなぜですか?上記のデフォルト値です。 POSIXは、単にこのデフォルト値が「システムに依存する」ことを意味し、最初の名前を使用することを選択します。bsdtar/dev/st0bsdtarテープドライブ~の開発ノード、これはLinuxにあります/dev/st01

あなたはこう言うべきです:

$ bsdtar -xf - < archive.tar.gz

またはリダイレクトを完全にスキップします。

$ bsdtar -xf archive.tar.gz

-zGNUbsdtarとGNUの両方がモードでtar自動的に圧縮を検出するため、削除されました。 (以前のバージョンのGNUには圧縮型フラグが必要でしたが、gzipxtarバージョン 1.15 には自動検出機能が追加されました。、2004年発売。 )

また、アーカイブを解凍する前に現在のディレクトリに変更するように-C .求められたため、対応するビットも削除しました。bsdtarそれアクションなし


  1. 最初のテープドライブがデフォルトの理由は何ですか?なぜならtarテープアーカイバーですtar~から一度実際、ほとんどすべてのUnixシステムにはテープドライブがあります。

関連情報