Просто чтобы расширить и улучшить некоторые из приведенных выше ответов:
Сначала я проверю страницу руководства mkdir для GNU Coreutils 8.26 - она дает нам эту информацию о параметрах '-m' и '-p' (также может быть задана как --mode = MODE и --parents соответственно ):
... установить режим файла [s] (как в chmod), а не a = rwx - umask
... нет ошибки, если существует, создайте родительские каталоги по мере необходимости
На мой взгляд, утверждения расплывчаты и неясны. Но в основном он говорит, что вы можете создать каталог с разрешениями, указанными в "числовой нотации chmod" (восьмеричные числа), или вы можете пойти "другим путем" и использовать / your umask.
Боковое примечание: я говорю «наоборот», поскольку значение umask на самом деле именно то, на что похоже - маска , скрывающая / удаляющая разрешения, а не «предоставляющая» их, как в числовой восьмеричной записи chmod.
Вы можете выполнить команду shell-builtin, 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), эффективно скрывая некоторые из этих perms. Моя umask равна 022 - теперь, если мы «вычтем» 022 из 777 (технически вычитание является чрезмерным упрощением и не всегда правильно - мы фактически отключаем химические завивки или маскируем их) ... мы получаем 755, как указано (или «указано» ) ранее.
Мы можем опустить '0' перед 3-значными восьмеричными числами (поэтому они не должны быть 4-значными), поскольку в нашем случае мы не хотели (или, скорее, не упоминали) никаких липких битов, setuids или setgids. (вы можете изучить их, кстати, они могут быть полезны, так как вы собираетесь 777). Другими словами, 0777 подразумевает (или эквивалентно) 777 (но 777 не обязательно эквивалентен 0777 - поскольку 777 указывает только разрешения, а не setuids, setgids и т. Д.)
Теперь, чтобы применить это к вашему вопросу в более широком смысле - у вас (уже) есть несколько вариантов. Все ответы выше работают (по крайней мере, согласно моим coreutils). Но вы можете (или скорее всего столкнетесь) столкнуться с проблемами с вышеуказанными решениями, когда захотите создать подкаталоги (вложенные каталоги) с разрешениями 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 завивок для йостаффа, мастуффинистука и йодиректории.
mkdir temp; chmod 777 temp
это одна строка. Вы можете сделать 'temp' переменной и сохранить ее как команду bash. Это то, что ты хочешь сделать?