권한이 수정된 경우에도 현재 사용자에게 읽기 및 실행 권한이 있는 파일을 확인하는 방법

권한이 수정된 경우에도 현재 사용자에게 읽기 및 실행 권한이 있는 파일을 확인하는 방법

명령이 모든 것을 나열하는 쉘 스크립트를 생성하려고 합니다.읽기 및 실행 가능사용자가 누구인지, 사용자가 어디에 있는지에 관계없이 나 또는 현재 사용자가 허용하는 파일입니다. 따라서 나중에 권한을 변경하더라도 변경 사항은 계속 반영됩니다.

이것이 내가 지금까지 가지고 있는 것입니다:

user=`id -un`
group=`id -gn`

IFS='
'
for file in `ls -al /home/cg/root`; do
    perm=$(echo $file | awk '{print $1}')
    fileowner=$(echo $file | awk '{print $3}')
    filegroup=$(echo $file | awk '{print $4}')
    ownerreadbit=${perm:1:2}
    ownerexecbit=${perm:3:4}
    groupreadbit=${perm:4:5}
    groupexecbit=${perm:6:7}
    worldreadbit=${perm:7:8}
    worldexecbit=${perm:9:10}
    if ["$user"=="$fileowner" && "$ownerreadbit"=="r" && "$ownerexecbit"=="x"]; then
        echo $file
    elif ["$group"=="$filegroup" && "$groupreadbit"=="r" &&" $groupexecbit"=="x"]; then
        echo $file
    elif ["$worldreadbit"=="r" && "$worldexecbit"=="x"]; then
        echo $file
    fi
done

답변1

GNU find명령을 사용하지 않는 이유는 무엇입니까?

find /home/cg/root -readable -executable

아니면 파일 목록만 나열하세요.

find /home/cg/root -readable -executable -type f

답변2

사용자 IporSricer의 답변 find /home/cg/root -readable -executable이 올바른 선택입니다. 또한 이 find명령에는 각 파일에 대해 가능한 많은 세부 정보를 포함하는 옵션을 포함하여 출력 형식을 사용자 정의할 수 있다는 추가 이점이 있습니다. 페이지 -printf의 옵션을 참조하세요 man. 이 답변의 주요 목적은 향후 스크립팅 질문에 대한 유용한 피드백을 제공하는 것입니다.

  1. 출력을 사용하여 ls스크립트를 작성하지 마십시오! 초보자들이 흔히 저지르는 실수입니다. 인용하다왜 `ls`를 구문 분석하지 *않나요*?

  2. 를 사용하지 말고 ls그냥 쉘의 네이티브를 사용하세요파일 글로빙,예를 들어. /home/cg/root/*. 이것이 바로 이 기능이 존재하는 이유 중 하나입니다.

  3. 귀하의 스크립트는 하위 디렉토리에 떨어지지 않지만 userIporSricer의 답변은 그렇습니다.

  4. 쉘의 하위 문자열 확장 기능을 잘못 사용하고 있으므로 테스트가 작동하지 않습니다. 두 번째 매개변수는 하위 문자열입니다.길이는 끝 위치가 아니므로 단일 문자 하위 문자열을 ${perm:1:2}원하는 경우 두 문자 하위 문자열이 반환됩니다 ${perm:1:1}.

  5. 더 빠른 테스트는 양식의 별도 변수를 정의한 owner=${perm:1:2}다음 "rx"에 대해 테스트하는 것입니다.

  6. &&test 명령에서만 작동한다고 말하는 것 같아서 놀랐습니다 [. 에서만 작동할 것이라고 생각했습니다 [[.

  7. 세 가지 if, elif, 모두 elif동일한 작업을 수행하므로 논리 OR 연산자(테스트 외부)를 사용하여 echo하나로 결합할 수 있습니다.if||[

이것이 유용하길 바랍니다.

관련 정보