В чем разница между chmod u+x
и просто chmod +x
? Я видел массу руководств, в которых говорится, как использовать u+x
чтобы сделать скрипты исполняемыми. Однако, опуская u
похоже, это не имеет никакого эффекта.
Справочная страница из chmod
покрывает это.
- u расшифровывается как пользователь.
- g расшифровывается как группа.
- o выступает за других.
- a выступает за всех.
Это означает, что chmod u+x somefile
предоставит только владельцу этого файла разрешения на выполнение, тогда как chmod +x somefile
это то же самое, что и chmod a+x somefile
.
На справочной странице chmod написано:
Формат символьного режима - это
[ugoa...][[+-=][rwxXstugo...]...][,...]
. Может быть задано несколько символьных операций, разделенных запятыми.Комбинация букв "ugoa" определяет, доступ каких пользователей к файлу будет изменен: пользователя, которому он принадлежит (u), других пользователей в группе файла (g), других пользователей, не входящих в группу файла (o), или всех пользователей (a). Если ни один из них не задан, эффект будет таким, как если бы был задан 'a', но биты, установленные в umask, не затрагиваются.
Требования
Прежде всего, я предлагаю вам прочитать эти вопросы и ответы, приведенные ниже:
Это поможет вам понять все необходимые части, которые вам нужно знать.
Короткая версия
-
chmod +x
равноchmod ugo+x
(На основеumask
значение) -
chmod a+x
равноchmod ugo+x
(Без учетаumask
значение)
Объяснение
Результатом chmod a+x
легко ли установить исполняемый бит для всех (владельца, группы, других), не так ли?
Однако с chmod +x
это немного сложно, там написано, что используйте umask
значение и на основе этого значения добавьте x
для всех, кому это позволено.
Так что, если umask
из моего окружения является 0002
:
$ umask0002$ umask -Su=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$ umask0003$ umask -Su=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 testdrwxrwxr-x
$ umask0002
$ chmod +w test$ stat -c %A testdrwxrwxr-x
$ chmod a+w test$ stat -c %A testdrwxrwxrwx
$ chmod -w testchmod: test/: new permissions are r-xr-xrwx, not r-xr-xr-x
$ stat -c %A testdr-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
и файл1 получил исполняемый бит для своего владельца, однако второй ничего не сделал, потому что он учитывает значение umask.