여러 하위 디렉터리가 있는 큰 디렉터리의 모든 권한/그룹이 변경되거나 올바르게 생성되지 않은 경우 이를 보존하고 다시 쓰거나 이 디렉터리에 대한 사용자/권한을 다른 컴퓨터에 미러링하기 위한 쉘 스크립트를 작성하려고 합니다.
그것은 다음과 같습니다:
chown adam:brown /var/blarg
chmod 770 /var/blarg
chown adam:brown /var/blarg/toast.file
chmod 777 /var/blarg/toast.file
...etc
이 작업을 수동으로 수행하면 시간이 오래 걸립니다. 이 작업을 수행하기 위한 기존 명령/스크립트가 있는지 궁금합니다.
답변1
@yeti 님의 댓글에 이어 얼마 전에 이에 대해 생각해 본 결과 다음과 같은 결론에 도달했던 것으로 기억됩니다.
find /path/to/dir -printf '%m\t%u\t%g\t%p\0' > filelist
그런 다음
while read -rd $'\0' perms user group file; do
if [ -e "$file" ]; then
chown "$user:$group" "$file"
chmod "$perms" "$file"
else
echo "warning: $file not found"
fi
done < filelist
작동합니다. 출력 끝에 파일 이름을 넣고 read
개행 대신 널 종결자를 사용하십시오.~해야 한다이렇게 하면 파일 이름에 공백이나 기타 특수 문자가 포함되어 있어도 보안이 보장됩니다. 두 번째 명령을 실행하려는 위치에 따라 /path/to/dir
명령의 선행 구성 요소가 제거된 파일 이름을 사용합니다(예: .find
%P
%p
답변2
Yeti가 의견에서 제안했듯이 find 명령을 사용하여 디렉터리의 모든 파일과 디렉터리를 찾고 해당 권한/소유자를 chown 또는 chmod 명령으로 출력합니다. -v
생성된 쉘 스크립트를 실행할 때 명령의 성공/오류를 볼 수 있도록 자세한 정보 표시 옵션을 추가했습니다 .
find /var/blarg -printf 'chown -v %u:%g %p\n' > chowns.sh
find /var/blarg -printf 'chmod -v %m %p\n' > chmods.sh
이제 생성된 .sh 파일을 실행 가능하게 만드세요.
chmod +x chowns.sh; chmod +x chmods.sh
그런 다음 실행하고 자세한 피드백을 txt 파일로 출력합니다.
./chmods > chmods_results.txt
번영.
답변3
events
당신이 있었다면 그렇게 언급했잖아요진짜파일이 많으면 이러한 파일을 모니터링하는 것이 좋습니다. inotifywatch
파일 권한 변경과 같은 "파일 시스템 이벤트를 수신하는" 방법을 살펴보는 것이 좋습니다 . Debian 기반 운영 체제에서는 패키지에 있습니다 inotify-tools
.