次のシナリオを考えてみましょう。
rwx
ディレクトリグループIDのメンバーとしてディレクトリにアクセスできます。- システム管理者はユーザーの実行を許可しません
chown
(参照:このスレッド詳細)
ディレクトリの再帰所有権を取得するには?
私が欲しいと仮定すると、次のことができると思います。A
cp -R A B
rm -R A
mv B A
A
しかし、これは面倒な作業であり、サイズが大きい場合は多くのスペースが必要になることがあります。
答え1
次のように所有権を取得できます。
$ mv A A.old
$ mkdir A
$ mv A.old/* A.old/.[!.]* A.old/..?* A/
$ rmdir A.old
答え2
実際には、ディレクトリの所有権だけをインポートするだけです。通常のファイルは次回の変更時に自動的に処理され、シンボリックリンクとパイプは重要ではなく、デバイスや他のエキゾチックな種類がないとします。
ディレクトリの再帰的なコピーを作成できますが、通常のファイルをコピーする代わりにハードリンクを作成します。 GNU coreutilsを使用する(Linux、Cygwin):
cp -al A B
すべての一般ファイルA/dir/file
はにハードリンクされていますB/dir/file
。その後、ソースツリーを削除できます。
GNU coreutilsがない場合は、代わりにrsyncを使用できます。
cd A
rsync -a --link-dest=$PWD . ../B
Aを削除しても実際にファイルが削除されないようにするには、すべての一般ファイルのハードリンク数が2以上であることを確認してください。次のコマンドは何も出力しないでください。
find A -type f -links 1
答え3
コピーを含まないすべての方法では、no-chown ルールが発生します。ルートにこれを依頼してください。
野心的な場合は、独自のセキュリティチェックを実行し、より緩和されたルールに従ってchownを許可するかどうかを決定するsetuid-rootインストール用に設計された新しいchown-likeユーティリティを作成できます。
主にディスク容量に関するものであれば、cpをrmとインタリーブするツールだけが必要です。