ユーザーのUIDを変更した後、特定のユーザーが所有するすべてのファイルの所有権を変更するスクリプトを作成しようとしています。
現在、以下を実行します。
chown -Rhc --from=${OLD_UID} ${NEW_UID} /
chown -Rhc --from=:${OLD_UID} :${NEW_UID} /
変更したばかりのユーザーの古いUIDと新しいUIDはどこにありますOLD_UID
か?NEW_UID
目的の効果がありますが、次のエラーのため、常に戻りコード1で終了します。
chown: cannot access ‘/proc/1103/task/1103/fd/4’: No such file or directory
chown: cannot access ‘/proc/1103/task/1103/fdinfo/4’: No such file or directory
chown: cannot access ‘/proc/1103/fd/4’: No such file or directory
chown: cannot access ‘/proc/1103/fdinfo/4’: No such file or directory
私の理論は、すべてのファイルを検索するプロセスが独自のプロセスを選択してアクセスしよchown
うとすると、そのプロセスが存在しないことです。
コマンドの戻りコードを削除することができますが、実際のエラーを無視する場合はそうしたくありません。
偽のエラーを報告しない代替案を提案できる人はいますか?
答え1
を使用して他のファイルシステムに入らないように指示できます(これにより、仮想find
ファイルシステムにアクセスできなくなります)。proc
sys
find / -xdev -uid ${OLD_UID} -execdir chown ${NEW_UID} {} +
これは効率的ではないかもしれません。
仮想ファイルをフィルタリングする別の方法は、ルートファイルシステムを別の場所に再マウントすることです。
mkdir /tmp/chroot
mount -o .. -t .. /dev/... /tmp/chroot
そしてchown
走り続ける/tmp/chroot
。