nfs setattr이 작동하도록 모드 값이 777에서 0777로 변경된 작업에서 코드가 변경되는 것을 보았습니다. 두 값의 차이는 무엇입니까?
mkdir()
. 0777 vs 777
nfs setattr이 작동하도록 모드 값이 777에서 0777로 변경된 작업에서 코드가 변경되는 것을 보았습니다. 두 값의 차이는 무엇입니까?
mkdir()
. 0777 vs 777
답변:
그것들을 chmod
(명령 줄 프로그램)으로 전달한다면 아무런 차이가 없습니다. 그러나 C 프로그램 또는 이와 유사한 경우 0777
8 진수 (3 비트 세트의 1 비트, 원하는 것입니다) 777
는 10 진수이며 비트 패턴이 다릅니다. ( chmod
숫자 인수를 8 진수로 해석하므로 선행 0이 필요하지 않습니다.)
0777 (8 진수) == 바이너리 0b 111 111 111
== 권한 rwxrwxrwx
(== 10 진수 511
)
777 (10 진수) == 이진 0b 1 100 001 001
== 권한 sr----x--x
(== 8 진수 1411
)
chmod
말하면 명령에 전달하는 값 은 항상 8 진으로 해석됩니다. 사용 chmod 888
하면 오류가 발생합니다.
chmod
접두사에 관계없이 숫자 인수를 8 진수로 해석합니다. (그러나 실제로 숫자 자체는 기능이 없으며 숫자 또는 비트 만 있습니다.)
1777
하려면을 작성해야 01777
합니까?
1777
는 01777
C 로 작성 되었습니다 (또는 1023
10 진수와 같은 숫자이지만 쓸 수 는 없습니다. :-).
첫 번째 비트는 스티키 비트에 사용됩니다 http://en.wikipedia.org/wiki/Sticky_bit
4 자리 숫자를 사용하여 권한을 설정하면 첫 번째 비트가이 비트를 설정하거나 제거합니다.
흥미로운 대답은 다음과 같습니다.
0700
그리고 700
다른 답변에서 설명한 바와 같이,00700
와 0700
(디렉토리)는최소한 GNU coreutils의 chmod 버전은 Linux의 기본값입니다.
이 예제를보십시오 :
$ ls -ld mydir
drws--s--- 4 myuser mygroup 4096 Jul 8 09:27 mydir
$ chmod 0710 mydir ; ls -ld mydir # surprise ahead -- s-bits remain:
drws--s--- 4 myuser mygroup 4096 Jul 8 09:27 mydir
$ chmod 00710 mydir ; ls -ld mydir # _now_ they're gone:
drwx--x--- 4 myuser mygroup 4096 Jul 8 09:27 mydir
이는 디렉토리의 setuid / setgid 비트가 실수로 삭제되는 것을 방지하기위한 것입니다. 자세한 내용은 chmod 설명서를 참조하십시오 .