• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:tar+sshコマンドの解説)

tar+sshコマンドの解説

このQ&Aのポイント
  • tarとsshコマンドを組み合わせた一行のコマンドの解説
  • tar -cvf '-' /root/backupは、/root/backupを固めている
  • | ssh 192.168.1.2は、パイプでssh接続している

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

  • ベストアンサー
回答No.1

説明は難しいですね。 '-'の意味はtarやcat等のコマンドの作りに依存しますが、一般的にUNIX系のコマンドでは状況に応じて標準入力、または、標準出力を意味します。 標準入力、標準出力は本来は端末画面に表示されるもの、ぐらいの理解でとりあえずは良いのではないでしょうか。 i)パイプ'|'は左側のコマンドの標準出力を右側の標準入力に接続します。 ii)リダイレクト'>'は左側のコマンドの標準出力を、右側に指定したファイルに出力します。 iii)"cat /etc/group | cat '-' > ~/group"は"cp /etc/group ~/group"とだいたい同じ動きをします。 これを踏まえて説明してみます。 (謎1の説明) tarの"-f"オプションに'-'を指定すると、標準出力に”tmp.tarの内容”を出力します。 パイプが右側にあるので、画面には出力されずにパイプの右側にあるコマンドに渡されます。 (謎2の説明) ”| cat '-' > /tmp.tar”でパイプの左側のコマンドが出力した内容、この場合は"tmp.tarの内容"、を持つファイル(/tmp.tar)を作成します。 今回はパイプとcatコマンドの間に"ssh 192.168.1.2"が割り込んでいます。 さらっと流した"| ssh 192.168.1.2"のところが理解する上では難しいかもしれません。 やっている事はパイプ'|'とcatコマンドの間に入って、192.168.1.2上で"cat '-' > /tmp.tar"を実行しています。 ただcatコマンドを実行する前にパイプの左側の標準出力とcatコマンドの標準入力を接続してデータが流れるようにしています。 sshが干渉せずにデータが流れるように動いてくれるため、192.168.1.2上に/tmp.tarファイルが作成されます。 参考までに、同一ホスト上に/tmp.tarを作成する次の4つのコマンドは同じ動きになります。 # tar -cvf /tmp.tar /root/backup # tar -cvf '-' /root/backup > /tmp.tar # tar -cvf '-' /root/backup | cat '-' > /tmp.tar # tar -cvf '-' /root/backup | ssh localhost "cat '-' > /tmp.tar" 192.168.1.2のsshdにはそれなりの設定がされていると思います。最後の例はそのまま実行しようとしても、sshdの設定によってエラーになるかもしれません。 "cat '-'"と"cat"は同じ意味とか、標準入出力のちゃんとした説明とか、いろいろ不足しているとは思いますが、理解できているところ、いないところを整理する手助けになれば幸いです。 以上

xxyybbaa55
質問者

お礼

なるほど! 分かりやすい解説ありがとうございました!

関連するQ&A