Чи є різниця між значенням режиму 0777 та 777


51

Я побачив зміну коду на роботі, де значення режимів були змінені з 777 на 0777, щоб зробити nfs setattr роботою. Яка різниця у двох значеннях?



Потрапили в той самий випуск, використовуючи вбудовані в PHS функції, як-от FS mkdir(). 0777 проти 777
Нікет Патхак

Відповіді:


76

Якщо ви передаєте їх chmod(програма командного рядка), різниці немає. Але в програмі C або подібному 0777- восьмеричний (три набори з трьох 1 біт, що і є наміром), в той час 777як десятковий, і це зовсім інший біт. ( chmodінтерпретуватиме будь-який числовий аргумент як восьмеричний, отже, не потрібний нульовий нуль.)

0777 (восьмеричний) == двійкові 0b 111 111 111    == дозволи rwxrwxrwx   (== десяткові 511)

777 (десятковий) == двійковий 0b 1 100 001 001== дозволу sr----x--x(== вісімковий 1411)


14
Щоб було зрозуміло - значення, яке ви chmodпередаєте команді, завжди трактується як вісімкове. Використання chmod 888призведе до помилки.
mattdm

але кожна цифра - восьмерична, а не все число саме.
Дрейк Кларріс

1
Рядок восьмеричних цифр - вісімкове число. chmodінтерпретує числовий аргумент як восьмеричний, незалежно від префікса. (Але насправді саме число не має функції; просто цифри, а точніше біти.)
alexis

Отже, в програмі на С, якщо ви хочете пройти 1777, вам потрібно написати 01777?
Faheem Mitha

1
@Faheem, це правильно. Октал 1777написано 01777в C. (Або ви можете написати 1023, що є однаковим числом у десяткових. Але не :-)
alexis

4

Перший біт використовується для клейкого біта http://en.wikipedia.org/wiki/Sticky_bit

Якщо ви встановите дозвіл, використовуючи чотири цифри, перший встановить або видалить цей біт.


3
Клейкий шматочок - це не перший, а третій. Перший - це біт suid, а другий - жорсткий. Якщо ви встановите дозволи за допомогою трьох цифр, відсутня перша цифра також вплине (тобто вилучить) ці три біти.
jlliagre

Ти правий. Ерго, "відповідь, яку надає alexis,
викручується

2
@jlliagre На сторінці chmod man - "Пропущені цифри вважаються провідними нулями." Також перша цифра 4 - клейкий біт. З підручної сторінки знову: "Перша цифра вибирає встановлений ідентифікатор користувача (4) та встановлює груповий ідентифікатор (2) та атрибути обмеженого видалення або липкого (1). Друга цифра вибирає дозволи для користувача, якому належить файл: read ( 4), записати (2) та виконати (1); третій вибирає дозволи для інших користувачів у групі файлів із однаковими значеннями, а четвертий - для інших користувачів, які не належать до групи файлів, з однаковими значеннями. "
Faheem Mitha

1
@FaheemMitha, опущені цифри вважаються провідними нулями, таким чином буде видалено вищезгадані біти. Крім того, ви ніби плутаєте біти і цифри, я коментував перший шматочок, а не першу цифру.
jlliagre

1
@jlliagre Добре, досить справедливо.
Faheem Mitha

1

Цікава відповідь:

  • немає різниці між 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 .


-1

У системі Linux доступні два типи дозволів:

  1. Дозвіл файлу
  2. Спеціальний дозвіл

У дозволі на файл ми встановлюємо дозвіл на файли та папки:

Дозволи:

  • читати (4)
  • написати (2)
  • виконати (1)

Три типи дозволів:

  • SUID (4)
  • SGID (2)
  • Клейкий біт (1)

У своєму запитанні ви запитуєте, в чому різниця, тому немає різниці між chmod 777 and 0777тим, що є показник no any octal valueзначення (0) нуля.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.