В чем разница между & ldquo; chmod + x & rdquo; и & ldquo; chmod a + x & rdquo ;? [Дубликат]

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

94
задан 9 March 2011 в 02:55

5 ответов

Эта страница man chmod охватывает это.

  • u обозначает пользователя.
  • g обозначает группу.
  • o означает другие.
  • a обозначает все.

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

В man-странице chmod говорится:

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

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

127
ответ дан 7 October 2018 в 13:16
  • 1
    У меня есть маленький вопрос, в чем разница между + x и, скажем, 111. Это делает исполняемый файл – TheBro21 31 May 2015 в 15:56
  • 2
    Это потому, что 1 - это восьмеричная запись, которая означает разрешение на выполнение. 111 означает исполняемый файл для пользователя, группы и других. – Octavian Damiean 23 June 2015 в 21:47
  • 3
    Отличный чистый ответ – m4heshd 31 May 2017 в 01:47
  • 4
    Эффект umask важен, делая chmod +x file отличным от chmod a+x file - см. Ответ Равешины для деталей. – Cinnam 2 December 2017 в 00:50
  • 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.

12
ответ дан 7 October 2018 в 13:16

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

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

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

7
ответ дан 7 October 2018 в 13:16
  • 1
    извините, но эта вещь тоже не сработала для меня. Я пробовал это с помощью sudo и не работал на моем компьютере. askubuntu.com/questions/178231/how-to-set-permission-in-ubuntu – Anirudha Gupta 20 August 2012 в 23:39
  • 2
    @AnkitGupta Я не уверен, что вы говорите. Мой комментарий не был предназначен для решения проблемы в другом Q & amp; A. Вместо этого попробуйте попросить разъяснений. Измените свой вопрос, чтобы сказать, что вы пробовали. Покажите результат. – belacqua 21 August 2012 в 00:00

Просто выполнение +x применит его ко всем флагам: [user, [group, [others.

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

19
ответ дан 7 October 2018 в 13:16
  • 1
    Я обещаю, что сначала проверил руководство, но не видел его, так как я пропустил описание и спрыгнул до вариантов. Я вижу их сейчас :-) – schwiz 9 March 2011 в 03:41

Требования

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

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


Короткая версия

  • 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
12
ответ дан 9 October 2018 в 12:31

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

Похожие вопросы: