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

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

5 ответов

Решение

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

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

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

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

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

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

Требования

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

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


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

  • 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

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

Тип man chmod для дополнительной информации.

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

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

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

  • 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.

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