chmod가 파일 권한도 재귀적으로 변경하는 이유는 무엇입니까?

chmod가 파일 권한도 재귀적으로 변경하는 이유는 무엇입니까?

chmod _+x -R /dir"_"가 (u,g,o,a)의 조합인 경우 실행하면 파일 chmod g+X -R /dir에 실행 권한도 부여됩니다.

왜 이런 일이 발생합니까? 이 동작은 낮은 "x"를 먼저 사용한 다음 높은 "X"를 사용한 경우에만 발생합니다.

첫 번째 예:

[root@jesc5161 home]# chmod a-rwx -R finance/

[root@jesc5161 home]# ll
total 4
drwxr-xr-x. 3 root root      17 May  2  2015 ec2-user
d---------. 3 root finance   65 Apr 22 22:12 finance
drwx------. 9 user user    4096 Apr 22 21:28 user

[root@jesc5161 home]# ll finance/
total 0
d---------. 2 root root    6 Apr 22 21:41 accounting
----------. 1 user user    0 Apr 22 22:06 myfile1
----------. 1 user finance 0 Apr 22 22:12 myfile2
----------. 1 user user    0 Apr 22 22:12 myfile3

[root@jesc5161 home]# chmod u+x -R finance/

[root@jesc5161 home]# ll
total 4
drwxr-xr-x. 3 root root      17 May  2  2015 ec2-user
d--x------. 3 root finance   65 Apr 22 22:12 finance
drwx------. 9 user user    4096 Apr 22 21:28 user

[root@jesc5161 home]# ll finance/
total 0
d--x------. 2 root root    6 Apr 22 21:41 accounting
---x------. 1 user user    0 Apr 22 22:06 myfile1
---x------. 1 user finance 0 Apr 22 22:12 myfile2
---x------. 1 user user    0 Apr 22 22:12 myfile3

여기서는 그룹에 실행 권한을 부여하고 싶지만 파일에도 실행 권한이 부여됩니다.

[root@jesc5161 home]# chmod g+X -R finance/

[root@jesc5161 home]# ll
total 4
drwxr-xr-x. 3 root root      17 May  2  2015 ec2-user
d--x--x---. 3 root finance   65 Apr 22 22:12 finance
drwx------. 9 user user    4096 Apr 22 21:28 user

[root@jesc5161 home]# ll finance/
total 0
d--x--x---. 2 root root    6 Apr 22 21:41 accounting
---x--x---. 1 user user    0 Apr 22 22:06 myfile1
---x--x---. 1 user finance 0 Apr 22 22:12 myfile2
---x--x---. 1 user user    0 Apr 22 22:12 myfile3

다른 예시:

[root@jesc5161 home]# chmod a-rwx -R finance/

[root@jesc5161 home]# ll
total 4
drwxr-xr-x. 3 root root      17 May  2  2015 ec2-user
d---------. 3 root finance   65 Apr 22 22:12 finance
drwx------. 9 user user    4096 Apr 22 21:28 user

[root@jesc5161 home]# ll finance/
total 0
d---------. 2 root root    6 Apr 22 21:41 accounting
----------. 1 user user    0 Apr 22 22:06 myfile1
----------. 1 user finance 0 Apr 22 22:12 myfile2
----------. 1 user user    0 Apr 22 22:12 myfile3

[root@jesc5161 home]# chmod u+rwx -R finance/

[root@jesc5161 home]# ll
total 4
drwxr-xr-x. 3 root root      17 May  2  2015 ec2-user
drwx------. 3 root finance   65 Apr 22 22:12 finance
drwx------. 9 user user    4096 Apr 22 21:28 user

[root@jesc5161 home]# ll finance/
total 0
drwx------. 2 root root    6 Apr 22 21:41 accounting
-rwx------. 1 user user    0 Apr 22 22:06 myfile1
-rwx------. 1 user finance 0 Apr 22 22:12 myfile2
-rwx------. 1 user user    0 Apr 22 22:12 myfile3

이번에도 그룹에 실행 권한만 부여하고 싶지만 파일에도 실행 권한이 부여됩니다.

[root@jesc5161 home]# chmod g+X -R finance/

[root@jesc5161 home]# ll
total 4
drwxr-xr-x. 3 root root      17 May  2  2015 ec2-user
drwx--x---. 3 root finance   65 Apr 22 22:12 finance
drwx------. 9 user user    4096 Apr 22 21:28 user

[root@jesc5161 home]# ll finance/
total 0
drwx--x---. 2 root root    6 Apr 22 21:41 accounting
-rwx--x---. 1 user user    0 Apr 22 22:06 myfile1
-rwx--x---. 1 user finance 0 Apr 22 22:12 myfile2
-rwx--x---. 1 user user    0 Apr 22 22:12 myfile3

