Unix:ファイルまたはディレクトリのアクセス許可を「コピー」する方法はありますか?


14

ディレクトリに2つのファイルがあります。1つは正しい許可を持ち、もう1つは持っていません。あるファイルから別のファイルにアクセス許可のセットを「コピー」できる方法はありますか?

回答:


15

GNUバージョンのchmodユーティリティは、あるファイル()から別のファイル()にモードコピーできますRFilefile

chmod --reference=RFile file

GNU coreutilsは、ほとんどのLinuxディストリビューションとCygwinなどで見られます。 すべてのchmod実装がこのオプションを提供するわけではありません


うーん...これは動作するはずですが、Mac OS Xではサポートされていませんか?私は不正なオプション...そこに着く
Svish

2
chmodbash組み込みコマンドではありません。多くのUNIXで利用可能な個別のユーティリティです。--referenceオプションは、GNUバージョンに含まれています。OSXはおそらく、代わりにBSDに由来するchmodを使用します。OSXの男のchmoddeveloper.apple.com/Mac/library/documentation/Darwin/Reference/...
キホーテいんちき

Svish、GNUバージョンをMacPortsからインストールすることを検討するかもしれません。
ジェレミーL

ただ、いることをここで言及することは有用であろうことを考え出しcp -dpR <source-file> <dest-file>意志、ファイルをコピーし、file.rなどの権限をコピー
LawrenceC

1

私はこれを思いつきました:

find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh

これは完全な防弾ではありませんが、必要なことを行います。


0

これを試して:

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/{} {} \;
リックサンチェス

chmod: '/ home / myubuntuuser / Desktop / test2 // home / myubuntuuser / Desktop / test1'の属性の取得に失敗しました:そのようなファイルまたはディレクトリはありませんchmod: '/ home / myubuntuuser / Desktop / test2 //の属性の取得に失敗しましたhome / myubuntuuser / Desktop / test1 / 111.txt ':そのようなファイルやディレクトリはありませんchmod:' /home/myubuntuuser/Desktop/test2//home/myubuntuuser/Desktop/test1/222.txt 'の属性の取得に失敗しました:いいえそのようなファイルやディレクトリのchmod:「/home/myubuntuuser/Desktop/test2//home/myubuntuuser/Desktop/test1/333.txt」の属性を取得できませんでした:そのようなファイルやディレクトリ
リック・サンチェス

test1とtest2の2つのフォルダーでテストしました。それぞれに、異なる権限を持つ同じファイル111/222 / 333.txtがあります。test1にはデフォルトのものがあります。test2には777の権限があります。これは私が得るエラーです。
リックサンチェス

0

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は、使用します(新しいファイル名はどこですか)。

手順

  1. 元の権限を保存acl.txt

    $ getfacl filename.txt > acl.txt
    
  2. 権限を上書きします(デモ用。これは、次の手順で復元することを確認するためです)

    $ 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
    
  3. 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がわからない場合は、通常、同様の構成の別のシステムから復元することで修正できます。

  1. 動作中のシステムからのバックアップ許可(注:getfacl相対パスを生成するためcd、両方のマシンの一貫した場所にアクセスするようにしてください)

    # cd /
    # getfacl -R usr > /root/acls.txt
    
  2. 壊れた権限でACLダンプをシステムにコピーします

    $ scp root@working-system:/root/acls.txt .
    $ scp acls.txt root@broken-system:/root/
    
  3. ACLダンプを復元して、破損した権限を既知の正常なマシンの権限で上書きします

    # cd /
    # setfacl --restore /root/acls.txt
    
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.