🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

Linux

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

Q&A

解決済

2回答

2181閲覧

rsyncコマンド (差分を取りたい)

hiroki88

総合スコア66

Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

Linux

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

0グッド

0クリップ

投稿2021/02/01 02:41

編集2021/02/01 03:20

rsyncコマンドを使用して差分を取りたいと思っています。
環境としてはAWS環境内に2つのサーバがあり片方のサーバ内のディレクトリにファイルが
追加された場合もう片方のサーバ内のディレクトリに更新してあげたいです。

下記の場合だとAサーバとBサーバにsabunディレクトリがあり同期を取っています。(scpコマンドで転送しました)その後Aサーバのsabunディレクトリ内にc.txt、testディレクトリ内にc.txtが追加されたので2つのc.txtをBサーバのsabunディレクトリにも追加してあげたいです。

Aサーバ sabun---a.txt ---b.txt ---c.txt(新規ファイル) ---test---a.txt ---b.txt ---c.txt(新規ファイル) Bサーバ sabun---a.txt ---b.txt ---test---a.txt ---b.txt

そこでrsyncで差分を抽出したので下記のコマンドを使用しました。
rsyncコマンドはBサーバにアクセスしている状態で実行しています。
一旦dty-runで実行しています。

Teraterm

1rsync -achnvou --delete -e `秘密鍵` Aサーバユーザ名@Aサーバホスト名:~/sabuntest/ ~/sabuntest 2 3実行結果 4usage: ssh [-1268AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] 5 [-D [bind_address:]port] [-E log_file] [-e escape_char] 6 [-F configfile] [-I pkcs11] [-i identity_file] 7 [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec] 8 [-O ctl_cmd] [-o option] [-p port] 9 [-Q cipher | cipher-auth | mac | kex | key] 10 [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port] 11 [-w local_tun[:remote_tun]] [user@]hostname [command] 12sending incremental file list 13drwxr-xr-x 57 2021/02/01 11:30:01 sabuntest 14-rw-r--r-- 0 2021/02/01 11:29:43 sabuntest/a.txt 15-rw-r--r-- 0 2021/02/01 11:29:47 sabuntest/b.txt 16drwxr-xr-x 45 2021/02/01 11:30:12 sabuntest/test 17-rw-r--r-- 0 2021/02/01 11:30:07 sabuntest/test/a.txt 18-rw-r--r-- 0 2021/02/01 11:30:10 sabuntest/test/b.txt 19 20sent 256 bytes received 12 bytes 598.00 bytes/sec 21total size is 0 speedup is 0.00 (DRY RUN)

差分を抽出したい場合はuオプションを使用すると調べたらのっていたのでやってみましたがこの
結果だと新規のc.txtファイル以外が更新されてしまう気がするのですが合っているのでしょうか?
自分は差分があるファイルが表示される認識だったのですが差分があるファイルが表示されないのでしょうか?
初めてrsyncを使用するので実行結果の見方は合っている自信がありません。
またパスの指定をする時の最後の/ですがディレクトリの中身の差分を抽出したい時は移行元のパスの最後に/をつければ大丈夫でしょうか?
分かる方がいたらご教示ください。お願いします。

追記 各サーバーのディレクトリ内をlsした結果
※実際にc.txtは転送はしていません。

Teraterm

1Aサーバ 2合計 8 3drwxr-xr-x 3 ユーザー グループ 57 2月 1 11:30 . 4drwx------. 37 ユーザー グループ 4096 2月 1 11:29 .. 5-rw-r--r-- 1 ユーザー グループ 0 2月 1 11:29 a.txt 6-rw-r--r-- 1 ユーザー グループ 0 2月 1 11:29 b.txt 7-rw-r--r-- 1 ユーザー グループ 0 2月 1 11:29 c.txt 8drwxr-xr-x 2 ユーザー グループ 45 2月 1 11:30 test 9 10Bサーバ 11合計 0 12drwxr-xr-x. 3 ユーザー グループ 44 2月 1 11:42 . 13drwxrwxr-x. 4 ユーザー グループ 160 2月 1 11:41 .. 14-rw-r--r--. 1 ユーザー グループ 0 2月 1 11:29 a.txt 15-rw-r--r--. 1 ユーザー グループ 0 2月 1 11:29 b.txt 16drwxr-xr-x. 2 ユーザー グループ 32 2月 1 11:42 test

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

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

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

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

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

