Просто для розширення та вдосконалення деяких вищезазначених відповідей:
По-перше, я перевірю сторінку mkdir man для GNU Coreutils 8.26 - вона дає нам цю інформацію про параметри '-m' та '-p' (також може бути вказана як --mode = MODE та --parents відповідно ):
... встановити режим файлу [s] (як у chmod), а не a = rwx - umask
... немає помилок, якщо вони існують, робіть батьківські каталоги за потребою
Твердження на мій погляд нечіткі та незрозумілі. Але в основному це говорить про те, що ви можете зробити каталог з дозволами, визначеними "chmod numeric notation" (восьмеринцями), або ви можете піти "іншим шляхом" і використовувати / ваш umask.
Побічна примітка: Я кажу "в інший спосіб", оскільки значення umask - це саме те, що воно звучить - маска , приховування / видалення дозволів, а не "надання" їх, як у числових восьмеричних позначеннях chmod.
Ви можете виконати команду-вбудовану оболонку, umask
щоб побачити, що ваш 3-значний умаск; для мене це 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 (технічно вирахування є oversimplication і не завжди правильно - ми фактично відключивши завивка або маскувати їх ING) ... ми отримуємо 755 , як зазначено (або «statted» ) раніше.
Ми можемо опустити "0" перед трицифровими восьмериками (тому вони не повинні бути 4-значними), оскільки в нашому випадку ми не хотіли (а точніше не згадували) жодних липких лічильників, налаштувань чи сетгідів (ви, можливо, захочете заглянути до них, btw, вони можуть бути корисними, оскільки ви їдете 777). Іншими словами, 0777 означає (або еквівалентно) 777 (але 777 не обов'язково еквівалентно 0777 - оскільки 777 вказує лише дозволи, а не настройки, 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
Я отримаю хімічну таємницю 755
для обох yodirectory
і yostuff
, тільки 777
для хімічних речовин за mastuffinyostuff
. Таким чином, виявляється, що umask
все, що ляпає, yodirectory
і yostuff
... щоб обійти це, ми можемо використовувати нижню частину корпусу:
( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
і це все. 777 хімічних речовин для йоду, мастуфініости і йодиректорії.
mkdir temp; chmod 777 temp
- це один рядок. Ви можете зробити 'temp' змінною і зберегти її як команду bash. Це те, що ви хочете зробити?