다음은 "작동합니다"의 예입니다. 하지만 보시다시피 위쪽 "X"를 사용하기 전에 아래쪽 "x"를 사용하지 않습니다.

[root@jesc5161 home]# chmod a-rwx -R finance/

[root@jesc5161 home]# ll
total 4
drwxr-xr-x. 3 root root      17 May  2  2015 ec2-user
d---------. 3 root finance   65 Apr 22 22:12 finance
drwx------. 9 user user    4096 Apr 22 21:28 user

[root@jesc5161 home]# ll finance/
total 0
d---------. 2 root root    6 Apr 22 21:41 accounting
----------. 1 user user    0 Apr 22 22:06 myfile1
----------. 1 user finance 0 Apr 22 22:12 myfile2
----------. 1 user user    0 Apr 22 22:12 myfile3

[root@jesc5161 home]# chmod a+rw -R finance/

[root@jesc5161 home]# ll
total 4
drwxr-xr-x. 3 root root      17 May  2  2015 ec2-user
drw-rw-rw-. 3 root finance   65 Apr 22 22:12 finance
drwx------. 9 user user    4096 Apr 22 21:28 user

[root@jesc5161 home]# ll finance/
total 0
drw-rw-rw-. 2 root root    6 Apr 22 21:41 accounting
-rw-rw-rw-. 1 user user    0 Apr 22 22:06 myfile1
-rw-rw-rw-. 1 user finance 0 Apr 22 22:12 myfile2
-rw-rw-rw-. 1 user user    0 Apr 22 22:12 myfile3

[root@jesc5161 home]# chmod g+X -R finance/

[root@jesc5161 home]# ll
total 4
drwxr-xr-x. 3 root root      17 May  2  2015 ec2-user
drw-rwxrw-. 3 root finance   65 Apr 22 22:12 finance
drwx------. 9 user user    4096 Apr 22 21:28 user

[root@jesc5161 home]# ll finance/
total 0
drw-rwxrw-. 2 root root    6 Apr 22 21:41 accounting
-rw-rw-rw-. 1 user user    0 Apr 22 22:06 myfile1
-rw-rw-rw-. 1 user finance 0 Apr 22 22:12 myfile2
-rw-rw-rw-. 1 user user    0 Apr 22 22:12 myfile3

[root@jesc5161 home]# chmod o+X -R finance/

[root@jesc5161 home]# ll
total 4
drwxr-xr-x. 3 root root      17 May  2  2015 ec2-user
drw-rwxrwx. 3 root finance   65 Apr 22 22:12 finance
drwx------. 9 user user    4096 Apr 22 21:28 user

[root@jesc5161 home]# ll finance/
total 0
drw-rwxrwx. 2 root root    6 Apr 22 21:41 accounting
-rw-rw-rw-. 1 user user    0 Apr 22 22:06 myfile1
-rw-rw-rw-. 1 user finance 0 Apr 22 22:12 myfile2
-rw-rw-rw-. 1 user user    0 Apr 22 22:12 myfile3

[root@jesc5161 home]# chmod u+X -R finance/

[root@jesc5161 home]# ll
total 4
drwxr-xr-x. 3 root root      17 May  2  2015 ec2-user
drwxrwxrwx. 3 root finance   65 Apr 22 22:12 finance
drwx------. 9 user user    4096 Apr 22 21:28 user

[root@jesc5161 home]# ll finance/
total 0
drwxrwxrwx. 2 root root    6 Apr 22 21:41 accounting
-rw-rw-rw-. 1 user user    0 Apr 22 22:06 myfile1
-rw-rw-rw-. 1 user finance 0 Apr 22 22:12 myfile2
-rw-rw-rw-. 1 user user    0 Apr 22 22:12 myfile3

답변1

+X방법실행 비트를 설정합니다.

파일이 디렉터리이거나 현재(수정되지 않은) 파일 모드 비트에 실행 비트 중 하나 이상이 설정되어 있는 경우(S_IXUSR, S_IXGRP 또는 S_IXOTH) 파일이 디렉터리가 아니고 현재 파일 모드 비트에 실행 비트가 설정되어 있지 않으면 무시해야 합니다.

일단 실행되면 chmod -R _+x dir각 파일의 적어도 일부 사용자/그룹/기타(수정 권한이 있는)에 대해 실행 비트가 설정됩니다. 이는 -X이 모든 파일에서도 작동한다는 것을 의미합니다.

디렉터리에만 영향을 미치고 트리에 다른 실행 파일이 없는 경우 +X다른 수정을 하기 전에 이 명령을 실행할 수 있습니다. 그렇지 않으면 당신은사용할 수 있다find:

find dir -type d -exec echo chmod g+x {} \+

-type d그러면 ( ) 안의 모든 디렉터리를 찾아 해당 디렉터리에 대한 모든 작업을 수행하고 dir모든 경로를 변환합니다.echo chmod g+x{}

관련 정보