하나의 명령으로 디렉토리의 파일 권한을 변경하는 방법


11

유닉스에서 하나의 명령으로 디렉토리의 모든 파일 권한을 어떻게 변경할 수 있습니까?


디렉토리의 모든 파일에 대한 권한을 변경 하시겠습니까? 이것도 중첩 디렉토리로 가고 싶습니까? 디렉토리 자체의 권한 또는 파일 내의 권한 만 변경 하시겠습니까? 마지막으로 질문을 게시하기 전에이 사이트를 먼저 검색해 보셨습니까?
Ether

답변:


21

비재 귀적으로 파일 또는 디렉토리 항목에 대한 권한을 변경하려면 chmod명령을 사용하십시오 ( 특정 옵션에 대한 자세한 내용 은 man chmod 를 참조하십시오 ).

chmod +x dir  # Set a directory to be listable
chmod +x file # Set a file to be executable

파일 / 디렉토리의 소유자를 재귀 적으로 변경하려면 (모든 자손에 영향을 미침) :

chown -R username           dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group

디렉토리에있는 모든 파일의 권한 비트를 재귀 적으로 변경하려면 다음을 수행하십시오.

find dir -type f -exec chmod 644 {} ';' # make all files       rw-r-r-

모든 디렉토리의 권한 비트를 변경하려면 다음을 수행하십시오.

find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x

당신이 이것을 할 수 있다면 좋을 것입니다 :

chmod -R 755 dir

그러나 이것은 문제가 있습니다. 파일과 디렉토리를 동일하게 취급합니다. 위의 명령은 모든 사용자가 디렉토리를 나열하고 읽을 수있게하지만 모든 파일을 실행 가능하게 만듭니다. 일반적으로 원하지 않는 작업입니다.

로 변경 644하면 다른 문제가 발생합니다.

$ chmod -R 644 x2
chmod: cannot access `x2/authors.html': Permission denied
chmod: cannot access `x2/day_of_week.plot': Permission denied
chmod: cannot access `x2/day_of_week.dat': Permission denied
chmod: cannot access `x2/commits_by_year.png': Permission denied
chmod: cannot access `x2/index.html': Permission denied
chmod: cannot access `x2/commits_by_year.plot': Permission denied
chmod: cannot access `x2/commits_by_year_month.plot': Permission denied
chmod: cannot access `x2/files_by_date.png': Permission denied
chmod: cannot access `x2/files.html': Permission denied
...

문제는 644디렉토리 목록 비트를 꺼내고이 부작용으로 인해 파일 트리가 더 이상 순회되지 않습니다. 을 사용하여이 문제를 해결할 수 sudo있지만 루트가 아닌 사용자에게는 전혀 쓸모없는 디렉토리로 끝납니다.

요점은 chmod -R일부 경우 (예 :)에서는 잘 작동 chmod -R g-r하지만 -x파일과 디렉토리에서 무차별 적으로 작동하기 때문에 비트 를 엉망으로하려는 경우에는 그렇지 않습니다 .


왜 그가 설정을 원 644하거나 -x디렉토리에 설정 한다고 가정 합니까? 이 질문은 그가 특히 권한이 아닌 권한 변경을 원한다고 명시합니다.
Reese Moore

@Reese Moore : 네 말이 맞아. asker는 권한을 재귀 적으로 변경하는 것에 대해 아무 말도하지 않았습니다.
Joey Adams

1
일반적으로 + 및-기호 모드를 사용하려고합니다. 즉,chmod -R go=u,go-w /dir
dannysauer

6

chmod-R파일 및 디렉토리에 대한 권한을 재귀 적으로 변경하는 것을 의미 하는 플래그가 있습니다.

대문자 'X'를 사용하여 폴더에 올바른 작업을 수행 할 수 있습니다. 'X'= "파일이 디렉토리이거나 이미 일부 사용자에 대한 실행 권한이있는 경우에만 실행 / 검색"

예를 들어 chmod -R ug = rwX, o-rwx입니다.

전체 트리를 소유자와 각 파일의 그룹이 액세스 할 수있게하고 다른 사람은 액세스 할 수 없도록합니다. 이미 실행 가능한 파일은 계속해서 실행 가능하며, 모든 디렉토리는 다른 사용자가 아닌 사용자와 그룹에 대해 'x'를가집니다.


chmod -R 444 somedir파일이 들어있는 디렉토리에서 시도하십시오 . 당신은 얻을 Permission denied-x 플래그는 디렉토리의 이륙지고 있으며,이 디렉토리를 읽고 계속 필요한 때문이다.
Joey Adams

1
이에 대한 유용한 부록은 X = Y 구문입니다. 예를 들어 chmod -R g = u dir을 사용하여 그룹 권한을 사용자 권한으로 설정하여 그룹 및 사용자를 동등하게 설정할 수 있습니다. 이것은 "일반"파일은 실행하지 않지만 실행 파일이 필요한 dirs와 같은 문제를 해결합니다.
Paul Rubel

3
chmod -R <file permission> *

의 맨 페이지에서 chmod:

-R, --recursive
              change files and directories recursively

하위 디렉토리 트리에 수백만 개의 파일이있는 여러 방향의 스위치 chmod와 함께 사용하면 한 -R번에 이러한 파일의 파일 권한을 함께 변경하려고합니다.

예를 들어 파일 권한이있을 수 있습니다. 777, 755, 644 등

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.