Меня спросили в интервью, почему 777 назначается для получения всех разрешений для файла. Почему бы не 555? Он сказал, что есть причина для всего. Итак, в чем причина 777? Почему нет другого номера? Есть ли какое-либо значение в этом номере?
Чтение разрешений на чтение означает 4, запись разрешения файла означает 2 и выполнение прав доступа к файлам 1.
Таким образом, итоговое значение этого параметра 7.
[d2 ] Теперь что такое 777: сначала 7 для владельца файла означает, что владелец файла имеет права на чтение, право и выполнение.2nd 7 для группы, к которой принадлежит файл, означает, что группа также имеет все права на чтение, запись и выполнение.
И третий 7 для других разрешение
Если вы даете разрешение на файл 555, то файл owner, group and others имеет только разрешение read и execute разрешения not write, поскольку разрешение на чтение означает 4 и выполняет средство 1, поэтому итоговое значение [ f13]
Не так много слов, как верхний ответ:
Каждый файл имеет 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)
Я удивляюсь многим подобным ответам, которые полностью пропускают отметку.
После определения 3-х классов, которые были необходимы, читали, записывали и выполняли. Они пошли с восьмеричным (3 бита), чтобы свести к минимуму пространство, необходимое для управления файловой системой.
По какой-то причине разработчики UNIX решили использовать номера OCTAL для доступа к файлам. Как вы знаете, максимальное значение для восьмеричного восьмеричного номера равно 7. Получилось, что для восьмой цифры для доступа к пользователю, для группового доступа и для доступа к миру достаточно одной восьмеричной цифры. Максимальное восьмеричное число 3digit составляет 777, и имеет смысл только «доступ ко всем / всем».
В настоящее время мы все знаем, что байт составляет 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, но это не так хорошо известно и недоступно повсюду) , Именно поэтому вам нужно быть осторожным с ведущими нулями на некоторых языках программирования, потому что они могут подумать, что вы намереваетесь писать числа в восьмеричном, если это не ваше намерение.