sudo find /usr -perm /a=x와 sudo find /usr -executable의 차이점은 무엇입니까?

sudo find /usr -perm /a=x와 sudo find /usr -executable의 차이점은 무엇입니까?

둘 다 실행 파일을 받아야 하는데 숫자가 다릅니다.

[user@j6727961 ~]$ sudo find /usr -perm /a=x | nl
    1   /usr
     2  /usr/bin
     3  /usr/bin/nroff
     4  /usr/bin/gzexe
     5  /usr/bin/catchsegv
     6  /usr/bin/diff
     7  /usr/bin/gzip
     8  /usr/bin/gencat
     9  /usr/bin/diff3
    10  /usr/bin/zcat
    11  /usr/bin/getent
    12  /usr/bin/sdiff
    13  /usr/bin/zcmp
    14  /usr/bin/iconv
    15  /usr/bin/db_recover
    16  /usr/bin/ldd
    17  /usr/bin/unxz
    18  /usr/bin/zdiff
    19  /usr/bin/locale
    20  /usr/bin/xz
    21  /usr/bin/zgrep
    22  /usr/bin/localedef
    23  /usr/bin/xzcat
-
-
-
-
 17112  /usr/local/share/man/man8x
 17113  /usr/local/share/man/man9
 17114  /usr/local/share/man/man9x
 17115  /usr/local/share/man/mann
 17116  /usr/local/src
 17117  /usr/src
 17118  /usr/src/debug
 17119  /usr/src/kernels
 17120  /usr/tmp

-executable 플래그를 사용하면 다음과 같습니다.

[user@j6727961 ~]$ sudo find /usr -executable | nl
[sudo] password for user: 
     1  /usr
     2  /usr/bin
     3  /usr/bin/nroff
     4  /usr/bin/gzexe
     5  /usr/bin/catchsegv
     6  /usr/bin/diff
     7  /usr/bin/gzip
     8  /usr/bin/gencat
     9  /usr/bin/diff3
    10  /usr/bin/zcat
    11  /usr/bin/getent
    12  /usr/bin/sdiff
    13  /usr/bin/zcmp
    14  /usr/bin/iconv
    15  /usr/bin/db_recover
    16  /usr/bin/ldd
    17  /usr/bin/unxz
    18  /usr/bin/zdiff
-
-
-
-
 12218  /usr/local/share/man/man4x
 12219  /usr/local/share/man/man5
 12220  /usr/local/share/man/man5x
 12221  /usr/local/share/man/man6
 12222  /usr/local/share/man/man6x
 12223  /usr/local/share/man/man7
 12224  /usr/local/share/man/man7x
 12225  /usr/local/share/man/man8
 12226  /usr/local/share/man/man8x
 12227  /usr/local/share/man/man9
 12228  /usr/local/share/man/man9x
 12229  /usr/local/share/man/mann
 12230  /usr/local/src
 12231  /usr/src
 12232  /usr/src/debug
 12233  /usr/src/kernels
 12234  /usr/tmp

답변1

에 따르면 man find:

   -perm /mode
          Any  of the permission bits mode are set for the file.

그래서 -perm /a+x파일과 일치합니다어느실행 가능한 비트가 설정되었습니다.

   -executable
          Matches  files  which  are  executable and directories which are
          searchable (in a file name resolution sense).  This  takes  into
          account  access  control  lists  and other permissions artefacts
          which the -perm test  ignores.   This  test  makes  use  of  the
          access(2) system call, and so can be fooled by NFS servers which
          do UID mapping (or root-squashing), since many systems implement
          access(2)  in  the client's kernel and so cannot make use of the
          UID mapping information held on the server.  Because  this  test
          is  based only on the result of the access(2) system call, there
          is no guarantee that a file for which  this  test  succeeds  can
          actually be executed.

그러면 -executable파일과 일치합니다.현재 사용자는 access()시스템 호출에 따라 접근 할 수 있습니다..

답변2

-executable실행 가능하거나 탐색 가능한 파일이나 디렉터리를 찾고, 시스템 호출은 access실행 중인 사용자 find(귀하의 경우 루트)가 실행 가능하거나 탐색할 수 있음을 나타냅니다. -perm파일 모드 비트를 확인하십시오. 대부분의 경우 이들 사이의 가장 중요한 차이점은 기본적으로 기호 링크가 역참조되지 않는다는 사실에서 비롯됩니다 find. 즉, -perm기본적으로 링크의 파일 모드 비트(보통 0777)를 확인하고 -exec참조 파일의 비트를 확인합니다. . 파일 모드 비트는 access심볼릭 링크가 항상 역참조되기 때문입니다.

요약: 일반적인 차이점은 find -perm /a=x모든 심볼릭 링크가 포함되는 반면 find -executable실행 파일이나 탐색 가능한 디렉터리에 대한 심볼릭 링크만 포함된다는 것입니다.

관련 정보