「tar xzf-」のハイフン「-」はどういう意味ですか?


23

コマンドラインからドロップボックスをインストールしようとすると、コマンドを読みます

cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -

-ここでどういう 意味ですか?前のディレクトリですか?


9
ちょっとした工夫:質問しているオプションはですf -。これにより、manページで答えを見つけるのが少し簡単になるかもしれません。
studog

4
あなたが何を、説明することができれば、それは本当に参考になる正確のマニュアルについてのあなたには不明であるwgettar。こうすることで、それぞれの開発者はドキュメントを改善して、将来のユーザーが同じ問題に二度とつまずかないようにすることができます。言い換えれば、ヒーローになり、世界をより良い場所にしましょう!
イェルクWミッターク

2
tarがstdinを使用するのは良いデフォルトですが、それは遺産であるため、テープで作業することなので、それはしませんでした。代わりに、(fオプションを使用して)ファイルを操作する方法を学習し、stdinのファイル名の代わりに-を使用する規則に従います(作成の場合はeXtractまたはstdoutの場合)
at

1
GNUのtarの場合@eckesは、標準入力がある場合を除き、デフォルト$TAPE設定されています。
クリリス

回答:


42

一部のコマンド-は、ファイル名の代わりに次のいずれかを受け入れます。

  • 名前付きファイルの代わりに標準出力に書き込む。これは、後に-引数が渡されることです。wget-O
  • 名前付きファイルからではなく、標準入力から読み取ること。これは-引数がtarafterに渡したものxzfです。

示したコマンドは、アーカイブファイルをダウンロードしwget、で解凍しtarます。これを達成するために、の出力wgetISは、パイプ|の入力に)tar。これがwget、ファイルではなく標準出力に書き込み、ファイルではtarなく標準入力から読み取る理由です。


「一部のコマンド」ではなく、「ほとんどのコマンド」と言います。POSIXオプション構文仕様の一部だと思います。
バーマー

2
@Barmar Yes and no:ガイドライン13:読み取りまたは書き込みのいずれかで開くファイルを表すためにオペランドを使用するユーティリティの場合、 '-'オペランドは、標準入力(またはコンテキストから明らかな場合は標準出力)のみを意味するために使用する必要があります出力ファイルが指定されています)またはという名前のファイル-。そうならば -、「ファイルオプション」のオペランドである、それは特別な意味を持っている、そしてそれは、標準入力/標準出力のことでなければなりません。このプログラムは、特別なケースとして扱わず、単にファイルを探すだけです-
バクリウ

(通常、これらの場合、オプションを省略することはを使用するのと同じです-
Bakuriu

@Bakuriu私が言ったことをどのように反論するかわかりません。ほとんどのコマンドはファイル名引数を取るので、そのガイドラインに従うことになっていると思います。しかし、「ファイルを操作するほとんどのコマンド」として修飾する必要があります。
バーマー

1
@Barmarガイドラインに従うための1つの方法は、特別な扱いを一切拒否-、リテラルファイル名として扱うことです。ガイドラインに反する唯一の方法は、-特別に扱うことですが、ガイドラインが示唆するものとは別の意味を持ちます。
エリアケイガン

12

これは、多くのUnixプログラムが「実際にファイルを開く代わりに、読み取りstdin(または書き込みstdout)」と解釈する単なるファイル名です。

つまり、プログラムにストリームされる入力から読み取ることを意味します。あなたの場合、それはwgetの出力です。


6
それは本当にファイル名ですか?
エリックドゥミニル

7
@EricDuminilプログラムは、ファイル名のみを受け入れる場所でプログラムがそれを受け入れるという意味でのファイル名ですが、実際にはディレクトリ内のファイルの実際の名前についてではありません。
JoL

5
@EricDuminil:特に、この規則に従うプログラムでは、という名前のファイル./-実際に開きたい場合に使用する必要あります-
ヨルグWミットタグ

4
@EricDuminil実際には:はい!この名前のファイル。UNIXの意味でstdinは、ファイル記述子であり、それ-を使用するために指定する名前です。ただし、OSの観点からはファイル名ではありません。ユーザーの観点からのみ。
マーカスミュラー

3
@rexkogitansいいえ /dev/stdinカーネル機能によって提供される単なる便利なファイル名です。通常 fopen("/dev/stdin", "r") stdinを使用することを選択したプログラムを作成する場合、どこに何も起こりません。先に進みextern FILE* stdin、libcヘッダーが提供したものを使用します。ちなみに、それは整数ファイル記述子0です。
マーカスミュラー

5

-引数は、ファイルの代わりにtarアーカイブを読み込むことを指定しstdinます。GNUのtarマニュアル

あなたが使用している場合-のようにアーカイブ名tar(リストまたはファイルを抽出するとき)標準入力からアーカイブを読み込み、

他のコマンドも同じ動作をし、POSIX.1-2017標準で指定されています

ガイドライン13

オペランドを使用して読み取りまたは書き込み用に開くファイルを表すユーティリティの場合、 ' -'オペランドは、標準入力(またはコンテキストから出力ファイルが指定されていることが明らかな場合は標準出力)またはファイルのみを意味するために使用する必要がありますという名前-

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.