디렉토리의 권한과 소유자를 반복적으로 확인하고 이를 다시 생성하는 쉘 스크립트를 작성하는 스크립트

디렉토리의 권한과 소유자를 반복적으로 확인하고 이를 다시 생성하는 쉘 스크립트를 작성하는 스크립트

여러 하위 디렉터리가 있는 큰 디렉터리의 모든 권한/그룹이 변경되거나 올바르게 생성되지 않은 경우 이를 보존하고 다시 쓰거나 이 디렉터리에 대한 사용자/권한을 다른 컴퓨터에 미러링하기 위한 쉘 스크립트를 작성하려고 합니다.

그것은 다음과 같습니다:

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.

관련 정보