В чем разница между "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 тест
