Я побачив зміну коду на роботі, де значення режимів були змінені з 777 на 0777, щоб зробити nfs setattr роботою. Яка різниця у двох значеннях?
mkdir()
. 0777 проти 777
Я побачив зміну коду на роботі, де значення режимів були змінені з 777 на 0777, щоб зробити nfs setattr роботою. Яка різниця у двох значеннях?
mkdir()
. 0777 проти 777
Відповіді:
Якщо ви передаєте їх chmod
(програма командного рядка), різниці немає. Але в програмі C або подібному 0777
- восьмеричний (три набори з трьох 1 біт, що і є наміром), в той час 777
як десятковий, і це зовсім інший біт. ( chmod
інтерпретуватиме будь-який числовий аргумент як восьмеричний, отже, не потрібний нульовий нуль.)
0777 (восьмеричний) == двійкові 0b 111 111 111
== дозволи rwxrwxrwx
(== десяткові 511
)
777 (десятковий) == двійковий 0b 1 100 001 001
== дозволу sr----x--x
(== вісімковий 1411
)
chmod
передаєте команді, завжди трактується як вісімкове. Використання chmod 888
призведе до помилки.
chmod
інтерпретує числовий аргумент як восьмеричний, незалежно від префікса. (Але насправді саме число не має функції; просто цифри, а точніше біти.)
1777
, вам потрібно написати 01777
?
1777
написано 01777
в C. (Або ви можете написати 1023
, що є однаковим числом у десяткових. Але не :-)
Перший біт використовується для клейкого біта http://en.wikipedia.org/wiki/Sticky_bit
Якщо ви встановите дозвіл, використовуючи чотири цифри, перший встановить або видалить цей біт.
Цікава відповідь:
0700
і 700
, як пояснено в інших відповідях00700
та 0700
(для каталогів)Принаймні, це стосується версії chmod для GNU coreutils, яка є типовою для 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
Це дозволяє уникнути випадкового видалення встановлених / setgid бітів для каталогів. Детальніше див. У документації на chmod .
У системі Linux доступні два типи дозволів:
У дозволі на файл ми встановлюємо дозвіл на файли та папки:
Дозволи:
Три типи дозволів:
У своєму запитанні ви запитуєте, в чому різниця, тому немає різниці між chmod 777 and 0777
тим, що є показник no any octal value
значення (0) нуля.