'chmod u + x' против 'chmod + x'

113

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

Натан Шверманн
источник

Ответы:

150

Справочная страница chmodохватывает это.

  • ты выступает за пользователя.
  • г обозначает группу.
  • о выступает за других.
  • А означает для всех.

Это означает, что chmod u+x somefileпредоставит только владельцу разрешения на выполнение этого файла, в то chmod +x somefileвремя как то же самое, что и chmod a+x somefile.

Страница руководства chmod гласит:

Формат символического режима есть [ugoa...][[+-=][rwxXstugo...]...][,...]. Можно указать несколько символических операций, разделенных запятыми.

Комбинация букв «ugoa» определяет, какие права доступа пользователей к файлу будут изменены: пользователь, которому он принадлежит (u), другие пользователи в группе файла (g), другие пользователи, не входящие в группу файла (o), или все пользователи (а). Если ничего из этого не дано, эффект будет таким, как если бы было указано «а», но биты, установленные в umask, не будут затронуты.

Октавиан Дамиан
источник
У меня есть маленький вопрос, в чем разница между + x и, скажем, 111. Это делает оба исполняемых
TheBro21
Это потому, что 1 является восьмеричной нотацией, которая обозначает разрешение на выполнение. 111 означает исполняемый файл для пользователя, группы и других.
Октавиан Дамиан
Отличный чистый ответ
m4heshd
Эффект масок важен, он chmod +x fileотличается от других chmod a+x file- см. Подробности в ответе Равексины.
Cinnam
19

Простое выполнение +xприменяет его ко всем флагам: [u] ser, [g] roup, [o] thers.

Введите man chmodдля получения дополнительной информации.

matpie
источник
Обещаю, что сначала проверил руководство, но не увидел его, так как пропустил описание и переключился на варианты. Я вижу их сейчас, хотя :-)
Натан Шверманн
14

Требования

Прежде всего, я предлагаю вам прочитать эти вопросы и ответы, связанные ниже:

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


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

  • chmod +xравно chmod ugo+x(на основе umaskстоимости)
  • chmod a+xравно chmod ugo+x(без учета umaskстоимости)

объяснение

Результат chmod a+xсостоит в том, чтобы установить исполняемый бит для каждого (Владелец, Группа, Другие), не так ли?

Тем не менее, с chmod +xэтим немного сложно, он говорит, что использовать umaskзначение и на основе этого значения добавить xк каждому, что разрешено.

Так что, если umaskмоя среда 0002:

$ umask
0002
$ umask -S
u=rwx,g=rwx,o=rx

Это добавит xк пользователю (владельцу), группе и другим, в этой ситуации (которая является ситуацией по умолчанию для большинства систем), это точно так chmod ugo+xже, как chmod a+xили в более подробной форме:

chmod u+x,g+x,o+x

Можете ли вы определить связь между chmod u+x,g+x,o+xвыходом umask -S?

Теперь давайте изменим umaskтекущую оболочку на 0003:

$ umask 0003
$ umask
0003
$ umask -S
u=rwx,g=rwx,o=r

Как вы можете видеть, теперь только владелец и группа получат исполняемый бит, а не остальные. Это означает, chmod +xчто теперь равно chmod u+x,g+xили chmod ug+x.


Время вопросов!

Что произойдет, если я запустил chmod +wфайл после установки umaskна 0003?

То же самое , как и прежде, она влияет только userи groupфайла , потому что 3 также удаляет разрешение на запись (2).


бонус

Это имеет тот же эффект, когда вы удаляете немного как chmod -w:

$ mkdir test
$ stat -c %A test
drwxrwxr-x
$ umask
0002
$ chmod +w test
$ stat -c %A test
drwxrwxr-x
$ chmod a+w test
$ stat -c %A test
drwxrwxrwx
$ chmod -w test
chmod: test/: new permissions are r-xr-xrwx, not r-xr-xr-x
$ stat -c %A test
dr-xr-xrwx
Ravexina
источник
7

chmod u+x сделает исполняемый файл для вашего пользователя (он добавит его только для вашего пользователя, хотя он может быть уже исполняемым владельцем группы или «другим»).

chmod +xили chmod a+x(«все плюс исполняемый бит») делает файл исполняемым для всех.

Если вы сделаете это с каталогом, он сделает каталог доступным для поиска. Т.е. вы можете перечислить содержимое каталога, на который у вас есть + x разрешение.

belacqua
источник
извините, но эта вещь не работает для меня. Я попробовал это с sudo и не получил это работает на моем компьютере. askubuntu.com/questions/178231/how-to-set-permission-in-ubuntu
Гупта
@AnkitGupta Я не уверен, что ты говоришь. Мой комментарий не был предназначен для устранения проблемы в другом вопросе и ответах. Попробуйте вместо этого попросить разъяснений к ответам. Измените свой вопрос, чтобы сказать, что вы пытались. Покажите вывод.
Белаква
1
  • chmod u+x fileозначает добавить исполняемый бит к владельцу файла, игнорируя при этом umask(Ваш мод будет установлен, без вопросов).

  • chmod +x fileозначает добавление исполняемого бита владельцу, группе и другим при рассмотрении umask(сначала проверьте, а umaskзатем примените моды, это может иметь разные эффекты в зависимости от значения umask).


давайте создадим два файла:

$ touch file1 file2
$ ls -l file1 file2
-rw-rw-rw- 1 ravexina ravexina 0 Aug  5 01:45 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug  5 01:45 file2

Теперь я поставил umaskна «111» , чтобы удалить исполняемые биты: umask 111.

$ chmod u+x file1
$ chmod  +x file2
$ ls -l file1 file2
-rwxrw-rw- 1 ravexina ravexina 0 Aug  5 01:47 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug  5 01:47 file2

Как вы можете видеть, chmodигнорируемый umaskи file1 получил исполняемый бит для своего владельца, однако второй ничего не сделал, потому что рассматривает значение umask.

Ravexina
источник