Как создать каталог и дать разрешение одной командой в Linux?
Мне нужно создать много папок с полным разрешением 777
.
Команды
mkdir path/foldername
chmod 777 path/foldername
Я не люблю создавать и давать разрешение двумя командами. Могу ли я сделать это одной командой?
mkdir temp; chmod 777 temp
это одна строка. Вы можете сделать 'temp' переменной и сохранить ее как команду bash. Это то, что ты хочешь сделать?Ответы:
Согласно странице руководства mkdir ...
источник
-p
, связанной с уже упомянутым @DisplayName, есть еще одна проблема .-m
Будет применяться только если каталог на самом деле создается. Если он уже существует, его режим не будет изменен. В зависимости от вашего контекста это может быть хорошо или плохо.должен дать вам то, что вы хотите. Имейте в виду, что каждый пользователь имеет право добавлять и удалять файлы в этом каталоге.
источник
three
, с разрешениями по умолчанию, достаточными для пути к нему.Когда каталог уже существует:
Когда каталог не существует и вы хотите создать родительские каталоги:
источник
find /your/dirs -type d -exec chmod 755 {} \;
ИМО,
install
в таких ситуациях лучше использовать команду. Пытался сделатьsystemd-journald
постоянным при перезагрузках.источник
Вы можете написать простой сценарий оболочки, например:
После сохранения и включения флага исполняемого файла вы можете запустить его вместо mkdir и chmod:
Однако ответ alex намного лучше, потому что он порождает один процесс вместо трех. Я не знал об этом
-m
варианте.источник
Просто чтобы расширить и улучшить некоторые из приведенных выше ответов:
Сначала я проверю страницу руководства mkdir для GNU Coreutils 8.26 - она дает нам эту информацию о параметрах '-m' и '-p' (также может быть задана как --mode = MODE и --parents соответственно ):
На мой взгляд, утверждения расплывчаты и неясны. Но в основном он говорит, что вы можете создать каталог с разрешениями, указанными в "числовой нотации chmod" (восьмеричные числа), или вы можете пойти "другим путем" и использовать / your umask.
Боковое примечание: я говорю «наоборот», поскольку значение umask на самом деле именно то, на что похоже - маска , скрывающая / удаляющая разрешения, а не «предоставляющая» их, как в числовой восьмеричной записи chmod.
Вы можете выполнить команду shell-builtin,
umask
чтобы увидеть вашу 3-значную umask; для меня это022
. Это означает, что когда я выполняюmkdir yodirectory
в заданной папке (скажем, mahome) и вstat
ней, я получаю результат, похожий на этот:Теперь, чтобы добавить еще немного об этих восьмеричных разрешениях. Когда вы создаете каталог, «ваша система» берет ваш каталог 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:
Я получу завивку
755
для обоихyodirectory
иyostuff
, только777
завивку дляmastuffinyostuff
. Похоже, чтоumask
это все, на что наложили руку,yodirectory
иyostuff
... чтобы обойти это, мы можем использовать подоболочку:( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
и это все. 777 завивок для йостаффа, мастуффинистука и йодиректории.
источник
вы можете использовать следующую команду для создания каталога и одновременного предоставления разрешений
источник
Не делайте этого:
mkdir -m 777 -p a/b/c
поскольку это установит разрешение777
только для последнего каталога, c; a и b будут созданы с разрешением по умолчанию из вашей umask.Вместо того, чтобы создавать любые новые каталоги с разрешениями
777
, запуститеmkdir -p
подоболочку, в которой вы переопределите umask:Обратите внимание, что это не изменит разрешения, если какие-либо из a, b и c уже существуют.
источник