지금은 매일 실행되는 스크립트가 있는데, 홈 디렉터리를 chmods하고 디렉터리에서 모든 "기타" 권한과 "그룹" 쓰기 권한을 제거합니다. 아래를 참조하세요.
#Removing all other permissions on all home directories and write from group
ls /home | sed 's/ //g' |
while read i; do
chmod -R o-rwx /home/$i
chmod -R g-w /home/$i
done
이것은 잘 작동합니다. 그러나 필요 여부에 관계없이 매번 이 작업을 수행하는 것보다 변경해야 할 파일이 있는지 확인한 다음 해당 파일에 대해 조치를 취하는 스크립트를 선호합니다.
나는 모든 것을 명령문 내의 하위 함수에 넣을 수 있다고 가정하고 있지만 , 그 명령문 내에서 어떤 테스트를 실행할지는 if
모르겠습니다 .if
디렉토리를 변경해야 하는지 테스트하는 방법은 무엇입니까?
답변1
찾기 사용:
find /home/* -type d -maxdepth 0 -perm /g+w,o+rwx -exec chmod g-w,o-rwx '{}' +
이 작업을 재귀적으로 수행하려면( -R
예제에서 사용된 대로) 다음을 사용하십시오.
find /home/* -perm /g+w,o+rwx -exec chmod g-w,o-rwx '{}' +
편집하다:
찾기 옵션에 대한 간략한 설명입니다 man find
. 자세한 내용은 다음을 참조하세요.
-perm
with 는 /mode
임의의 비트를 설정하는 것을 의미합니다.
고전적인 -exec
구문은 입니다 -exec command '{}' ';'
. 이러한 문자는 {}
파일 이름으로 대체되며 따옴표는 셸에서 이를 보호하기 위한 것입니다. 대부분의 셸에서는 이것이 필요하지 않지만 문제가 되지는 않습니다. ';'
는 명령의 끝 입니다 . 대부분의 쉘에서는 이 인용문이 필요하지만 대체 형식은 입니다 \;
. 단점은 chmod가 변경된 각 파일에 대해 한 번 호출된다는 것입니다. 이는 종료 명령의 대체 형식을 사용하여 방지할 수 있습니다 +
. 이 양식은 여러 이름으로 exec를 호출하는데, 이는 비슷한 효과를 가지며 xargs
호출 비용도 절약해 줍니다 xargs
.