Подтвердить что ты не робот

Как создать каталог и дать разрешение в одной команде

Как создать каталог и предоставить разрешение в одиночной команде в Linux?

Мне нужно создать много папки с полным разрешением 777.

Команды

mkdir path/foldername
chmod 777 path/foldername 

Мне не нравится создавать и давать разрешения в двух командах. Могу ли я сделать это по одной команде?

4b9b3361

Ответ 1

Согласно mkdir man page...

mkdir -m 777 dirname

Ответ 2

install -d -m 0777 /your/dir

должен дать вам то, что вы хотите. Имейте в виду, что каждый пользователь имеет право писать и удалять файлы в этом каталоге.

Ответ 3

Вы можете написать простую оболочку script, например:

#!/bin/bash
mkdir "$1"
chmod 777 "$1"

После сохранения и флага исполняемого файла вы можете запустить его вместо mkdir и chmod:

./scriptname path/foldername

Однако alex answer намного лучше, потому что он генерирует один процесс вместо трех. Я не знал о опции -m.

Ответ 4

IMO, лучше использовать команду install в таких ситуациях. Я пытался сделать systemd-journald постоянным при перезагрузках.

install -d  -g systemd-journal -m 2755 -v /var/log/journal

Ответ 5

Вы можете использовать следующую команду, чтобы создать каталог и дать разрешения одновременно

mkdir -m777 path/foldername 

Ответ 6

Просто чтобы расширить и улучшить некоторые из вышеперечисленных ответов:

Во-первых, я проверю man-страницу mkdir для GNU Coreutils 8.26 - он дает нам эту информацию об опциях '-m' и '-p' (также может быть задан как -mode = MODE и - родители, соответственно):

... установить [s] режим файла (как в chmod), а не a = rwx - umask

... нет ошибки, если она существует, при необходимости создайте родительские каталоги

Заявления неопределенны и неясны, на мой взгляд. Но в основном это говорит о том, что вы можете создать каталог с разрешениями, указанными "числовой нотой chmod" (восьмеричные), или вы можете пойти "по-другому" и использовать /umask.

Боковое примечание: я говорю "по-другому", так как значение umask на самом деле является именно тем, что оно звучит - маска, скрывая/удаляя разрешения, а не "предоставляя" их, как с восьмеричными обозначениями 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) маске, эффективно скрывая некоторые из этих perms". Мой umask - 022 - теперь, если мы "вычитаем" 022 из 777 (технически вычитание является излишним, а не всегда правильным - мы фактически выключаем perms или маскируем их)... мы получаем 755, как указано (или "statted" ) ранее.

Мы можем опустить "0" перед 3-значными восьмеричными (чтобы они не должны были быть 4-значными), поскольку в нашем случае мы не хотели (или, скорее, не упоминали) никаких stickybits, setuids или setgids (вы можете захотеть изучить их, кстати, они могут быть полезны, так как вы собираетесь 777). Иными словами, 0777 подразумевает (или эквивалентно) 777 (но 777 не обязательно эквивалентен 0777 - поскольку 777 задает только разрешения, а не setuids, setgids и т.д.)

Теперь, чтобы применить это к вашему вопросу в более широком смысле - у вас уже есть несколько вариантов. Все приведенные выше ответы работают (по крайней мере, по моим основным причинам). Но вы можете (или, скорее всего,) столкнуться с проблемами с вышеупомянутыми решениями, когда хотите создать подкаталоги (вложенные каталоги) с 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

Я получу perms 755 для yodirectory и yostuff, только 777 perms для mastuffinyostuff. Таким образом, кажется, что umask - это все, что удалено на yodirectory и yostuff..., чтобы обойти это, мы можем использовать подоболочку:

( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )

и что он. 777 perms для yostuff, mastuffinyostuff и yodirectory.

Ответ 7

Когда каталог уже существует:

mkdir -m 777 /path/to/your/dir

Если каталог не существует и вы хотите создать родительские каталоги:

mkdir -m 777 -p /parent/dirs/to/create/your/dir