쉘 스크립트에서 폴더의 권한을 확인하고 변경하려고 합니다. 그러나 권한이 이미 변경되었더라도 권한을 변경하려고 합니다.
if [ "$(stat -c '%s' /usr/local/src)" == "755" ];
then
echo "Approved!"
else
echo "Wait please, we're changing the permissions"
sudo chmod -R 755 /usr/local/src
fi
실수:
Wait please, we're changing the permissions
sudo: unable to resolve host john
[sudo] password for john:
sudo: unable to resolve host john
올바른 비밀번호를 입력했습니다. 난 한 번도 받은 적이 없는데 Approved!
, 왜요?
답변1
왜 효과가 있었는지는 모르겠지만 이 방법 '%s'
으로 변경했더니 '%a'
문제가 해결되었습니다. :)
답변2
당신은 당신이 무엇을하고 있는지 깨달아야합니다.
man stat
무엇보다도 형식 순서가 생성됩니다.
The valid format sequences for files (without --file-system):
%a access rights in octal
%A access rights in human readable form
(...)
%s total size, in bytes
보시다시피 %s
크기입니다. /usr/local/src
디렉토리 로서 크기는 입니다 4096
. 당신이 찾고 있는 것은 액세스 권한 %a
이므로 %A
.
그에 따른 출력은 다음과 같습니다.
$ stat -c '%a' /usr/local/src/
2775
또는 첫 번째 옥텟이 이면 0
3자리 숫자이고
$ stat -c '%A' /usr/local/src/
drwxrwsr-x
스크립트에서 다음 줄은 다음과 같습니다.
if [ "$(stat -c '%s' /usr/local/src)" == "755" ];
대체된 출력을 string 과 "$(stat -c '%s' /usr/local/src)"
비교합니다 "755"
. 이 문제를 디버깅하는 쉬운 방법은 왼쪽만 실행하고 결과를 검사하는 것입니다.
$ stat -c '%s' /usr/local/src/
4096
보시다시피 비슷한 형식(4자리)이지만 접근권한을 나타내는 결과는 아닙니다. 그러나 권한은 9
8진수이므로 설정할 수 없습니다 . 8진수 표현에는 8개의 대표 숫자, 즉 0-7만 있습니다. 이제 서두에서 소개한 man
명령 페이지를 확인해 볼 차례 입니다.stat
이제 스크립트를 수정하는 방법을 쉽게 파악할 수 있습니다.