Почему 777 назначен chmod, чтобы разрешить все в файле?

Меня спросили в интервью, почему 777 назначается для получения всех разрешений для файла. Почему бы не 555? Он сказал, что есть причина для всего. Итак, в чем причина 777? Почему нет другого номера? Есть ли какое-либо значение в этом номере?

1
задан 27 December 2014 в 22:49

5 ответов

Чтение разрешений на чтение означает 4, запись разрешения файла означает 2 и выполнение прав доступа к файлам 1.

Таким образом, итоговое значение этого параметра 7.

[d2 ] Теперь что такое 777: сначала 7 для владельца файла означает, что владелец файла имеет права на чтение, право и выполнение.

2nd 7 для группы, к которой принадлежит файл, означает, что группа также имеет все права на чтение, запись и выполнение.

И третий 7 для других разрешение

Если вы даете разрешение на файл 555, то файл owner, group and others имеет только разрешение read и execute разрешения not write, поскольку разрешение на чтение означает 4 и выполняет средство 1, поэтому итоговое значение [ f13]

16
ответ дан 24 May 2018 в 07:17
  • 1
    Что такое группа и какие другие разрешения? Спасибо за ответ. – hellodear 27 May 2014 в 14:09
  • 2
    Пожалуйста, обратитесь к этой ссылке для группы и других разрешений, они будут применены к кому-либо еще на сервере, который либо не является вами, либо нет в вашей группе – Prakash V Holkar 27 May 2014 в 14:36

Не так много слов, как верхний ответ:

Каждый файл имеет 3 разрешения: чтение, запись и выполнение. Вы можете выбрать ни один из них, один из них, два из них или все из них:

C (3,0) + C (3,1) + C (3,2) + C ( 3,3) = 8

1 + 3 + 3 + 1 = 8

Итак, всего 8 комбинаций; 8 вариантов разрешений. Подсчитывая от 0, последнее число равно 7 (от 0 до 7). Итак, представленные числами, вот все варианты:

0 - nothing
1 - execute
2 - write
4 - read
3 - execute + write (1 + 2)
5 - execute + read (1 + 4)
6 - write + read (2 + 4)
7 - execute + write + read (1 + 2 + 4)

Есть три числа, потому что порядок идет [разрешения пользователя] [групповые разрешения] [другие разрешения]

So , 777 означает, что все три группы имеют права на чтение, запись и выполнение.

Также (косвенно связано, поэтому вам необязательно читать эту часть), потому что я считаю, что важна его релевантность: почему read номер 4 вместо номера 3?

0 - nothing
1 - execute
2 - write
3 - read
4 - execute + read (1 + 3)
5 - write + read (2 + 3)
6 - execute + write + read (3 + 2 + 1)
7 - ????? no way to get this with the 3 basic options (and we are missing execute + write)

Единственный способ получить уникальные комбинации для всех возможностей - это перейти к двум основным параметрам. 20 = 1 (выполнить), 21 = 2 (запись), 22 = 4 (чтение), и если бы был 4-й базовый вариант, он был бы пронумерован 23 = 8. Обратите внимание, что write не отображается до тех пор, пока все комбинации предыдущего были указаны параметры (это всего лишь один вариант, так как это просто execute). read не отображается до тех пор, пока не будут указаны все комбинации предыдущих опций (опять один, поскольку есть только одна комбинация с двумя опциями - execute + write). execute + write + read не отображается до тех пор, пока не будут указаны все предыдущие комбинации, что равно 3, так как теперь есть два варианта из трех разрешений. Список будет продолжаться таким образом, независимо от того, сколько основных вариантов было. Для примера, с четырьмя базовыми вариантами (обратите внимание, что мы также знаем, что будет 16 комбинаций, поскольку существует 4 варианта и 24 = 16):

