ตัวเลือก“ -p” ของ mkdir


100

ดูเหมือนจะไม่ใช่คำถามที่ซับซ้อนเท่าที่ฉันมี แต่เป็นคำถามที่ฉันไม่สามารถหาคำตอบได้ ฉันสับสนเกี่ยวกับสิ่งที่-pตัวเลือกทำใน Unix ฉันใช้มันสำหรับการกำหนดห้องปฏิบัติการในขณะที่สร้างไดเร็กทอรีย่อยและไดเร็กทอรีย่อยอื่นภายในไดเร็กทอรีนั้น ดูเหมือนว่า:

mkdir -p cmps012m/lab1

สิ่งนี้อยู่ในไดเร็กทอรีส่วนตัวที่มีสิทธิปกติ ( rlidwka) อ้อแล้วจะมีใครช่วยอธิบายหน่อยว่าrlidwkaหมายถึงอะไร? ฉันไม่ใช่ noob ทั้งหมดของ Unix แต่ฉันไม่ค่อยคุ้นเคยกับความหมายนี้ หวังว่าคำถามจะไม่คลุมเครือเกินไป


2
man mkdirจะตอบคำถามของคุณ สำหรับ "rlidwka" ฉันไม่รู้; คุณจะต้องให้บริบทเพิ่มเติมแก่เรา
Keith Thompson

คำตอบ:


146

หน้าคนเป็นแหล่งข้อมูลที่ดีที่สุดที่คุณสามารถค้นหา ... และอยู่ใกล้แค่ปลายนิ้วของคุณ: 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

ซึ่งหมายความว่าคำสั่งจะสร้างทุกไดเรกทอรีที่จำเป็นเพื่อตอบสนองคำขอของคุณไม่กลับข้อผิดพลาดใด ๆ ในกรณีที่ว่าไดเรกทอรีที่มีอยู่

เกี่ยวกับrlidwkaGoogle มีหน่วยความจำที่ดีมากสำหรับคำย่อ :) การค้นหาของฉันส่งคืนสิ่งนี้เช่น: 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อาจมีความหมายหรือไม่ก็ได้
Keith Thompson

1
@KeithThompson ฉันเห็นด้วยฉันแค่อยากพูดถึงสิ่งที่ย่อมาจาก
Paulo Bu

1
ใช่ แต่การตอบคำถามของใครบางคนมักจะมีประโยชน์น้อยกว่าการให้ข้อมูลพื้นฐานที่จำเป็นในการทำความเข้าใจคำตอบ
Keith Thompson

1
ฉันจะชี้ให้เห็นในคำตอบ ฉันไม่ทราบเรื่องนี้ ขอบคุณที่แก้ไขฉัน
Paulo Bu

4
คำตอบนี้เป็นวิธีที่ละเอียดที่สุดเท่าที่จะเป็นไปได้ในการพูดว่า "RTFM ให้ฉันเป็น Google สำหรับคุณ" และฉันก็ชอบมัน ครั้งหนึ่งฉันเคยเป็นเด็กฝึกหัด noobie ที่ไม่รู้อะไรเลยและลืมไปว่าก่อนที่จะถามผู้จัดการฉันควรจะเปิด Google ไปง่าย ๆ กับคนใหม่เหล่านี้ บางครั้งก็ยากที่จะคิดออกว่าจะทำอย่างไรกับ Google คุณไม่รู้ในสิ่งที่คุณไม่รู้ แต่ทุกคนมีทักษะในการ Googling มากขึ้นหลังจากทำมาหลายปี
Dagrooms

4

mkdir [-switch] ชื่อพับ

-p เป็นสวิตช์ซึ่งเป็นทางเลือกโดยจะสร้างโฟลเดอร์ย่อยและโฟลเดอร์หลักเช่นกันแม้ไม่มีโฟลเดอร์หลัก

จากหน้าคน:

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

ตัวอย่าง:

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

สิ่งนี้จะสร้างเซสชันโฟลเดอร์ย่อยมุมมองแคชภายในโฟลเดอร์เฟรมเวิร์กโดยไม่คำนึงว่า "เฟรมเวิร์ก" จะพร้อมใช้งานก่อนหน้านี้หรือไม่


4

-p|--parentจะถูกใช้หากคุณพยายามสร้างไดเร็กทอรีด้วยtop-downวิธีการ ซึ่งจะสร้างไดเร็กทอรีพาเรนต์จากนั้นชายด์และอื่น ๆ iff ไม่มีอยู่

-p, --parents ไม่มีข้อผิดพลาดหากมีอยู่ให้สร้างไดเร็กทอรีหลักตามต้องการ

เกี่ยวกับเรื่องrlidwkaนี้หมายถึงการให้สิทธิ์การเข้าถึงแบบเต็มหรือระดับผู้ดูแลระบบ พบได้ที่นี่https://itservices.stanford.edu/service/afs/intro/permissions/unix


2

โปรดทราบว่า-pเป็นอาร์กิวเมนต์สำหรับmkdirคำสั่งโดยเฉพาะไม่ใช่ Unix ทั้งหมด ทุกคำสั่งสามารถมีอาร์กิวเมนต์ที่ต้องการได้

ในกรณีนี้หมายถึง "ผู้ปกครอง" ซึ่งหมายความว่าmkdirจะสร้างไดเร็กทอรีและผู้ปกครองที่ไม่มีอยู่แล้ว


2

PATH: ตอบเมื่อนานมาแล้วอย่างไรก็ตามการคิดว่า -p เป็น "Path" (จำได้ง่ายขึ้น) อาจเป็นประโยชน์มากกว่าเนื่องจากทำให้ 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 / fence

อย่างที่คุณเห็นมันช่วยให้คุณประหยัดเวลาในการพิมพ์และการคิดได้เล็กน้อยเนื่องจากคุณไม่จำเป็นต้องคิดว่ามีอะไรอยู่แล้วและสิ่งที่ไม่มี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.