nfs setattrを機能させるために、モード値が777から0777に変更された作業中のコードの変更を見ました。2つの値の違いは何ですか?
mkdir()
。0777 vs 777
nfs setattrを機能させるために、モード値が777から0777に変更された作業中のコードの変更を見ました。2つの値の違いは何ですか?
mkdir()
。0777 vs 777
回答:
それらをchmod
(コマンドラインプログラム)に渡す場合、違いはありません。しかし、Cプログラムなどで0777
は、8進数(3つの1ビットの3セット、意図したとおりです)777
が10進数であり、まったく異なるビットパターンです。(chmod
数値引数は8進数として解釈されるため、先行ゼロは不要です。)
0777(8進数)== 2進数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
ています(または1023
、10進数で同じ数字を記述できます。ただし、しないでください:
最初のビットはスティッキービットに使用されますhttp://en.wikipedia.org/wiki/Sticky_bit
4桁を使用して許可を設定すると、最初のビットがこのビットを設定または削除します。
興味深い答えは次のとおりです。
0700
し、700
他の回答で説明したように、00700
と0700
(ディレクトリ用)は、少なくとも、LinuxのデフォルトであるGNU coreutilsのchmodバージョンの場合です。
この例を参照してください。
$ 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のドキュメントを参照してください。