Bash 스크립트에서 파일 권한 설정

Bash 스크립트에서 파일 권한 설정

스크립트가 생각한 대로 작동하지 않습니다.
모든 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 {} +

( 자세한 내용을 보려면 -vvGNU 또는 FreeBSD를 추가하세요 ). chmod그러나 (특히 세계에서 쓰기 가능한 파일을 다루고 있으므로) 나쁜 의도를 가진 누군가가 거기에 있는 모든 디렉토리에 대한 쓰기 액세스 권한을 가질 수 있고 그 사이에 다른 파일을 가리키는 파일을 사용할 수 있는 경쟁 조건이 있다는 점에 유의하십시오. 대체 파일을 사용 find하여 이를 확인하고 수행하면 파일에 대한 쓰기 권한을 제거하여 혼란을 초래할 수 있습니다( chmod예를 들어 심볼릭 링크를 생각해 보세요)./tmp

GNU 구문을 사용하고 있으므로 GNU stat일 가능성이 높습니다 . GNU 는 GNU가 나오기 오래 전부터 파일 속성을 표시할 수 있었으므로 둘 다 필요하지 않습니다.findfindfindstat

find . ! -type l -perm -7 -printf '%m %p\n' -exec chmod o-w {} +

답변2

/007에는 owner귀하가 가지고 있지 않은 유일한 파일과 에 대한 권한이 표시됩니다 .groupother

당신은 더 많은 행운을 누릴 수 있습니다 /o=rwx. 이는 other파일의 권한 과만 일치합니다 .

정확성을 위해 편집하십시오.

-perm -o=rwx이는 /o포괄적인 필터이고 , , , , 또는 권한 other이 있는 파일과 일치 하므로 반드시 사용해야 합니다 . 필터를 배타적으로 만들고 필드 의 파일만 일치시키 려면 필터의 선행 문자를 에서 로 변경하세요 .xwxwrrxrwrwx/-rwxother

답변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

관련 정보