В чем разница между «chmod + x» и «chmod 755»?

62

Когда дело доходит до создания файла исполняемого файла , что является разницей между chmod 755и chmod +xи когда бы использовать какие? Я до сих пор только использовал, chmod +xи я просто прочитал что-то, и это использовало, chmod 755и я не мог сказать, было ли это лучше использовать chmod 755или chmod +x.

Darth4212
источник
9
chmod +xустанавливает все исполняемые флаги без изменения других разрешений. chmod 755устанавливает RWXR-XR-X
Равери
5
@ravery: Привет! Вы нашли раздел комментариев, который посвящен критике и запросам разъяснений. Чтобы предоставить ответ / решение, вы должны использовать раздел «ответ» ниже (ищите большую красную кнопку «Опубликовать свой ответ»). Надеюсь, это поможет!
Легкость гонок с Моникой

Ответы:

145

Укороченная версия:

Чтобы иметь возможность сравнивать их, мы должны смотреть на них с той же точки зрения, поэтому:

  • chmod +xравно chmod ugo+x(на основе umaskстоимости)
  • chmod 755 равно chmod u=rwx,go=rx

Объяснение:

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

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

    • Таким образом, все «чтение, запись, выполнение, закрепление, 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.

введите описание изображения здесь

Ravexina
источник
15
очень важное дополнение: при использовании chmod 755вы устанавливаете эти биты И вы также очищаете все биты suid / sgid / sticky (которые могли быть там) (например: НИКОГДА chmod 755 /tmp). 755 всегда следует рассматривать как 0755, т.
Оливье Дюлак
1
почти идеально, поэтому преждевременно +1 (ура, ты получил этот значок от меня
:)
@OlivierDulac Спасибо, я не хотел вдаваться в подробности, но я
обновлю
1
Я думаю, что я только что понял, как работают разрешения, спасибо!
Фабич
1
@ Рикардо здесь: Чем отличается «chmod + x» от «chmod a + x»
Ravexina
37

chmod +x добавляет разрешение на выполнение для всех пользователей к существующим разрешениям.

chmod 755устанавливает 755разрешение для файла.

755 означает полные права для владельца и права на чтение и выполнение для других.

Pilot6
источник
7

Другой способ взглянуть на это (который мне кажется более понятным) заключается в том, чтобы chmod +xустановить относительные разрешения относительно , а chmod 755установить их абсолютно .

После chmod 755запуска файла его права доступа будут 755 или rwxr-xr-x.

chmod +xпросто возьмет существующие разрешения и добавит разрешения на выполнение в файл.

Баптист Канделе
источник
6

Я рекомендую просмотреть справочную страницу chmod для более подробной информации. Вы просто видите два различных режима работы, доступных с помощью команды chmod для выполнения одной и той же задачи по изменению прав доступа.

Восьмеричный режим использует числа и устанавливает все права доступа к файлу. Символьный режим использует буквы и обычно используется только для изменения существующих разрешений.

chmod 755set rwxr-xr-xwhile chmod +xнастраивает разрешения так, чтобы у владельца, группы и мира были добавлены исполняемые разрешения. Предполагая, что для файла по умолчанию установлено rwxr--r--такое же разрешение, как и для 755 rwxr-xr-x.

TopHat
источник
5

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

При этом 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
Сергей Колодяжный
источник
3

Одним из важных отличий является то, что chmod + подчиняется ограничениям umask, а chmod <octal> - нет.

Рассмотрим следующий пример:

$ 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, используйте формат <octal> и поймите, что вы должны указать все биты, а не просто дельта.

gowenfawr
источник
1

В дополнение к этим красивым ответам я хочу упомянуть небольшое, но, вероятно, важное отличие. Команда 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 тест
mook765
источник