Параметр «-p» mkdir

97

Так что это не кажется мне ужасно сложным вопросом, но я не могу найти на него ответа. Я не понимаю, что эта -pопция делает в Unix. Я использовал его для лабораторного задания при создании подкаталога, а затем еще одного подкаталога в нем. Выглядело это так:

mkdir -p cmps012m/lab1

Это частный каталог с обычными правами ( rlidwka). О, и не мог бы кто-нибудь дать небольшое объяснение того, что rlidwkaозначает? Я не новичок в Unix, но я не совсем понимаю, что это значит. Надеюсь, это не слишком расплывчатый вопрос.

пользователь3476866
источник
2
man mkdirотвечу на ваш вопрос. Что касается "rlidwka", я понятия не имею; вам нужно дать нам больше контекста.
Кейт Томпсон

Ответы:

138

Страницы руководства - лучший источник информации, который вы можете найти ... и всегда у вас под рукой: man mkdirвот что о -pпереключателе:

-p, --parents
    no error if existing, make parent directories as needed

Пример использования: предположим, я хочу создать каталоги, hello/goodbyeно их нет:

$mkdir hello/goodbye
mkdir:cannot create directory 'hello/goodbye': No such file or directory
$mkdir -p hello/goodbye
$

-pсоздал как, так helloиgoodbye

Это означает, что команда создаст все каталоги, необходимые для выполнения вашего запроса, не возвращая никаких ошибок, если этот каталог существует .

О rlidwka, у гугла очень хорошая память на аббревиатуры :). Мой поиск вернул это, например: http://www.cs.cmu.edu/~help/afs/afs_acls.html

 Directory permissions

l (lookup)
    Allows one to list the contents of a directory. It does not allow the reading of files. 
i (insert)
    Allows one to create new files in a directory or copy new files to a directory. 
d (delete)
    Allows one to remove files and sub-directories from a directory. 
a (administer)
    Allows one to change a directory's ACL. The owner of a directory can always change the ACL of a directory that s/he owns, along with the ACLs of any subdirectories in that directory. 

File permissions

r (read)
    Allows one to read the contents of file in the directory. 
w (write)
    Allows one to modify the contents of files in a directory and use chmod on them. 
k (lock)
    Allows programs to lock files in a directory. 

Следовательно rlidwkaозначает: Все разрешения включены .

Стоит отметить, как @KeithThompson указал в комментариях, что не все системы Unix поддерживают ACL. Так что, вероятно, эта rlidwkaконцепция здесь не применима.

Пауло Бу
источник
1
Но не все Unix-подобные системы поддерживают списки ACL, поэтому они rlidwkaмогут иметь или не иметь смысла.
Кейт Томпсон
1
@KeithThompson Ну, я согласен, я просто хотел упомянуть, что означает аббревиатура.
Пауло Бу
1
Да, но часто простой ответ на чей-то вопрос менее полезен, чем предоставление справочной информации, необходимой для понимания ответа.
Кейт Томпсон
1
Я укажу на это в ответе. Я просто не знал об этом. Спасибо, что поправили меня.
Пауло Бу
4
Этот ответ является наиболее подробным из возможных способов сказать «RTFM, позвольте мне погуглить это для вас», и мне это нравится. Когда-то я был новичком, который ничего не знал, и забыл об этом, прежде чем спросить своего менеджера, я должен просто погуглить. Будьте осторожны с этими новыми парнями; иногда сложно понять, что гуглить. Вы не знаете того, чего не знаете. Но после многих лет работы в Google все становятся более умелыми.
Dagrooms
4

-p|--parentбудет использоваться, если вы пытаетесь создать каталог с top-downподходом. Это создаст родительский каталог, затем дочерний и так далее, если ничего не существует.

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

Об rlidwkaэтом означает предоставление полного или административного доступа. Нашел здесь https://itservices.stanford.edu/service/afs/intro/permissions/unix .

Рахул
источник
3

mkdir [-switch] имя папки

-p это переключатель, который является необязательным, он создаст подпапку и родительскую папку, даже если родительская папка не существует.

На странице руководства:

-p, --parents no error if existing, make parent directories as needed

Пример:

mkdir -p storage/framework/{sessions,views,cache}

Это создаст сеансы подпапок, представления, кеш внутри папки фреймворка, независимо от того, был ли фреймворк доступен ранее или нет.

Амитеш Бхарти
источник
2

Обратите внимание, что -pэто аргумент в пользуmkdir конкретно команды, а не всей Unix. Каждая команда может иметь любые аргументы, которые ей нужны.

В данном случае это означает «родители», что означает mkdirсоздание каталога и всех родителей, которые еще не существуют.

IMSoP
источник
2

ПУТЬ: Ответ был дан давно, однако, возможно, более полезно думать о -p как о «Пути» (легче запомнить), поскольку в этом случае mkdir создает каждую часть пути, которой еще нет.

mkdir -p / usr / bin / comm / diff / er / забор

если / usr / bin / comm уже существует, он действует как: mkdir / usr / bin / comm / diff mkdir / usr / bin / comm / diff / er mkdir / usr / bin / comm / diff / er / забор

Как видите, это избавляет вас от необходимости печатать и думать, поскольку вам не нужно выяснять, что уже есть, а что нет.

Able Mac
источник