스크립트가 생각한 대로 작동하지 않습니다.
모든 rwx 권한을 xx5 권한으로 변경하는 모든 스크립트를 찾을 수 있지만
#!/bin/bash
# the / makes find inclusive
for file in `find . -perm /007 `
do
permissions=`stat -c %a $file`
permissions=${permissions:0:2}5
echo $permissions $file
chmod $permissions $file
done
#find . -perm /007
내 의도는 최소한 일부 파일을 보호하는 것입니다.
답변1
chmod -R o-w .
쓰기 권한이 삭제됩니다.다른 사람모든 파일을 안전하게 처리하세요. 그러나 다음을 포함하여 모든 파일의 ctime을 업데이트합니다.다른 사람더 이상 쓰기 권한이 없습니다.
GNU에서는 chmod
-c 옵션을 사용하여 업데이트가 필요한 파일을 표시할 수 있습니다.
$ chmod -cR o-w .
mode of `./a' changed from 0777 (rwxrwxrwx) to 0775 (rwxrwxr-x)
그냥 w
제거하고 싶다면다른 사람그들이 있는 곳에서는 rwx
다음과 같이 할 수 있습니다:
find . ! -type l -perm -7 -exec chmod o-w {} +
( 자세한 내용을 보려면 -vv
GNU 또는 FreeBSD를 추가하세요 ). chmod
그러나 (특히 세계에서 쓰기 가능한 파일을 다루고 있으므로) 나쁜 의도를 가진 누군가가 거기에 있는 모든 디렉토리에 대한 쓰기 액세스 권한을 가질 수 있고 그 사이에 다른 파일을 가리키는 파일을 사용할 수 있는 경쟁 조건이 있다는 점에 유의하십시오. 대체 파일을 사용 find
하여 이를 확인하고 수행하면 파일에 대한 쓰기 권한을 제거하여 혼란을 초래할 수 있습니다( chmod
예를 들어 심볼릭 링크를 생각해 보세요)./tmp
GNU 구문을 사용하고 있으므로 GNU stat
일 가능성이 높습니다 . GNU 는 GNU가 나오기 오래 전부터 파일 속성을 표시할 수 있었으므로 둘 다 필요하지 않습니다.find
find
find
stat
find . ! -type l -perm -7 -printf '%m %p\n' -exec chmod o-w {} +
답변2
/007
에는 owner
귀하가 가지고 있지 않은 유일한 파일과 에 대한 권한이 표시됩니다 .group
other
당신은 더 많은 행운을 누릴 수 있습니다 /o=rwx
. 이는 other
파일의 권한 과만 일치합니다 .
정확성을 위해 편집하십시오.
-perm -o=rwx
이는 /o
포괄적인 필터이고 , , , , 또는 권한 other
이 있는 파일과 일치 하므로 반드시 사용해야 합니다 . 필터를 배타적으로 만들고 필드 의 파일만 일치시키 려면 필터의 선행 문자를 에서 로 변경하세요 .x
w
xw
r
rx
rw
rwx
/
-
rwx
other
답변3
귀하의 접근 방식은 성능상 악몽입니다. 각 파일에 대해 두 개의 프로세스를 생성합니다! find
정보가 이미 거기에 있고 쉽게 인쇄할 수 있기 때문에 하나는 전혀 쓸모가 없습니다 . 더 나은 해결책은 다음과 같습니다.
find . -perm -o=rwx -printf "%m %p_\0" 2>/dev/null |
while read -r -d '' perms path; do
path="${path%_}"
echo "${perms} '${path}'" >&2
printf "%s\0" "$path"
done | xargs -0 chmod o=rx