유닉스에서 하나의 명령으로 디렉토리의 모든 파일 권한을 어떻게 변경할 수 있습니까?
유닉스에서 하나의 명령으로 디렉토리의 모든 파일 권한을 어떻게 변경할 수 있습니까?
답변:
비재 귀적으로 파일 또는 디렉토리 항목에 대한 권한을 변경하려면 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
디렉토리에 설정 한다고 가정 합니까? 이 질문은 그가 특히 권한이 아닌 권한 변경을 원한다고 명시합니다.
chmod -R go=u,go-w /dir
chmod
-R
파일 및 디렉토리에 대한 권한을 재귀 적으로 변경하는 것을 의미 하는 플래그가 있습니다.
대문자 'X'를 사용하여 폴더에 올바른 작업을 수행 할 수 있습니다. 'X'= "파일이 디렉토리이거나 이미 일부 사용자에 대한 실행 권한이있는 경우에만 실행 / 검색"
예를 들어 chmod -R ug = rwX, o-rwx입니다.
전체 트리를 소유자와 각 파일의 그룹이 액세스 할 수있게하고 다른 사람은 액세스 할 수 없도록합니다. 이미 실행 가능한 파일은 계속해서 실행 가능하며, 모든 디렉토리는 다른 사용자가 아닌 사용자와 그룹에 대해 'x'를가집니다.
chmod -R 444 somedir
파일이 들어있는 디렉토리에서 시도하십시오 . 당신은 얻을 Permission denied
-x 플래그는 디렉토리의 이륙지고 있으며,이 디렉토리를 읽고 계속 필요한 때문이다.