특정 폴더에 대한 권한 확인 및 변경

특정 폴더에 대한 권한 확인 및 변경

쉘 스크립트에서 폴더의 권한을 확인하고 변경하려고 합니다. 그러나 권한이 이미 변경되었더라도 권한을 변경하려고 합니다.

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

또는 첫 번째 옥텟이 이면 03자리 숫자이고

$ 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자리)이지만 접근권한을 나타내는 결과는 아닙니다. 그러나 권한은 98진수이므로 설정할 수 없습니다 . 8진수 표현에는 8개의 대표 숫자, 즉 0-7만 있습니다. 이제 서두에서 소개한 man명령 페이지를 확인해 볼 차례 입니다.stat

이제 스크립트를 수정하는 방법을 쉽게 파악할 수 있습니다.

관련 정보