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