hentaiman

2021/02/01 03:09

問題無さそうですね、実際の各サーバーのディレクトリでのls -laの結果を載せてください
hiroki88

2021/02/01 03:23

追記の方致しました。 実行結果に表示されるファイルは同期するディレクトリ内で差分があるものではないのでしょうか? 自分の実行結果だと差分がないファイルが表示されていて差分があるファイルが表示されなかったので 差分があるファイルが表示されるようにはできませんでしょうか。
hentaiman

2021/02/01 03:32

そしたら打ったrsyncのコマンドを隠さずそのままコピペで貼ってみてください そこで間違えているだけかと思われます そこが原因なら回答出来ますが、そうじゃなかったら自分には分かりそうにない
hiroki88

2021/02/01 03:37

自分が実行したrsyncコマンドは秘密鍵等の個人情報以外はそのままコピペして載せております。 一応こちらにも載せておきます。 rsync -achnvou --delete -e `秘密鍵` Aサーバユーザ名@Aサーバホスト名:~/sabuntest/ ~/sabuntest
hentaiman

2021/02/01 03:40

質問に書いてあるのは分かっていますが、秘密鍵の部分を隠さず載せてください ここに書けば後で編集で消せるし履歴も追えないので。
angel_p_57

2021/02/01 03:48

少なくとも -e `秘密鍵` という部分は指定が間違っているようです。 実行結果に "usage: ssh" と出てる時点で、実行がうまく行っていません。 -e に指定するのは、ssh/rsh の代替コマンドの指定ですので、どのような意図で -e オプションを指定したのか明記してください。
hiroki88

2021/02/01 03:56

rsync -achnvoui --delete -e `ssh -i ~/.ssh/rjcs_keys/rjcs_admin.pem` rjcs_admin@rjcs-ec2-admin:~/sabuntest/ ~/r2rmt_work/sabuntest こちらですね。
hiroki88

2021/02/01 03:59

-eを指定したのは秘密鍵を設定したかったからです。 scpを実行した時もそうだったのですが、サーバBからサーバAにsshする時は 秘密鍵を指定しないとできないのでrsyncの時も-eを使用し秘密鍵を指定した形になります。 こちらの回答で伝わってますでしょうか?
angel_p_57

2021/02/01 04:50

はい。有難うございます。 原因は1つ見当がありますので回答に書きます。
guest

回答2

0

ベストアンサー

-e 'ssh -i ~/.ssh/rjcs_keys/rjcs_admin.pem'

こちらの指定ですが、おそらくサーバA上のsshがチルダを解釈しない古いバージョンと思われます。
※ scp -i ~/.ssh/XXX だとうまく行ってると思いますが、それはチルダをシェルが解釈して事前に展開するから

なので、-e 'ssh -i /home/ユーザ名/.ssh/XXX' のように、サーバAの環境に合わせて絶対パスを記述して試してください。なお、クォートはシングルでもダブルでも構いません。( バッククォートは× )

補足:
絶対パスを直接書く代わりに、HOME環境変数を利用する方法もあります。
-e "ssh -i $HOME/.ssh/XXX" のような指定で、チルダと同じような感覚で使えます。
なお、この場合シングルクォートは×でダブルクォートのみ可です。( シェルがダブルクォート内の変数指定を展開してから rsync に渡すため )

投稿2021/02/01 04:54

編集2021/02/01 05:15
angel_p_57

総合スコア1681

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

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

hiroki88

2021/02/01 05:49

