私はLinuxを学んでいます。私はタールボールを作るときに買収の順序が重要であるという事実に驚きました。
tar -cfvz casual.tar.gz snapback.txt bucket.txt
エラーが発生します。
tar: casual.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
しかし、次のようなコマンドを出すと:
tar -cvzf casual.tar.gz snapback.txt bucket.txt
エラーなしで生成されたターボール
この例では、パラメータの順序がなぜ重要なのか、またはその理由を理解できる情報をどこで見つけることができるのかを説明できる人はいますか?エラーが発生した最初の例と同じように試み、ロジックは必要なパラメータcとfを最初に配置してから別のパラメータを配置することでした。
私はこれが起こる理由を理解することを含むLinuxを完全に吸収したいと思います。よろしくお願いします!
答え1
順序が重要かどうかは、オプションがマイナス記号で始まるかどうかによって異なります。
$ tar -cfvz casual.tar.gz snapback.txt bucket.txt
tar: casual.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
$ tar cfvz casual.tar.gz snapback.txt bucket.txt
snapback.txt
bucket.txt
この異常な動作は、次の文書で文書化されています。マニュアルページ
Options to GNU tar can be given in three different styles.
In traditional style
...
Any command line words that remain after all options has
been processed are treated as non-optional arguments: file or archive
member names.
...
tar cfv a.tar /etc
...
In UNIX or short-option style, each option letter is prefixed with a
single dash, as in other command line utilities. If an option takes
argument, the argument follows it, either as a separate command line
word, or immediately following the option.
...
tar -cvf a.tar /etc
...
In GNU or long-option style, each option begins with two dashes and
has a meaningful name
...
tar --create --file a.tar --verbose /etc
tar
、「テープアーカイブ」の略語は、現在のルールが確定する前に存在していたため、他の互換モードを維持します。
したがって、「Linuxを吸収」するには、いくつかの入門プロセスをお勧めします。
- 常にマニュアルページをお読みください
- 時には構文の小さな違いが重要です。
- エントリの場所 - ほとんどのコマンドでは、オプションがコマンド名の後に最初に続く必要があります。
- マイナス記号が必要かどうか(たとえば、最初にマイナス記号があるかどうかによって
tar
異なります)ps
- 空白が選択肢であるか、必須であるか、または存在しないかどうか(
xargs -ifoo
とは異なりますxargs -i foo
)
- いくつかのことはあなたが期待どおりに流れない
一般的な方法で目的の動作を取得するには、または直後に出力ファイル名を入力しますf
。-f
$ tar -cvzf casual.tar.gz snapback.txt bucket.txt
snapback.txt
bucket.txt
または:
$ tar -c -f casual.tar.gz -z -v snapback.txt bucket.txt
あるいは、あまり一般的ではありませんが、読みやすいGNUロングスタイルを使用することもできます。
$ tar --create --verbose -gzip --file casual.tar.gz snapback.txt bucket.txt
答え2
-f
tarのマニュアルページのオプションを見ると、次の情報が得られます。
-f, --file ARCHIVE use archive file or device ARCHIVE
これは-f
、オプションの後の次の単語がファイル名になることを意味します。あなたの例では、ファイル名として使用される-f
文字が続きます。vz
その後、呼び出されるまで各引数を圧縮する入力に解析しますvz
。これを試みると、圧縮する名前のファイルtar
がないことを確認し、エラーが発生します。casual.tar.gz
したがって、後で-f
常に作成したいファイル名に従う必要があります。