Каково различие между “chmod +x” и “chmod 755”?

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

63
задан 7 July 2017 в 10:36

7 ответов

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

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

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

Объяснение:

Во-первых необходимо знать что:

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

    • Так все "чтение, запишите, выполнитесь, липкий бит, suid и гуид" будут проигнорированы, и только те обеспечили, будет установлен.
  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.

enter image description here

146
ответ дан 22 November 2019 в 23:34

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

chmod 755 наборы 755 разрешение для файла.

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

37
ответ дан 22 November 2019 в 23:34

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

После chmod 755 работал на файле, его полномочия будут 755, или rwxr-xr-x.

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

7
ответ дан 22 November 2019 в 23:34

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

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

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

6
ответ дан 22 November 2019 в 23:34

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

С 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
5
ответ дан 22 November 2019 в 23:34

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

3
ответ дан 22 November 2019 в 23:34

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

~$ touch test
~$ chmod u+s test
~$ ll test
-rwSrw-r-- 1 mook mook 0 Sep 14 00:49 test
~$ chmod +x test
~$ ll test
-rwsrwxr-x 1 mook mook 0 Sep 14 00:49 test
~$ chmod 755 test
~$ ll test
-rwxr-xr-x 1 mook mook 0 Sep 14 00:49 test
1
ответ дан 22 November 2019 в 23:34

Другие вопросы по тегам:

Похожие вопросы: