質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Q&A

解決済

1回答

1041閲覧

linux このコマンドの意味を教えて下さい。

hpptms

総合スコア54

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

0グッド

1クリップ

投稿2019/11/13 08:10

いつもお世話になっております。
こちらの掲示板でscp、rsyncを使わないでサーバー間のファイル転送をするにはどうすればいいでしょうかという質問をし、以下の解答を頂きました。
解答を頂いたのはいいのですが、コマンドの意味が分からず理解したいと思っております。
具体的に分からない点は、tar コマンドのオプションの後の - と、
ディレクトリを指定した後の .です。
ばらして実行したり、ググってみましたがいい解凍が得られず困惑しております。
初心的な質問かもしれませんが、よろしくお願い致します。

sudo tar cfCm - /home/userA/dir .| ssh vagrant@192.168.33.10 tar xfCm - /home/userB/dir

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoorwm

2019/11/13 08:16

> いい解凍が得られず困惑しております。 tarコマンドを使用していますが、解凍したい、という意味で書きましたか?
hpptms

2019/11/13 08:34

いえ、解答頂いたのがtarコマンドだったのでそのまま利用させて頂いております。 tarコマンド自体の理解はアーカイブを作成、解答くらいにしか理解しておりません。 最初 - はアーカイブファイル名かと思っていましたが、-をaなどにしてみると全く違う結果になり何か意味があるとは気づいております。 ディレクトリパスの末尾の .は一度カレントディレクトリに出力しているのかと思っているのですが、何か違う気がしています。 全く見当違いな事を書いているかもしれませんが、よろしくお願いします。
cateye

2019/11/13 08:35

↓こちらで分かりませんか? GNU tar manual→https://www.gnu.org/software/tar/manual/
t_obara

2019/11/13 08:38

まずはtarについての動作を学びましょう。オプションによりどのように動作するか確認していると思いますが、まずは(パイプは理解しているとして)- の代わりに適当なファイル名を指定してどのように動作するか、オプションなどを変更した際にどのように変化するのかを確認すると良いかと思います。 ただ、本来であれば、その課題を提示された方にきちんと聞くのが筋かと。ググってご自身で解決策を見つけることを期待していると思われますが、他人に聞くことを(この課題を提示した人は)期待しているのですか?
hpptms

2019/11/13 08:48

アドバイスありがとうございます。 ググるなどして自力で解決出来るのが一番だと思いますが、煮詰まって質問致しました。 tarマニュアル読んでみます。
guest

回答1

0

ベストアンサー

まぁ言い出しっぺなんで、一応解説します。

その前に、前の質問では自分は「cfCm」とか「xfCm」とか、「m」のオプションは指定していませんでしたが、ご自身で意図してつけてますか?
別にそうであれば問題ありませんが、とりあえずこれは抜きで話をします。


まずは、ssh抜きで話をしましょう。

tarのオプションについて、ちょっと癖があるので分かりづらいと思います。

tar cfC - /home/userA/dir . tar xfC - /home/userB/dir

は、

tar -c -f - -C /home/userA/dir . tar -x -f - -C /home/userB/dir

と同様の意味を持ちます。
前者で使われている事が多いですが、今回はわかりやすいように後者の方で説明します。

オプション内容
-ctarファイルを作成する
-xtarファイルを展開する
-f <tarファイル名>tarファイル名の指定
-C <ディレクトリ名>そのディレクトリにcdし、処理をする

tarファイルは、複数のファイルをまとめて、一つのファイルにアーカイブするコマンドです。
その際には、ファイルのパーミッション・更新日付などを含めて アーカイブします。

つまり、

bash

1cd /home/userA/dir 2tar -c -f /tmp/tmp.tar . 3cd /home/userB/dir 4tar -x -f /tmp/tmp.tar

というように、tarファイルにアーカイブしそれを展開すれば、(「/tmp/tmp.tar」というファイルができている事を除けば)パーミッション・更新日付などを保ったままコピーした事と同等になります。(細かい違いはあるかもしれませんが)

更に、先に説明したとおり「-C」オプションでディレクトリを変更する事ができますので、

bash

1tar -c -f /tmp/tmp.tar -C /home/userA/dir . 2tar -x -f /tmp/tmp.tar -C /home/userB/dir

というようにコマンドを一回で実行する事ができます。

さて、そもそもなんでディレクトリを変更しなければならないか、ですが、tarコマンドはファイル名を実行時のディレクトリからの相対パスそのままで保存します
この辺りは、やってみたほうが早いと思います。
上記の方法と、

bash

1tar -c -f /tmp/tmp.tar -C /home/userA dir/. 2tar -x -f /tmp/tmp.tar -C /home/userB/dir

とでどう違うか、確認してください。

次に、「-f -」です。
-f」オプションはtarファイル名の指定と説明しましたが、tarファイル名に「-」を指定すると、作成モードの場合にはtarファイルの内容を標準出力に出力し、展開モードの場合にはtarファイルを標準入力から読み込みます。
ですので、パイプを使用して、

bash

1tar -c -f - -C /home/userA/dir . | tar -x -f - -C /home/userB/dir

とすれば、標準入出力を介してtarファイルをやり取りするので、tarファイルが残る事はありません。


ここまでで、tarファイルによるローカルでのコピーの説明になります。
次にsshです。

ssh userA@serverB

とした場合、serverBにuserAというユーザでログインする事になりますが、正確には「ログインしコマンドを実行する。指定がなければログインシェルを起動する」という事です。
後ろにコマンドを付加すると、そのコマンドを実行します。

また、sshは自身の標準入力をログイン先で実行したコマンドの標準入力に送り、ログイン先の実行したコマンドの標準出力を自身の標準出力に出力します。

つまり、

bash

1tar -c -f - -C /home/userA/dir . | ssh userA@serverB tar -x -f - -C /home/userB/dir

と実行すれば、先に説明したコピー処理を、sshを介してネットワーク越しに処理できるのです。


説明が下手なのでこんな説明でわかるかどうか怪しいですが、とりあえず上記のことを踏まえて、もう一度調べ直してみてください。

投稿2019/11/13 12:00

katsuko

総合スコア3469

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hpptms

2019/11/14 01:28 編集

詳細な説明ありがとうございます。 自分でも調べて標準入力に出力、入力できる事は分かりましたが、ファイル自体が残らないまでは調べられませんでした、ご説明ありがとうございます。 今の自分では到底思いつかないコマンドで背伸びしましたが、linuxコマンドの奥深さを知りました。 tarはオプション指定にハイフンがいらない、ハイフンをつけると挙動が変わる事があるなど色々勉強になりました。 ドットの意味も分かりました。ディレクトリ以下を全て含むという意味なんですね。 なぜ/*じゃないのか・・・もうこの辺はtarのお作法なんですかね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問