ご指摘いただいたやり方で実行したら差分だけ表示されました!! "usage: ssh"の表示もなくなりました。 バージョンのことは気にしていなかったのでそんなとこでつまづいているとは思いませんでした。 scpはシェルは事前に展開してくれいるのでチルダを指定しても大丈夫とのことですが rsyncだとシェルが事前に展開してくれないのでしょうか?
angel_p_57

2021/02/01 06:01

rsync の -e オプションは、シェルを介さずに直接指定された ssh を実行します。なので展開されないです。また $HOME のような変数の指定と違って、チルダはクォートの中では事前展開されません。 ※scpの場合でも、scp -i "~/.ssh/XXX" とするとうまく行かなくなるはずです このトラブルは、たとえば以下の記事のように、以前は割と「よくある」話でした。 https://qiita.com/kazu56/items/05250e31688bb0c33a7e むしろ最近のSSHでチルダが大丈夫になっている、という方が、個人的には不思議な感覚です。
hiroki88

2021/02/01 06:05

そうなんですね、大変勉強になりました。 記事を拝見しましたが全く一緒の内容でした。 普段あまりコマンドをしようしないため、今後気を付けていきたいと思います。 本当にありがとうございました。
hentaiman

2021/02/01 06:10

> 個人的には不思議な感覚です。 これが自分の場合逆で、コマンドの実行ディレクトリがホームディレクトリ、でrsyncで指定するパスは(dryrunは当然知ってる上ですが)絶対間違えたくないからフルパスだったので、「~」の問題の事を知りませんでした。
hiroki88

2021/02/01 06:16

チルダを指定しておいてあれですが普通フルパスで書くのが基本な気がしました。 コマンドを触り始めた時から~/パスという形でコマンドを色々実行していたので それが当たり前になってしまっていました。
68user

2021/02/01 14:30 編集

OpenSSH 7.2/7.2p1 (2016-02-29) からですかね。うーんこれは個人的には大変キモい。 https://www.openssh.com/releasenotes.html ssh(1): expand tilde characters in filenames passed to -i options before checking whether or not the identity file exists. Avoids confusion for cases where shell doesn't expand (e.g. "-i ~/file" vs. "-i~/file"). bz#2481
guest

0

rsync -achnvou --delete -e 秘密鍵 Aサーバユーザ名@Aサーバホスト名:~/sabuntest/ ~/sabuntest

の秘密鍵の前後をシングルクォートかダブルクォートに変えましょう

投稿2021/02/01 03:58

hentaiman

総合スコア6426

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

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

hiroki88

2021/02/01 04:13

rsyncの動作で別の質問をした時にシングルクォートかダブルクォートの箇所をバッククォートにしたらどうですか? となってバッククォートにしたら上記のような結果が表示されました。 シングルクォートかダブルクォートで実行すると下記のエラーがでてしまいます。 てっきりバッククォートにしたらOKなのかとご認識してしまっていました。 ちなみにscpコマンドで同じ秘密鍵を使用して実行した時は上手くいきました。 Warning: Identity file ~/.ssh/rjcs_keys/rjcs_admin.pem not accessible: No such file or directory. Permission denied (publickey,gssapi-keyex,gssapi-with-mic). rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] rsync error: unexplained error (code 255) at io.c(605) [Receiver=3.0.9]
hentaiman

2021/02/01 04:16

バッククォートはシングルクォートやダブルクォートと全く意味が違うのでダメです。 > No such file or directory. は読んで分かる通りファイルがないっていうメッセージなんですが、指定しているパスに本当にファイルありますか?
hiroki88

2021/02/01 05:45

かしこまりました。気を付けます。 そうですね、scpコマンドと同様の秘密鍵を使用しているので。
hiroki88

2021/02/01 05:51

上記の方の回答で無事解決致しました。 hentaimanさんはここまで細かくご指摘頂きましてありがとうございました! 大変助かりました。本当にありがとうございす。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問