В чем разница между 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.