현재 디렉토리의 모든 파일을 chown / chmod하는 방법은 무엇입니까?


56

현재 디렉토리에서 일부 파일 및 디렉토리의 소유권과 권한을 변경하려고합니다. 나는 이것을 시도했다 :

chown username:groupname .

... 현재 디렉토리의 모든 파일에 영향을 줄 것으로 예상하지만 대신 내가있는 디렉토리에만 영향을 미칩니다 (이는 내가하고 싶은 것과 반대입니다). 현재 디렉토리에 영향을 미치지 않고 모든 파일에서 변경하고 싶습니다.

현재 디렉토리의 모든 파일을 어떻게 chown하고 chmod 할 수 있습니까?


man chown그리고 man chmod쉽게 귀하의 질문에 대답.
Shi

2
@ Shi 나는 그것이 공정한 질문이라고 생각합니다. 해당 매뉴얼 페이지를 읽는 것이 도움이되지 않습니다. 글 로빙 은의 일부가 아닙니다 chmod. 쉘에 내장되어 있습니다. 또한 globbing에 대한 문서를 읽으면 삶의 질이 떨어집니다 (zsh의 모든 기능을 알아내는 데 많은 시간을 보냈습니다).
djf

1
@djf :chown -R user:group .
Shi

답변:


96

을 사용 chown username:groupname *하고 셸 *에서 현재 디렉토리의 내용으로 확장하도록 합니다. 이렇게하면 현재 디렉토리의 모든 파일 / 폴더에 대한 권한이 변경되지만 폴더의 내용은 변경되지 않습니다.

또한 chown -R username:groupname .현재 디렉토리에 대한 권한을 변경 한 다음 디렉토리와 모든 하위 폴더 내에서 재귀 적으로 권한을 변경합니다.

chown -R username:groupname *현재 디렉토리 자체는 그대로두고 모든 파일 및 폴더에 대한 권한을 재귀 적으로 변경합니다. 이 스타일과 첫 번째 스타일은 내가 가장 자주 사용하는 스타일입니다.


2
@Andrew 그러나 당신의 경계에, 그는 지친 또는 준비되지 않은 친구와 적 모두가 될 수 있습니다.
다스 안드로이드

5
또한 시대의 위험에주의하십시오. 키보드의 almight "/"바로 옆에 있습니다. 간단한 오타 쉽게 설정할 수 있습니다 chown -R username:groupname .chown -R username:groupname /. 이틀간의 악몽 2 초 임무
teynon

@Tom 그래서 나는 아마도 -v모든 재귀 명령에서 사용 을 시작해야 하지만 너무 게으르다.
Kolob Canyon

키보드의 미끄러짐을 피하기 위해 구체적이고 디렉토리 이름을 지정했지만, 가장 훌륭하고 가장 간결한 답변으로 찬성했습니다.chown -R username:groupname directoryname
Dave Everitt

9

나는 당신이 이것을 원한다고 생각합니다 :

chown username:groupname *

하위 디렉토리를 재귀 적으로 변경하려면 -R( -r더 이상 사용되지 않음) 스위치가 필요합니다 .

chown -R username:groupname *


0

chown수퍼 유저 인 경우 유용합니다. 다른 사람이 make내 디렉토리에서 실행 되어서 수정할 수없는 일부 파일을 소유 하는 문제가있었습니다 . 다음은 파일과 디렉토리를 처리하는 해결 방법입니다. 디렉토리를 .mkmeowner삭제할 수 없으면 접미사로 디렉토리를 남겨 둡니다 .

  • 다음 스크립트는 전달 된 파일 및 디렉토리의 소유권을 현재 사용자가 소유하도록 변경하고, 현재 사용자가 소유하지 않은 모든 디렉토리 또는 파일의 새 사본을 작성, 삭제 (또는 삭제)하여 권한 문제를 해결하려고 시도합니다. 원본 파일과 이름을 적절히 바꿉니다.
  • 의도는 "make me owner"의 약자입니다. 밑줄은 입력하기가 어렵 기 때문에 사용하지 않습니다.

예 :

% mkmeowner .

% mkmeowner dirpath1 dirpath2
  • 다음 스크립트 mkmeownerone가 경로에 있어야합니다 .

mkmeowner :

#!/bin/bash
[ "x$1" == "x-h" ] || [ "x$1" == "x--help" ] && cat << END && exit 0
Usage: $0 dirorfile [direorfile2 ...]:
    change ownership of directories or files to current user.
    Current user must have permissions to read those and write to owner directory.
END
mkmeownerone=`which mkmeownerone`
for d in $*; do
    find "$d" -not -user `whoami` -exec $mkmeownerone {} \;
done

mkmeownerone :

#!/bin/bash
# change ownership of one file or directory
f="$1"
expr match "${f}" '.*\.mkmeowner$' > /dev/null && exit 1 # already tried to do this one
if mv -f "$f" "${f}.mkmeowner"; then
    cp -pr "${f}.mkmeowner" "$f" && rm -rf "${f}.mkmeowner"
    exit 0
fi
exit 1

1
(1) 설명이 포함 된 답변을 선호합니다. 나는 당신의 대본을 읽고 그들이하는 일을 보았을 때 놀랐습니다. 왜냐하면 당신의 입문 단락이 나에게 실마리를주지 않았기 때문입니다. (2) 사용자가 mkmeownerone검색 경로에 입력해야한다는 것을 잊었습니다 .  mkmeowner그렇지 않으면 폭발 할 것입니다. (3) 쉘 명령과 스크립트에서 따옴표를 사용하는 방법 (즉, 언제, 어디서)을 배우십시오. 말하는 ${f}것은 유용한 대안이 아닙니다. 이 참조 하십시오 . … (계속)
Scott

(계속)… (4) 디렉토리에서 스크립트를 실행하면 해당 디렉토리의 모든 파일이 두 번 복사 될 수 있습니다. (5)  expr는 구식입니다. 쉘에서 간단한 문자열 일치를 수행하는 것이 더 효율적입니다. bash는 정규식 일치도 지원합니다. 그 문제의 경우에 파일 이름 테스트를 할 수있는 find. (6) expr match여부를 명령 테스트 ${f}로 끝 mkmeowner이 끝납니다 여부, .mkmeowner. 따라서 스크립트 자체에서 작동하지 않습니다. … (계속)
Scott

(계속)… 이제는 이것이 좋은 일입니다. 스크립트가 실행되는 동안 스크립트를 옮기거나 삭제하고 싶지는 않습니다. (이것이 반드시 문제를 일으키는 것은 아니지만 혼란 스러울 수 있습니다.) 그러나 그러한 특별한 경우를 이해하고 문서화해야합니다. (7) 여러 단어로 된 문자열에 밑줄을 사용할 수 있습니다.  dirorfile읽고 이해하기 어렵고 (와 비교 dir_or_file), 내가봤을 때 mkmeowner, 나의 첫 생각은 고양이 ( mk +  meow +  ner) 에 관한 것이었다 .
스캇

스콧 메모 주셔서 감사합니다. 1. 설명이 필요하다고 생각했지만 좀 더 명확하게 설명하겠습니다. 2. 좋은 지적입니다. 나는 원래 스크립트에서 그것을 포착했지만 참조를 꺼 냈습니다. 3. 나는 30 년 동안 쉘 스크립트를 작성해 왔지만, 더 많은 것을 배우려고 노력할 것이다. 4. 그렇습니다. 디렉토리를 소유하지 않으면 삭제할 수 없기 때문에 의도적으로 발생합니다. 나는 그것을 언급 할 수있다. 5. Yah 나는 구식이지만 expr은 여전히 ​​잘 작동합니다. 6. ha 좋은 지적입니다. 7. 밑줄이 규칙이 아니기 때문에 II에 약간의 예술 라이센스가 있다고 생각합니다. 야옹이를 만드는 대본이 필요합니다!
sbcondor

$ {f}에 문제가 있다고 생각하지 않습니다. 필요 이상으로 조금 길다. 변수를 사용하여 $ {f} .mkmeowner와 같은 더 긴 문자열을 만들고 싶을 수 있기 때문에 자주 사용하는 형식이며 $ f.heck이 $ {f} + heck 또는 $ {를 의미하는지 기억할 필요가 없습니다. f.heck}
sbcondor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.