web-dev-qa-db-ja.com

あるユーザーに属するすべてのファイルを別のユーザーに変更するにはどうすればよいですか?

特定のユーザーに属するすべてのファイルの所有権を、できればターゲットディレクトリにある別の指定したユーザーに変更できるLinuxコマンドを探しています。

私の夢のコマンドは次のようになります...

chuser -R --olduser tom --newuser jerry

または

chuser -R --olduser 1066 --newuser 1492

これは私のシナリオです...ユーザーとグループの情報が保存されたバックアップファイル(.tgz)があります。これは、ApacheとMySQLを実行しているWebサーバーから取得されました。バックアップ内のファイルはシステム全体からのものであり、複数の異なるユーザーと複数のシステムタイプアカウントからのファイルが含まれています。新しいサーバーに復元したときに設定が失われないことが重要です。問題は、ファイルが復元されているマシンのユーザーが、バックアップファイルのユーザーと一致しないことです。たとえば、両方のマシンにMySQLユーザーがいましたが、それらには異なるユーザーIDがあり、異なるユーザーに属する両方のマシンに存在していたユーザーIDがいくつかあります。つまり、新しいマシンのユーザーを古いマシンのユーザーと同期する方法はありません。

私はこのようなfindコマンドですべてのユーザーファイルを見つけることができます...

find /decompressed-backup-dir -uid 1050

または

find /decompressed-backup-dir -user tom

私が疑っているように、単一のコマンドで私が望むことを行う方法がない場合、おそらく所有権の変更を処理するために、findコマンドの結果を別のコマンドにパイプする方法がありますか?

PHPスクリプトを使用してこれを行うことができますが、バックアップに4GBと数万のファイルがあるため、PHPまたはPerlを使用しませんしかし、それを処理できるシェルスクリプトで満足します。

46
Night Owl

何かのようなもの

find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +
34
Ben Voigt

Chownコマンドの--fromフラグがおそらく最も簡単な方法だと思います。

chown --from=oldguy newguy * -R
72
SiteKickr

answer by SiteKickr に追加すると、chgrpには--from引数ですが、ユーザーを省略することでchownでも同じことができます。

例:

chown -R --from=:currentgroup :newgroup /some/directory
9
TheBigB

他の誰かが投稿したように、findを使用してchownを実行できます。

ただし、tarが処理してくれるので、必要はありません。

たとえば、machine Atarを作成する場合、ユーザーtomuid 500であり、次にuntarmachine Bでファイルを作成します。ユーザーtomuid 505であり、tarは正しいことを行い、uid 505が所有するファイルを作成します。

6
Ciclamino

answer は、ユーザーとグループの両方を設定します。

find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +

ただし、一部のユーザーに属するファイルのグループのみを変更する場合は、chownを使用できません(私の知る限り)。代わりにchgrpを使用します。

find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +

そして、あなたが使用しなければならないいくつかのグループに属しているファイルのグループのみを変更するには、例えば:

find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +

知識を追加するだけです。

1
Timo Kähkönen

同じ/etc/passwd userに解決される古い/新しい所有権IDを再帰的にマッピングする必要がある場合、

(サーバーにLDAPを導入し、/etc/passwdに各ユーザーとグループのエントリが重複している場合に発生する可能性があります)、

私が書いたこのスクリプトを使用できます: https://Gist.github.com/siers/ded0a4158c900495f04c3ad965f4a544

独自にマッピングを作成します。プログラムのインターフェースは、残念ながらコード内にあります。どのように動作するかを調査する必要がある場合は、いくつかのデバッグステートメントを追加します。しかし、それはほぼ/etc/passwdの重複から作成されたマッピングを持つ美化された町です。これが誰にとっても有用であるならば、それは本当にクールでしょう。 :)

0
galva