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

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

54
задан 27 December 2014 в 21:49

6 ответов

Я попытаюсь обратиться к базовой причине , почему это 777, а не aaa, или 999.

Помнят, что полномочия появляются в следующий формат:

 u   g   o
rwx rwx rwx

, где u=user, g=group, o=other.

Теперь, предположите представление каждой из этих групп как двоичный файл. 1 верно, 0 ложь.

, Если бы Вы хотите предоставить полный доступ всем, Вы присвоили бы следующие полномочия в двоичном файле:

 u   g   o
rwx rwx rwx
111 111 111

Теперь, если Вы знаете двоичный файл, Вы поймете, что, когда Вы преобразовываете 111 от двоичного файла до десятичного числа, Вы добираетесь 7.

Таким образом, можно представить полный доступ как 777.

Примечание: Мы действительно преобразовываем от двоичного файла до восьмеричного. Посмотрите редактирование ниже.

Это работает на все другие режимы доступа также.

, Например, мы можем легко разработать то, что 555 подразумевает под преобразованием каждого 5 к двоичному файлу и записи его в вышеупомянутом формате. 5 в двоичном файле 101, таким образом, у нас есть следующие полномочия:

 u   g   o
r-x r-x r-x
101 101 101
 5   5   5

Точно так же, если мы хотим дать все полномочия пользователю, но только позволить другим людям читать, мы можем найти представление числа.

 u   g   o
rwx r-- r--
111 100 100
 7   4   4

Теперь, мы знаем, что 111 в двоичном файле 7 в десятичном числе, и 100 в двоичном файле 4 в десятичном числе. Таким образом полномочия будут 744.

Редактирование:

Технически, как выделено @LЖ°uVД©nhPhГєc и @Braiam, мы преобразовываем от двоичного файла до восьмеричного, как описано ниже. Однако десятичные и восьмеричные представления чисел < 8 то же, таким образом, для двоичных чисел с 3 цифрами или меньше, и десятичные и восьмеричные представления являются тем же.

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

, Например, вот некоторый двоичный файл к восьмеричным преобразованиям:

0b111111111 == 0o777
0b101101101 == 0o555
0b111100100 == 0o744

Примечание, которое я предварительно ожидаю "0b" и "0o" для различения между двоичными и восьмеричными числами.

, Если Вы хотите играть вокруг с этим, откройте терминал, работайте python и затем играйте вокруг со следующими командами:

oct(0b111111111)
bin(0o555)

Не забывают предварительно ожидать "0b" или "0o" к числам для уведомления компьютера, что базируется, Вы интересуетесь. (Если Вы не сделаете, это примет основу 10.)

0
ответ дан 27 December 2014 в 21:49

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

, Таким образом, общее количество этого 7.

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

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

И 3-й 7 для разрешения

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

0
ответ дан 27 December 2014 в 21:49

В не столько слов как главный ответ:

Каждый файл имеет 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)

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

Так, 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)

единственный способ получить уникальные комбинации для всех возможностей состоит в том, чтобы пойти полномочиями 2 для основных опций. 2 <глоток> 0 = 1 (выполняются), 2 <глоток> 1 = 2 (запись), 2 <глоток> 2 = 4 (чтение), и если бы была 4-я основная опция, это было бы пронумеровано 2 <глоток> 3 = 8. Обратите внимание, что write не перечислен, пока все комбинации предыдущих опций не были перечислены (который является всего одной опцией, так как это всего execute). read не перечислен, пока все комбинации предыдущих опций не были перечислены (снова один, так как существует только одна комбинация с двумя опциями - execute + write). execute + write + read не перечислен, пока все предыдущие комбинации не были перечислены, который равняется 3, так как существует теперь два варианта из трех полномочий. Список продолжился бы этим способом, неважно, сколько основных опций, там были. Ради примера с 4 основными опциями (отмечают, что мы также знаем, будет 16 общих количеств комбинаций, так как существует 4 опции и 2 <глоток> 4 = 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)
0
ответ дан 27 December 2014 в 21:49

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

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

0
ответ дан 27 December 2014 в 21:49

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

0
ответ дан 27 December 2014 в 21:49

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

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

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

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

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

Они расположили полномочия в трехразрядные поля: читайте в запуске, запишите в середине и выполнитесь в конце. Тогда они расположили сами поля: владелец в запуске, группе в середине и других в конце. , Как только они сделали это, все, что они должны были сделать для присвоения, остальная часть чисел была количеством.

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

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

0
ответ дан 27 December 2014 в 21:49

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

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