root
subfolderN
까지 디렉토리와 모든 상위 폴더에 대한 사용자의 읽기 및 쓰기 권한을 설정해야 합니다 root
.
나는 그것을 손으로 할 수 있다:
$ sudo chmod +rx /root/subfolder1/subfolder2/subfolderN
$ sudo chmod +rx /root/subfolder1/subfolder2
$ sudo chmod +rx /root/subfolder1
$ sudo chmod +rx /root
하지만 크면 N
질려요. 하나의 명령으로 이를 자동화하는 방법은 무엇입니까?
답변1
이 작업은 하위 디렉터리에서 시작하여 위로 이동하면서 셸에서 쉽게 수행할 수 있습니다.
f=/root/subfolder1/subfolder2/subfolderN
while [[ $f != / ]]; do chmod +rx "$f"; f=$(dirname "$f"); done;
이는 설정한 파일/디렉토리에서 시작하여 "/"(또는 루프 조건에서 설정한 문자열)를 만날 때까지 각 상위 디렉터리에서 작동합니다. "/"를 chmod하지 않습니다. f
루프 조건의 및 디렉터리가 절대 경로인지 확인하세요 .
답변2
, , , , 또는 :csh
tcsh
ksh
zsh
bash
fish
yash -o braceexpand
sudo chmod +rx /root{,/subfolder1{,/subfolder2{,/subfolderN}}}
그리고 zsh
:
f=/root/subfolder1/subfolder2/subfolderN
until [[ $f = / ]] {chmod +rx $f; f=$f:h;}
또는 다음과 같이 glob 한정자 함수를 정의할 수 있습니다.
explode() {
reply=()
until [[ $REPLY = [./] ]] {
reply+=$REPLY
REPLY=$REPLY:h
}
}
예를 들어 다음과 같이 사용됩니다.
$ echo chmod +rx subfolder1/subfolder2/subfolderN(+explode)
chmod +rx subfolder1 subfolder1/subfolder2 subfolder1/subfolder2/subfolderN
umask의 영향을 받는다는 점에 유의하세요 chmod +rx
. umask
이를 포함하지 않으면 디렉토리 를 누구나 읽을 수 있고 접근할 수 007
있게 됩니다 . 이는 나쁜 생각입니다. 일반적으로 수퍼유저에게는 개인적인 것이므로 공개하는 것은 좋지 않습니다./root
/root
답변3
뭘 하고 싶은지 모르겠지만 그게 너보다 낫다재귀를 과소평가하지 마세요. 즉, 실제 답변을 읽어보십시오.
흠... 재귀를 사용하면 어떨까요?
sudo chmod -R +rx /root
또는 마음에 들지 않으면 chmod
여러 디렉토리를 제공할 수 있습니다.
sudo chamod +rx /root /root/subfolder1 /root/subfolder1/subfolder2 /root/subfolder1/subfolder2/subfolderN
답변4
음, 다음과 같이 약간 더 복잡한 작업을 수행할 수 있습니다.
echo "/root/subfolder1/subfolder2/subfolderN" |
perl -anF'/' -e 'while($#F>0){@b=join("/",@F);`chmod +rx @b`; pop @F}'
이것이 무엇을 하는지 보려면 호출을 chmod
print로 바꾸십시오.
$ echo "/root/subfolder1/subfolder2/subfolderN" |
perl -alnF'/' -e 'while($#F>0){@b=join("/",@F);print "chmod +rx @b"; pop @F}'
chmod +rx /root/subfolder1/subfolder2/subfolderN
chmod +rx /root/subfolder1/subfolder2
chmod +rx /root/subfolder1
chmod +rx /root