回答:
GNUバージョンのchmodユーティリティは、あるファイル()から別のファイル()にモードをコピーできます。RFile
file
chmod --reference=RFile file
GNU coreutilsは、ほとんどのLinuxディストリビューションとCygwinなどで見られます。 すべてのchmod実装がこのオプションを提供するわけではありません。
--reference
オプションは、GNUバージョンに含まれています。OSXはおそらく、代わりにBSDに由来するchmodを使用します。OSXの男のchmod:developer.apple.com/Mac/library/documentation/Darwin/Reference/...
cp -dpR <source-file> <dest-file>
意志、ファイルをコピーし、file.rなどの権限をコピー
これを試して:
find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;
これは再帰的に上がり、すべてのファイルをchmodします。2つのディレクトリがファイルで一致しない場合、多くの「No such file or directory」エラーが表示されます。
find /home/myubuntuuser/Desktop/test1 -exec chmod --reference /home/myubuntuuser/Desktop/test2/{} {} \;
getfacl
ファイルのアクセス権、所有者、グループ、および追加のACL(アクセス制御リスト)の完全なリストを取得するために使用できます。
$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---
その出力をファイル(例:)に保存するとacl.txt
、を使用してこの形式から復元できますsetfacl --restore acl.txt
。単一のファイルのみを復元し、そのファイルのファイル名が元のファイルと異なるsetfacl --set-file acl.txt filename.txt
場合filename.txt
は、使用します(新しいファイル名はどこですか)。
元の権限を保存acl.txt
:
$ getfacl filename.txt > acl.txt
権限を上書きします(デモ用。これは、次の手順で復元することを確認するためです)
$ chmod 777 filename.txt
$ sudo chown nobody:root filename.txt
$ ls -l filename.txt
-rwxrwxrwx 1 nobody root 0 Jan 8 14:24 filename.txt
setfacl
から正しい権限を復元するために使用しますacl.txt
:
$ sudo setfacl --restore acl.txt
$ ls -l filename.txt
-rw------- 1 score score 0 Jan 8 14:24 filename.txt
ファイル名は# file:
によって生成されたコメントから取得されるgetfacl
ため、コマンドラインで指定する必要はありません。
これらのアクセス許可を別のファイルに復元する場合は、次--set-file
の--restore
ように代わりに使用できます。
$ setfacl --set-file acl.txt second_filename.txt
でいくつかのファイルのアクセス許可を上書きすることになりますが、上書きしたファイル/usr
がわからない場合は、通常、同様の構成の別のシステムから復元することで修正できます。
動作中のシステムからのバックアップ許可(注:getfacl
相対パスを生成するためcd
、両方のマシンの一貫した場所にアクセスするようにしてください)
# cd /
# getfacl -R usr > /root/acls.txt
壊れた権限でACLダンプをシステムにコピーします
$ scp root@working-system:/root/acls.txt .
$ scp acls.txt root@broken-system:/root/
ACLダンプを復元して、破損した権限を既知の正常なマシンの権限で上書きします
# cd /
# setfacl --restore /root/acls.txt