디렉터리 내부의 모든 항목을 기본 파일 소유권 및 권한으로 어떻게 변경합니까?

디렉터리 내부의 모든 항목을 기본 파일 소유권 및 권한으로 어떻게 변경합니까?

다른 드라이브의 콘텐츠를 내 홈 디렉터리로 옮겼지만 권한이 올바르지 않습니다. 먼저 다음을 입력하여 소유권을 변경했습니다.

  ~$ sudo chown -R USERME /home/USERHOME/

지금은 효과가 있다고 생각합니다.

하지만 이제는 모든 파일과 하위 디렉터리를 기본 권한으로 변경하고 파일은 읽기+쓰기, 디렉터리는 r+w+x로 변경하고 싶습니다. 이 문제를 처리하는 재귀적인 방법을 찾지 못했습니다. 나는 다음을 실행했다:

  ~$ sudo chmod 755 -R /home/USERHOME/

모든 것이 나를 위해 작동하도록 하세요. 그러나 파일이 실행 파일로 표시되는데 이는 내가 원하는 것이 아닙니다. 더 많은 하위 디렉터리와 파일이 있으므로 간단한 재귀 솔루션을 찾고 있습니다.

기본적으로 chmod를 통해 기본 umask 매개변수를 전체 폴더에 다시 적용하는 재귀적인 방법을 찾고 있는 것 같습니다.


고쳐 쓰다:

@SkyDan 덕분에 솔루션을 게시했습니다."파일의 chmod를 변경하되 디렉토리는 변경하지 마십시오"

답변1

chmod할 수 있습니다. 찾을 필요가 없습니다.

기호 패턴과 대문자를 사용하세요 X.

chmod -R u=rwX,og=rX directory

중복을 피하고 편집을 더 쉽게 하려면 대안을 사용하세요. 성격 중심이 아닌 행동 중심으로 만들 수 있습니다.

chmod -R a=rX,u+w directory

대문자 X는 chmod에게 x를 디렉토리에 적용하라고 지시합니다(이미 디렉토리가 있는 경우 그렇게 하는 경우 go+X).

수동 추출:

기호 패턴의 형식은 [ugoa...][[+-=][perms...]...]입니다. 여기서 perms는 rwxXst 세트의 0개 이상의 문자이거나 rwxXst 세트의 단일 문자입니다. Ge. 여러 기호 패턴을 쉼표로 구분하여 지정할 수 있습니다.

ugoa 문자 조합은 파일에 대한 사용자의 액세스 권한이 변경되는 것을 제어합니다. 파일을 소유한 사용자(u), 파일 그룹의 다른 사용자(g), 파일 그룹에 속하지 않은 다른 사용자(o) 또는 모든 사용자(1명). 이들 중 어느 것도 주어지지 않으면 a가 주어진 것과 같은 효과가 있지만 umask에 설정된 비트는 영향을 받지 않습니다.

+ 연산자는 선택한 파일 모드 비트를 각 파일의 기존 파일 모드 비트에 추가합니다. - 해당 비트를 제거하고 =는 추가하고 언급되지 않은 비트를 제거합니다. 그리고 설정된 사용자 및 그룹 ID 비트는 영향을 받지 않습니다.

rwxXst 문자는 영향을 받는 사용자에 대한 파일 모드 비트를 선택합니다. 읽기(r), 쓰기(w), 실행(또는 디렉터리 검색)(x), 파일이 디렉터리이거나 이미 일부 파일에 대한 실행 권한이 있는 경우에만 실행/ 사용자(X) 검색, 실행 시 사용자 또는 그룹 ID 설정, 삭제 플래그 또는 고정 비트(t) 제한. 다음 문자 중 하나 이상 대신 ugo 문자 중 하나를 지정할 수 있습니다. 파일을 소유한 사용자에게 권한 부여(u), 파일 그룹에 속한 다른 사용자에게 권한 부여(g), 아무에게도 권한 부여 두 범주의 사용자에 대한 위의 권한(o) 중 하나입니다.

답변2

파일과 디렉터리에는 서로 다른 파일 모드 비트가 필요한 경우가 많지만 chmod -R일반적으로 모든 항목에 동일한 모드가 적용됩니다.

파일과 디렉토리를 구별하는 것은 find유용한 유틸리티입니다.

일반 파일의 모드를 변경합니다.

# Finds all regular files and passes them to chmod
find /path/to/dir -type f | xargs chmod u=rw,g=r,o=r

디렉토리 모드 변경:

# Directories require the execution bit to be accessible
find /path/to/dir -type d | xargs chmod u=rwx,g=rx,o=rx

유틸리티 find자체는 재귀적이므로 플래그 chmod와 함께 사용할 필요가 없습니다 -R.

답변3

각 파일/디렉토리 등에 대한 개별 권한을 갖고 싶다면 먼저 해당 항목을 찾은 다음 해당 항목으로 작업을 수행해야 합니다. 예:

 find . -type d -name '*spec_dir*' | xargs chmod 755 

따라서 위의 명령은 현재 디렉토리의 모든 하위 디렉토리를 검색한 다음 drwxr-xr-x에 대한 권한을 발견된 이름에 포함된 모든 항목으로 설정합니다 spec_dir.

권한을 재설정하지 않고 추가/제거해야 하는 경우 g+/-p 형식을 사용하세요. 예를 들어, 다른 그룹에 대해서만 실행 권한을 추가하려면 다음을 수행하십시오.o+x

chmod o+x file또는 위의 명령 컨텍스트에서... | xargs chmod o+x

find . -type f -name 'my_files*'파일 등 으로도 동일한 작업을 수행할 수 있습니다 .

답변4


고쳐 쓰다

도움을 주신 @SkyDan에게 감사드립니다.이 유닉스 문제는 여기에 있습니다해결책을 찾았습니다.

내가 먼저 그랬어

~$ find . -type d -print0 | xargs -0 chmod 755

사용자가 읽고, 쓰고, 실행할 수 있도록 모든 디렉터리를 변경합니다. 그럼 내가 그랬어

~$ find . -type f -print0 | xargs -0 chmod 644

사용자가 모든 파일을 읽고 쓸 수 있도록 합니다.

관련 정보