1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[rsync]permission/ユーザ/グループを変更しながら同期する

Last updated at Posted at 2021-03-20

概要

rsyncコマンド(manページへのリンク)の

  • --chmodオプション
    • 同期先のパーミッションを設定する
  • --chownオプション
    • 同期先のユーザ・グループを設定する

の挙動のクセで詰まったので、備忘録として残します。

想定ケース

  • リモートIPアドレス:remote_IP の端末に
  • ユーザ:remote_user でSSH接続して
  • リモート端末のディレクトリ:/remote_dir 配下のファイル・ディレクトリすべてを、
  • ローカル端末のディレクトリ:/local_dir へ同期する

remote_dirの構成

remote_dir 
|-- aaa.file
|-- fuga_dir
|   `-- bbb.file
`-- hoge_dir
    `-- ccc.file

local_dirの構成

  • 配下にディレクトリ・ファイルなし。
  • パーミッション:rwxr-xr-x
  • 所有者:before_user
  • グループ:before_group
local_dir 
0 directories, 0 files

コマンドと実行結果

対象ディレクトリの指定方法によって、3通りの結果がある

  1. 末尾に**「/」なし**
    ⇒対象ディレクトリを丸ごと同期
  2. 末尾に**「/」あり**
    ⇒対象ディレクトリより下の階層を同期、同期先ディレクトリのパーミッション・ユーザ・グループ上書き
  3. 末尾に**「/*」あり**
    ⇒対象ディレクトリより下の階層を同期、同期先ディレクトリのパーミッション・ユーザ・グループ上書き

1.末尾に「/」なし

  • remote_dirがそのままlocal_dir直下に同期される
  • remote_dirも含めて、同期されたファイル・ディレクトリのパーミッション・ユーザ・グループが
    --chmod,--chownで指定したもので設定される
  • local_dirのパーミッション・ユーザ・グループは実行前と変化なし
[実行コマンド]
rsync -pogr \
--chmod=D775,F664 \
--chown=after_user:after_group \
-e "ssh -p 22" remote_user@source_IP:/remote_dir local_dir
[実行結果]
local_dir              //rwxr-xr-x before_user:before_group
`-- remote-dir         //rwxrwxr-x after_user:after_group
    |-- aaa.file       //rwxrwxr-x after_user:after_group
    |-- fuga_dir       //rwxrwxr-x after_user:after_group
    |   `-- bbb.file   //rwxrwxr-x after_user:after_group
    `-- hoge_dir       //rwxrwxr-x after_user:after_group
        `-- ccc.file  //rwxrwxr-x after_user:after_group

2.末尾に「/」あり

  • remote_dir より下にあるファイル・ディレクトリ がlocal_dir直下に同期される
  • 同期されたファイル・ディレクトリと、local_dirのパーミッション・ユーザ・グループが
    --chmod,--chownで指定したもので設定される
[実行コマンド]
rsync -pogr \
--chmod=D775,F664 \
--chown=after_user:after_group \
-e "ssh -p 22" remote_user@source_IP:/remote_dir/ local_dir
[実行結果]
local_dir            //rwxrwxr-x after_user:after_group
  |-- aaa.file       //rwxrwxr-x after_user:after_group
  |-- fuga_dir       //rwxrwxr-x after_user:after_group
  |   `-- bbb.file   //rwxrwxr-x after_user:after_group
  `-- hoge_dir       //rwxrwxr-x after_user:after_group
      `-- ccc.file  //rwxrwxr-x after_user:after_group

3.末尾に「/*」あり

末尾に「/」のみだと、local_dirのパーミッション等が上書きされてしまう。
これを回避するには、「/*」を対象ディレクトリ指定に追加する。

  • remote_dirより下にあるファイル・ディレクトリがlocal_dir直下に同期される
  • 同期されたファイル・ディレクトリのパーミッション・ユーザ・グループが
    --chmod,--chownで指定したもので設定される
  • local_dirのパーミッション・ユーザ・グループは実行前と変化なし
[実行コマンド]
rsync -pogr \
--chmod=D775,F664 \
--chown=after_user:after_group \
-e "ssh -p 22" remote_user@source_IP:/remote_dir/* local_dir
[実行結果]
local_dir            //rwxr-xr-x before_user:before_group
  |-- aaa.file       //rwxrwxr-x after_user:after_group
  |-- fuga_dir       //rwxrwxr-x after_user:after_group
  |   `-- bbb.file   //rwxrwxr-x after_user:after_group
  `-- hoge_dir       //rwxrwxr-x after_user:after_group
      `-- ccc.file  //rwxrwxr-x after_user:after_group

まとめ

rsyncコマンドは対象ディレクトリ指定で大きく挙動が変わるので、
気を付けましょう……

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?