사용자의 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
.