特定のユーザーに属するすべてのファイルの所有権を、できればターゲットディレクトリにある別の指定したユーザーに変更できる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を使用しませんしかし、それを処理できるシェルスクリプトで満足します。
何かのようなもの
find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +
Chownコマンドの--fromフラグがおそらく最も簡単な方法だと思います。
chown --from=oldguy newguy * -R
answer by SiteKickr に追加すると、chgrp
には--from
引数ですが、ユーザーを省略することでchown
でも同じことができます。
例:
chown -R --from=:currentgroup :newgroup /some/directory
他の誰かが投稿したように、find
を使用してchown
を実行できます。
ただし、tar
が処理してくれるので、必要はありません。
たとえば、machine A
でtar
を作成する場合、ユーザーtom
はuid 500
であり、次にuntar
machine B
でファイルを作成します。ユーザーtom
はuid 505
であり、tar
は正しいことを行い、uid 505
が所有するファイルを作成します。
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 {} +
知識を追加するだけです。
同じ/etc/passwd
userに解決される古い/新しい所有権IDを再帰的にマッピングする必要がある場合、
(サーバーにLDAPを導入し、/etc/passwd
に各ユーザーとグループのエントリが重複している場合に発生する可能性があります)、
私が書いたこのスクリプトを使用できます: https://Gist.github.com/siers/ded0a4158c900495f04c3ad965f4a544
独自にマッピングを作成します。プログラムのインターフェースは、残念ながらコード内にあります。どのように動作するかを調査する必要がある場合は、いくつかのデバッグステートメントを追加します。しかし、それはほぼ/etc/passwd
の重複から作成されたマッピングを持つ美化された町です。これが誰にとっても有用であるならば、それは本当にクールでしょう。 :)