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