В чем разница между "chmod +x" и "chmod 755"?
Когда дело доходит до создания исполняемого файла, в чем разница между chmod 755
а также chmod +x
и когда я буду использовать какой? Я до сих пор использовал только chmod +x
и я просто что-то прочитал и использовал chmod 755
и я не мог сказать, было ли это лучше использовать chmod 755
или же chmod +x
,
7 ответов
Укороченная версия:
Чтобы иметь возможность сравнивать их, мы должны смотреть на них с той же точки зрения, поэтому:
chmod +x
равноchmod ugo+x
(На основеumask
значение)chmod 755
равноchmod u=rwx,go=rx
Объяснение:
Во-первых, вы должны знать, что:
+
означает добавить это разрешение к другим разрешениям, которые уже есть у файла.=
значит игнорировать все разрешения, установить их именно так, как я предоставляю.- Таким образом, все "read, write, execute, sticky bit, suid и guid" будут игнорироваться, и будут установлены только те, которые предоставлены.
чтение = 4, запись = 2, выполнение = 1
Вот бинарная логика (если вам интересно):
Symbolic: r-- -w- --x | 421 Binary: 100 010 001 | ------- Decimal: 4 2 1 | 000 = 0 | 001 = 1 Symbolic: rwx r-x r-x | 010 = 2 Binary: 111 101 101 | 011 = 3 Decimal: 7 5 5 | 100 = 4 / / / | 101 = 5 Owner ---/ / / | 110 = 6 Group ------/ / | 111 = 7 Others ---------/ | Binary to Octal chart
С помощью +x
ты говоришь добавить (+
) исполняемый бит (x
) владельцу, группе и другим.
- это равно
ugo+x
или жеu+x,g+x,o+x
- Когда вы не указываете, кто из владельцев, группы или других является вашей целью, в случае
x
он рассмотрит их все. И, как указал @Rinzwind, он основан наumask
значение, это добавляет бит к темumask
позволяет. помните, если вы указали цель какo+r
затемumask
больше не имеет никакого эффекта. - Это не касается других модов (разрешений).
- Вы также можете использовать
u+x
добавить только исполняемый бит владельцу.
С помощью 755
вы указываете:
- 7 ->
u=rwx
(4 + 2 + 1 для владельца) - 5 ->
g=rx
(4 + 1 для группы) - 5 ->
o=rx
(4 + 1 для других)
Так chmod 755
как: chmod u=rwx,g=rx,o=rx
или же chmod u=rwx,go=rx
,
chmod +x
добавляет разрешение на выполнение для всех пользователей к существующим разрешениям.
chmod 755
устанавливает 755
разрешение на файл.
755
означает полные права для владельца и права на чтение и выполнение для других.
Другой способ взглянуть на это (который мне легче понять) заключается в том, что chmod +x
устанавливает разрешения относительно, тогда как chmod 755
устанавливает их абсолютно.
После chmod 755
запускается для файла, его разрешения будут 755, или rwxr-xr-x
,
chmod +x
просто возьмет существующие разрешения и добавит разрешения на выполнение в файл.
Я рекомендую просмотреть справочную страницу chmod для более подробной информации. Вы просто видите два различных режима работы, доступных с помощью команды chmod для выполнения одной и той же задачи по изменению прав доступа.
Восьмеричный режим использует числа и устанавливает все права доступа к файлу. Символьный режим использует буквы и обычно используется только для изменения существующих разрешений.
chmod 755
наборы rwxr-xr-x
в то время как chmod +x
настраивает разрешения так, чтобы у владельца, группы и мира были добавлены исполняемые разрешения. Предполагая разрешение файла по умолчанию rwxr--r--
было бы настроить его на те же разрешения, что и 755 rwxr-xr-x
,
Разница в том, какие права доступа установлены и какой режим вы используете для их установки.
С chmod +x
Вы устанавливаете исполняемый бит для всех - владельца, группы владельцев и других пользователей. Это известно как символический режим. Процитировать man chmod
:
Оператор + вызывает добавление выбранных битов режима файла к существующим битам режима файла каждого файла; - вызывает их удаление; и = вызывает их добавление и приводит к удалению не упомянутых битов, за исключением того, что неизменяемые установленные пользователем биты каталога и идентификаторы группы не затрагиваются.
С chmod 755
вы используете восьмеричные числа, двоичное представление которых используется для установки определенных битов разрешений. Первые (слева) 3 бита соответствуют разрешениям владельца, средние 3 - разрешениям группы, а последний (самый правый) - разрешениям всех других пользователей. Порядок битов всегда одинаков, read,write,execute
или же rwx
Таким образом, именно потому, что порядок один и тот же, индивидуальное число при преобразовании в двоичное представление будет устанавливать биты разрешения, для которых соответствующий позиционный бит в числе равен 1, и сбрасывать тот, который равен 0. В частности:
- Восьмеричное число
7
имеет значение 111 в двоичном формате, поэтому вы устанавливаете все биты чтения, записи и выполнения для владельца;rwx
установлено. - Восьмеричное число
5
имеет значение 101 в двоичном формате, так что вы устанавливаете чтение и выполнение, но отключаете биты записи, и, поскольку это значение равно 5 для группы и других пользователей, эти две категории будут иметь одинаковые разрешения. таким образомr-x
установлено.
Вот небольшая демонстрация:
bash-4.3$ touch file1 file2
bash-4.3$ chmod +x file1
bash-4.3$ chmod 755 file2
bash-4.3$ ls -l file1 file2
-rwxrwxr-x 1 xieerqi xieerqi 0 7月 6 13:54 file1
-rwxr-xr-x 1 xieerqi xieerqi 0 7月 6 13:54 file2
Одним из важных отличий является то, что chmod + подчиняется ограничениям umask, а chmod
Рассмотрим следующий пример:
$ ls -l foo bar
---------- 1 gowenfawr users 0 Jul 7 16:40 bar
---------- 1 gowenfawr users 0 Jul 7 16:39 foo
$ umask
0022
$ chmod +w bar
$ umask 0002
$ chmod +w foo
$ ls -l foo bar
--w------- 1 gowenfawr users 0 Jul 7 16:40 bar
--w--w---- 1 gowenfawr users 0 Jul 7 16:39 foo
$
Итак, если вы хотите внести дельта-изменения в разрешения таким образом, чтобы это соответствовало вашим настройкам umask, используйте синтаксис "+". Но если вы хотите установить его абсолютно безотносительно к umask, используйте формат
В дополнение к этим красивым ответам я хочу упомянуть небольшое, но, вероятно, важное отличие. Команда chmod 755 file
эквивалентно chmod 0755 file
, Если мы запустим эту команду для файла, в котором установлен бит SETUID или SETGID, он удалит бит SETUID / SETGID. chmod +x file
оставит бит SETUID / SETGID нетронутым. Мы можем увидеть это в следующем примере:
тест $ touch тест $ chmod u+s ~ $ ll test -rwSrw-r-- 1 mook mook 0 сент. 14 00:49 тест ~$ chmod +x test ~$ ll test -rwsrwxr-x 1 mook mook 0 сент. 14 00:49 тест тест $ chmod 755 ~ $ ll test -rwxr-xr-x 1 mook mook 0 сент. 14 00:49 тест