Есть ли разница между значением режима 0777 и 777?

51

Я видел изменение кода на работе, когда значения режима были изменены с 777 на 0777, чтобы заставить работать nfs setattr. Какая разница в 2 значениях?

user1071840
источник
Сталкивался с той же проблемой, когда использовал php встроенные функции, связанные с 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)

Alexis
источник
14
Просто чтобы прояснить - значение, которое вы передаете chmodкоманде, всегда интерпретируется как восьмеричное. Использование chmod 888даст ошибку.
Mattdm
но каждая цифра восьмеричная, а не целое число.
Дрейк Кларрис
1
Строка восьмеричных цифр - восьмеричное число. chmodинтерпретирует числовой аргумент как восьмеричный, независимо от префикса. (Но на самом деле само число не имеет функции; только цифры, точнее, биты.)
alexis
Итак, в программе на C, если вы хотите передать 1777, вам нужно написать 01777?
Фахим Митха
1
@ Фахим, это верно. Восьмеричный 1777написан 01777на C. (Или вы могли бы написать 1023, это то же самое число в десятичном виде. Но не :-)
alexis
4

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

Если вы устанавливаете разрешение, используя 4 цифры, первый установит или удалит этот бит.

alfredocambera
источник
3
Липкий бит - это не первый, а третий бит. Первый - бит suid, а второй - sgid. Если вы устанавливаете разрешения, используя три цифры, пропущенная первая цифра также повлияет (т.е. удалит) эти три бита.
Jlliagre
Ты прав. Ergo, "ответ, предоставленный
Алексис, искажает
2
@jlliagre Со страницы руководства chmod - «Предполагается, что пропущенные цифры являются ведущими нулями». Кроме того, первая цифра 4 - это липкий бит. Снова на странице man: «Первая цифра выбирает заданный идентификатор пользователя (4) и заданный идентификатор группы (2) и атрибуты ограниченного удаления или закрепления (1). Вторая цифра выбирает права доступа для пользователя, которому принадлежит файл: read ( 4) write (2) и execute (1); третий выбирает права доступа для других пользователей в группе файла с теми же значениями, а четвертый - для других пользователей, не входящих в группу файла, с теми же значениями. ".
Фахим Митха
1
@FaheemMitha, опущенные цифры считаются ведущими нулями , таким образом , будет удалить вышеупомянутые биты. Кроме того, вы, кажется, путаете биты и цифры, я комментировал первый бит, а не первую цифру.
июля
1
@jlliagre Хорошо, достаточно справедливо.
Фахим Митха
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

Это сделано для того, чтобы избежать случайного удаления битов setuid / setgid для каталогов. Подробности смотрите в документации chmod .

Алекс О
источник
-1

В системе Linux доступны два типа разрешений:

  1. Разрешение файла
  2. Специальное разрешение

В разделе «Права доступа к файлам» мы устанавливаем права на файлы и папки:

Разрешения:

  • чтения (4)
  • записи (2)
  • выполнение (1)

В то время как в специальном разрешении три типа разрешения:

  • SUID (4)
  • SGID (2)
  • Липкий бит (1)

В своем вопросе вы спрашиваете, в чем разница, поэтому между ними нет никакой разницы, chmod 777 and 0777потому что есть no any octal valueзначение, которое показывает (0) ноль.

Пурушоттам Дике
источник