Просто чтобы расширить и улучшить некоторые из приведенных выше ответов:
Сначала я проверю справочную страницу mkdir для GNU Coreutils 8.26 - она дает нам эту информацию о параметрах '-m' и '-p' (также может быть задана как --mode = MODE и - родители соответственно):
... установить режим файла [s] (как в chmod), а не a = rwx - umask
... без ошибок, если есть, создайте родительские каталоги по мере необходимости
Утверждения, на мой взгляд, расплывчаты и неясны. Но в основном это говорит о том, что вы можете создать каталог с разрешениями, указанными в «chmod numeric notation» (восьмеричные), или вы можете пойти «другим путем» и использовать / your umask.
Примечание: я говорю "по-другому", так как значение umask на самом деле именно так, как оно звучит - маска 1014 *, скрывающая / удаляющая разрешения, а не "предоставляющая" их, как в числовом восьмеричном chmod нотации.
Вы можете выполнить встроенную в оболочку команду umask
, чтобы узнать, каков ваш 3-значный umask; для меня это 022
. Это означает, что когда я выполню mkdir yodirectory
в заданной папке (скажем, mahome) и stat
, я получу вывод, похожий на этот:
755 richard:richard /mahome/yodirectory
# permissions user:group what I just made (yodirectory),
# (owner,group,others--in that order) where I made it (i.e. in mahome)
#
Теперь, чтобы добавить немного больше об этих восьмеричных разрешениях. Когда вы создаете каталог, «ваша система» берет вашу папку по умолчанию «perms» [которая применяется для новых каталогов (ее значение должно быть 777)] и шлепает маску yo (u), эффективно скрывая некоторые из этих разрешений ». Мой umask - 022 - теперь, если мы «вычтем» 022 из 777 (технически вычитание является чрезмерным упрощением и не всегда корректным - мы фактически отключаем перми или mask их) ... мы получаем 755 как заявлено (или «утверждено») ранее.
Мы можем опустить '0' перед 3-значными восьмеричными числами (поэтому они не должны быть 4-значными), поскольку в нашем случае мы не хотели (или, скорее, не упомянули) никаких залипаний, setuids или setgids (вы можете посмотреть на них, кстати, они могут быть полезны, так как вы едете 777). Другими словами, 0777 подразумевает (или эквивалентен) 777 (но 777 не обязательно эквивалентен 0777 - поскольку 777 определяет только разрешения, а не setuids, setgids и т. Д.)
Теперь, чтобы применить это к вашему вопросу в более широком смысле - у вас (уже) есть несколько вариантов. Все ответы выше работают (по крайней мере, согласно моим coreutils). Но вы можете (или весьма вероятно) столкнетесь с проблемами с вышеуказанными решениями, когда захотите создать sub каталогов (вложенных каталогов) с разрешениями 777 одновременно. В частности, если я сделаю следующее в mahome с umask 022:
mkdir -m 777 -p yodirectory/yostuff/mastuffinyostuff
# OR (you can swap 777 for 0777 if you so desire, outcome will be the same)
install -d -m 777 -p yodirectory/yostuff/mastuffinyostuff
Я получу перми 755
для yodirectory
и yostuff
, только 777
для mastuffinyostuff
. Похоже, что umask
- это все, что наложено на yodirectory
и yostuff
... чтобы обойти это, мы можем использовать подоболочку:
( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
и все. 777 разрешений на yostuff, mastuffinyostuff и yodirectory.