0 - nothing
1 - execute
2 - write
4 - read
3 - execute + write (1 + 2)
5 - execute + read (1 + 4)
6 - write + read (2 + 4)
7 - execute + write + read (1 + 2 + 4)
8 - love
9 - execute + love (1 + 8)
10 - write + love (2 + 8)
11 - execute + write + love (1 + 2 + 8)
12 - read + love (4 + 8)
13 - execute + read + love (1 + 4 + 8)
14 - write + read + love (2 + 4 + 8)
15 - execute + write + read + love (1 + 2 + 4 + 8)
7
ответ дан 24 May 2018 в 07:17
  • 1
    Этот ответ совершенно плох , поскольку он не может распознать двоичную и, что более важно, восьмеричную систему чисел как источник битов разрешения файлов Unix. (Как ни странно, они не 3 или даже 4 ... им 6, хотя в настоящее время 18-ти бит не используется). – mirabilos 28 May 2014 в 23:05
  • 2
    База не имеет значения, поскольку 111 равно 7; я говорю, что разрешения 111 или 7 не имеют значения, потому что это одно и то же значение. Я использовал десятичное значение для простоты примера, чтобы показать вовлеченную математику. Я мог бы использовать двоичный код, но математика выглядела бы не так просто. Какое это имеет значение, когда базы могут быть переведены между собой? – Daniel Ward 29 May 2014 в 00:23

Я удивляюсь многим подобным ответам, которые полностью пропускают отметку.

После определения 3-х классов, которые были необходимы, читали, записывали и выполняли. Они пошли с восьмеричным (3 бита), чтобы свести к минимуму пространство, необходимое для управления файловой системой.

4
ответ дан 24 May 2018 в 07:17

По какой-то причине разработчики UNIX решили использовать номера OCTAL для доступа к файлам. Как вы знаете, максимальное значение для восьмеричного восьмеричного номера равно 7. Получилось, что для восьмой цифры для доступа к пользователю, для группового доступа и для доступа к миру достаточно одной восьмеричной цифры. Максимальное восьмеричное число 3digit составляет 777, и имеет смысл только «доступ ко всем / всем».

3
ответ дан 24 May 2018 в 07:17
  • 1
    Я не думаю, что это хорошее объяснение. Дизайнеры UNIX могли бы иметь десятичные числа и все равно оказались бы 7 , обозначая максимальный доступ, а не 9 (как максимальная десятичная цифра). 7 не выбирается «вычитательно», на основании того, какие числа возможны, начиная с максимально возможной одиночной цифры, но «аддитивно» основанный на доступе, разрешенном одиночными двоичными цифрами, начиная с нуля, без каких-либо прав. – O. R. Mapper 1 June 2014 в 17:59
  • 2
    Заметьте, что я писал в самом начале "по какой-то причине" ... - Я не хотел углубляться в объяснение того, почему они выбрали восьмеричные числа, поскольку это не вопрос OP. Вопрос в том, почему 777 дает все разрешения. – DejanLekic 2 June 2014 в 13:25
  • 3
    Здесь неважно, почему они выбрали восьмеричные числа. Я хочу сказать, что причиной того, что максимальные права представлены числом 7, является not , что 7 является максимальным восьмеричным числом. – O. R. Mapper 2 June 2014 в 15:03

В настоящее время мы все знаем, что байт составляет 8 бит: это было универсально согласовано на протяжении десятилетий. Но это не всегда так, и Unix (который вдохновил Linux во многих отношениях) был написан в то время, когда это все еще обсуждалось. В частности, он должен быть переносимым для систем, которые использовали 6-битные байты или 8-битные байты. Некоторые из людей, которые его писали, были на одной стороне дебатов, а другие были на другой стороне.

В соответствующей заметке Base-2 (двоичный) не очень удобная запись для записи значения. В настоящее время мы все знаем, что вместо байта используется 8 бит . 16 достаточно просто, чтобы вы могли точно упаковать четыре бита в одну шестнадцатеричную цифру: например, «0000» в двоичном формате - 0x0 в шестнадцатеричном формате (что «0x» - это общий способ отметить, что вы собираетесь напишите шестнадцатеричное число), а «1111» - 0xF (или 15 в десятичной форме). Вы можете написать любую возможную комбинацию из четырех бит, используя одну шестую цифру, просто подсчитывая в двоичном формате, и из-за того, как работает позиционная арифметика, вы можете складывать ее: две шестнадцатеричные цифры могут кодировать любую возможную комбинацию из восьми бит, просто путем подсчета и т. д. Таким образом, 8-битные люди любили это.

У 6-битных людей был свой способ сделать это, но вместо использования Base-16 они использовали Base-8 (восьмеричный). Он имеет схожие преимущества с шестнадцатеричным: вы можете хранить любую позицию из трех бит в восьмеричной цифре, и вы можете складывать цифры аналогичным образом. Так же, как 8-битные люди использовали два шестнадцатеричных цифры для байта, 6-битные люди использовали две восьмеричные цифры для байта. Вы больше не видите восьмеричную фигуру, но ее обычно отмечали с помощью ноль: например, «111» равно 07 в восьмеричном.

Теперь, что все это имеет отношение к Unix разрешения? Что касается Unix, есть три вещи, которые вы могли бы сделать с файлом: вы могли бы прочитать его, вы могли бы написать его, или вы могли бы выполнить его как программу. Если вы собираетесь ограничить это полномочиями, вам нужно немного для каждого из них: включите его для вещей, которые кому-то разрешены, и оставьте это для вещей, которые кому-то не разрешено делать. У 6-битных людей был свой собственный способ сделать это, но вместо использования Base-16 они использовали Base-8 (восьмеричный).

В какой-то момент вдоль линии , кто-то, возможно, в 6-битном лагере, сказал: «Эй, мы можем использовать восьмеричные цифры для этого». И это оказалось очень удобной нотацией: трех восьмеричных цифр достаточно, чтобы кодировать все возможные комбинации бит-полей. Когда они решили это сделать, судьба 777 (и 000) была запечатана, потому что эти цифры были бы одинаковыми независимо от того, как они упорядочивали биты, но порядок имел значение для всех остальных чисел, поэтому они приступили к этому.

Они устроили разрешения в трехбитовые поля: читали в начале, записывали в середине и выполняли в конце. Затем они сами организовали поля: владелец в начале, группа посередине и другие в конце. В какой-то момент вдоль линии кто-то, возможно, в 6-битном лагере сказал: «Эй, мы можем использовать восьмеричные цифры для этого»

Поскольку они 3- бит, вы можете сказать, что каждая восьмеричная цифра управляет одним из полей: первая цифра управляет разрешениями владельца, вторая цифра управляет групповыми разрешениями, а третья цифра управляет другими разрешениями. Таким образом, 777 (111 111 111) - все разрешения для всех, а 700 (111 000 000) - все разрешения только для владельца. Другие комбинации также распространены: 666 (110 110 110) читается / записывается для всех, но не выполняется), тогда как 555 (101 101 101) читается / выполняется для всех, но не записывается, а 400 (100 000 000)

И поэтому 777 означает все разрешения. В наши дни это, вероятно, самая популярная причина, по которой люди используют восьмеричные вообще, хотя Unix и его потомки все еще имеют несколько других остатков. Например, od или Octal Dump - способ получить двоичные дампы файла в восьмеричной форме (у него есть шестнадцатеричный кузен, называемый xxd, но это не так хорошо известно и недоступно повсюду) , Именно поэтому вам нужно быть осторожным с ведущими нулями на некоторых языках программирования, потому что они могут подумать, что вы намереваетесь писать числа в восьмеричном, если это не ваше намерение.

2
ответ дан 24 May 2018 в 07:17
  • 1
    прежде всего, когда linux был создан (около 1992), 8-битные 6-битные дебаты были ПУТЕМ выше. Во-вторых, это не причина, почему это было сделано – Ahmed Masud 2 June 2014 в 04:54
  • 2
    Я предоставил 8-битный / 6-битный материал для исторического контекста. Linux был создан задолго до того, как эти дебаты закончились, это правда, но из-за того, что он так сильно вдохновил Unix, на это повлияли подобные дебаты. Вот почему я подумал, что было бы неплохо представить исторический контекст. – The Spooniest 2 June 2014 в 06:54

Другие вопросы по тегам:

Похожие вопросы: