先日、Ubuntuデスクトップシステムから外付けUSBドライブにデータをバックアップする予定でした。すべてのデータを外部ドライブに転送した後、ソースと宛先のファイルとディレクトリの所有者とアクセス許可が異なることに気付きました。ただし、既存のファイル属性(所有者、グループ、タイムスタンプなど)を両方の場所でそのまま保持したかったのです。 Googleですばやく検索し、「cp」コマンドのマニュアルページを調べたところ、Linuxでファイルとディレクトリをコピーするときに、所有権とファイルのアクセス許可をそのまま維持できることがわかりました。このような状況に陥ったことがある場合は、これを行うための簡単な回避策を次に示します。
Linuxでファイルまたはディレクトリをコピーするときに所有権とファイル権限をそのまま維持する
cp コマンドにはファイルとディレクトリをコピーするオプションがありますが、変更時間、アクセス時間、およびモードを元のファイルから保持します。
$ cp -rp ~/data /media/sk/sk_seagate/data/
ここでは、「data」という名前のフォルダの内容を外部ドライブにコピーしています。
cpから コマンドのマニュアルページ:
-p same as --preserve=mode,ownership,timestamps --preserve[=ATTR_LIST] preserve the specified attributes (default: mode,ownership,timestamps), if possible additional attributes: context, links, xattr, all
したがって、 -pを使用する場合 フラグを立てると、元のファイルのモード、所有権、タイムスタンプなど、既存のすべてのファイル属性が保持されます。
そして"-r" ここでは、フラグを使用してディレクトリを再帰的にコピーします。意味-ディレクトリとそのサブディレクトリおよびファイルをコピーします。
または、 -aを使用することもできます 国旗。 -rフラグが含まれ、リンク、xattr、SELinux属性などのすべてを保持します。
$ cp -a ~/data /media/sk/sk_seagate/data/
cpコマンドのマニュアルページから:
-a, --archive same as -dR --preserve=allと同じです
ファイルの権限と所有権が損なわれていないかどうかを確認するには、 getfaclを使用します ソースと宛先の両方の場所でコマンドを実行します。
$ getfacl ~/data
$ getfacl /media/sk/sk_seagate/data/
ローカルシステムから同じネットワーク内のリモートシステム間でファイルをコピーする場合は、 "scp"を使用できます。 以下のように、あるシステムから別のシステムにファイルを転送するコマンド。
$ scp -rp ~/data [email protected]:/home/senthil/
上記のコマンドは、「data」という名前のコンテンツフォルダをローカルシステムからリモートシステムにコピーします。ここで、192168.225.22は私のリモートシステムのIPアドレスであり、「senthil」はリモートシステムのユーザー名です。
「getfacl」コマンドを使用して、両方のシステムの「data」ディレクトリのファイル権限と所有権を確認してください。
まず、ローカルシステムの「data」ディレクトリのファイル属性を確認します。
$ getfacl data/
出力例:
# file: data/ # owner: sk # group: sk user::rwx group::rwx other::r-x
次に、リモートシステムの「data」ディレクトリのファイル属性を確認します。リモートシステムに直接ログインし、以下のようなsshコマンドを使用してリモートディレクトリのfie属性を確認できます。
$ ssh [email protected] getfacl data
サンプル出力:
[email protected]'s password: # file: data # owner: senthil # group: senthil user::rwx group::rwx other::r-x
上記の出力でお気づきかもしれませんが、所有者とグループの情報(つまり、senthil)は私のリモートシステムでは異なります。なぜなら、 -p scpコマンドのフラグはすべての権限を保持するわけではありません。
scpコマンドのマニュアルページから:
-p Preserves modification times, access times, and modes from the original file.
-pであることは明らかです フラグは、元のファイルの変更時間、アクセス時間、モードのみを保持し、所有権は保持しません 。このような場合、両方のシステムで共通のユーザー名を作成し、上記のコマンドを試して、異なるシステムで同じ所有権とファイル権限を付与することができます。または、宛先システムで「chown」コマンドを使用して所有権を変更します。
詳細については、cpおよびscpコマンドのマニュアルページを参照してください。
$ man cp
$ man scp
推奨される読み物:
- ファイルをコピーし、所有権と権限を同時に変更する方法
これがお役に立てば幸いです。