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

Объяснение:

Во-первых, вы должны знать, что:

  1. + означает добавить это разрешение к другим разрешениям, которые уже есть у файла.
  2. = значит игнорировать все разрешения, установить их именно так, как я предоставляю.

    • Таким образом, все "read, write, execute, sticky bit, suid и guid" будут игнорироваться, и будут установлены только те, которые предоставлены.
  3. чтение = 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 тест
Другие вопросы по тегам