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

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

Короткая версия:

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

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

Объяснение:

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

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

    • Таким образом, все "чтение, запись, выполнение, sticky bit, suid и guid" будут проигнорированы, и будут установлены только те, которые указаны.
  3. чтение = 4, запись = 2, выполнение = 1

    • Вот двоичная логика, стоящая за этим (если вам интересно):

      Symbolic:  r-- -w- --x  |  421Binary:    100 010 001  |  -------Decimal:    4   2   1   |  000 = 0                        |  001 = 1Symbolic:  rwx r-x r-x  |  010 = 2Binary:    111 101 101  |  011 = 3Decimal:    7   5   5   |  100 = 4           /   /   /    |  101 = 5Owner  ---/   /   /     |  110 = 6Group  ------/   /      |  111 = 7Others ---------/       |  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.

enter image description here

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

В дополнение к этим прекрасным ответам я хочу упомянуть о небольшом, но, вероятно, важном различии. Команда chmod 755 file эквивалентно chmod 0755 file. Если мы выполним эту команду для файла, в котором установлен SETUID-бит или SETGID-бит, он удалит SETUID/SETGID-бит. chmod +x file оставит SETUID/SETGID-бит нетронутым. Мы можем видеть это в следующем примере:

~$ сенсорный тест ~ $ chmod u + s тест ~$ ll тест-rwSrw-r-- 1 mook mook 0 сентября 14 00:49 тест ~$ chmod + x тест ~$ ll тест-rwsrwxr-1 x mook mook 0 сентября 14 00:49 тест ~$ chmod 755 тест ~$ ll test-rwxr-xr-x 1 мук мук 0 Сентября 14 00:49 тест

chmod +x sets all executable flag without changing other permissions. chmod 755 sets rwxr-xr-x

@ravery: Привет! Вы нашли раздел комментариев, который представляет собой область, предназначенную для критики и запроса разъяснений. Чтобы предоставить ответ / решение, вы должны использовать раздел “ответ” ниже (найдите большую красную кнопку “Опубликовать свой ответ”). Надеюсь, это поможет!