ฉันจะเปลี่ยนการอนุญาตไฟล์ทั้งหมดของไดเรกทอรีในคำสั่งเดียวใน Unix ได้อย่างไร
ฉันจะเปลี่ยนการอนุญาตไฟล์ทั้งหมดของไดเรกทอรีในคำสั่งเดียวใน Unix ได้อย่างไร
คำตอบ:
หากต้องการเปลี่ยนการอนุญาตในไฟล์หรือรายการไดเรกทอรีแบบเรียกซ้ำใช้chmod
คำสั่ง (ดูman chmodเพื่ออ่านเพิ่มเติมเกี่ยวกับตัวเลือกเฉพาะ):
chmod +x dir # Set a directory to be listable
chmod +x file # Set a file to be executable
ในการเปลี่ยนเจ้าของไฟล์ / ไดเรกทอรีซ้ำ (ส่งผลกระทบต่อผู้สืบทอดทั้งหมด):
chown -R username dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group
ในการเปลี่ยนสิทธิ์บิตของไฟล์ทั้งหมดในไดเรกทอรีให้ทำซ้ำ:
find dir -type f -exec chmod 644 {} ';' # make all files rw-r-r-
ในการเปลี่ยนบิตสิทธิ์ของไดเรกทอรีทั้งหมด:
find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x
มันคงจะดีถ้าคุณทำได้:
chmod -R 755 dir
อย่างไรก็ตามสิ่งนี้มีปัญหา มันถือว่าไฟล์และไดเรกทอรีเดียวกัน คำสั่งด้านบนทำให้ไดเรกทอรีสามารถฟังได้และอ่านได้โดยผู้ใช้ทุกคน แต่มันก็ทำให้ทุกไฟล์ปฏิบัติการซึ่งโดยปกติจะเป็นสิ่งที่คุณไม่ต้องการทำ
หากเราเปลี่ยนเป็น644
เราจะพบปัญหาอื่น:
$ chmod -R 644 x2
chmod: cannot access `x2/authors.html': Permission denied
chmod: cannot access `x2/day_of_week.plot': Permission denied
chmod: cannot access `x2/day_of_week.dat': Permission denied
chmod: cannot access `x2/commits_by_year.png': Permission denied
chmod: cannot access `x2/index.html': Permission denied
chmod: cannot access `x2/commits_by_year.plot': Permission denied
chmod: cannot access `x2/commits_by_year_month.plot': Permission denied
chmod: cannot access `x2/files_by_date.png': Permission denied
chmod: cannot access `x2/files.html': Permission denied
...
ปัญหาคือการ644
ดึงบิตรายการไดเรกทอรีออกและผลข้างเคียงนี้จะป้องกันการข้ามผ่านของทรีไฟล์ คุณสามารถแก้ไขปัญหานี้ได้โดยใช้sudo
แต่คุณยังคงจบลงด้วยไดเรกทอรีที่ไร้ประโยชน์อย่างสมบูรณ์สำหรับผู้ใช้ที่ไม่ใช่รูท
ประเด็นคือใช้chmod -R
งานได้ดีในบางกรณี (เช่นchmod -R g-r
) แต่ไม่ใช่ในกรณีที่คุณต้องการยุ่งกับ-x
บิตเนื่องจากทำงานกับไฟล์และไดเรกทอรีโดยไม่เลือกปฏิบัติ
644
หรือว่าเขาตั้งค่า-x
ในไดเรกทอรีที่ทั้งหมดหรือไม่ คำถามกำหนดเพียงว่าเขาต้องการเปลี่ยนสิทธิ์ไม่ใช่สิ่งที่เฉพาะเจาะจง
chmod -R go=u,go-w /dir
chmod
มีการ-R
ตั้งค่าสถานะซึ่งหมายถึงการเปลี่ยนการอนุญาตในไฟล์และไดเรกทอรีซ้ำ
คุณสามารถใช้ตัวพิมพ์ใหญ่ 'X' เพื่อทำสิ่งที่ถูกต้องสำหรับโฟลเดอร์: 'X' = "ดำเนินการ / ค้นหาเฉพาะในกรณีที่ไฟล์เป็นไดเรกทอรีหรือได้รับอนุญาตจากผู้ใช้แล้ว"
ดังนั้นเช่น: chmod -R ug = rwX, o-rwx
จะทำให้ทั้งต้นไม้สามารถเข้าถึงได้โดยเจ้าของและกลุ่มของแต่ละไฟล์และไม่สามารถเข้าถึงได้โดยบุคคลอื่น ไฟล์ที่ปฏิบัติการได้ใด ๆ จะยังคงสามารถเรียกใช้งานได้ในภายหลังและไดเรกทอรีทั้งหมดจะมี 'x' สำหรับผู้ใช้และกลุ่มและไม่ใช่สำหรับผู้อื่น
chmod -R 444 somedir
ในไดเรกทอรีที่มีไฟล์อยู่ในนั้น คุณได้รับPermission denied
เนื่องจากแฟล็ก -x กำลังถูกลบออกจากไดเร็กทอรีและจำเป็นต้องอ่านไดเร็กทอรีต่อไป
chmod -R <file permission> *
จากหน้าคนของchmod
:
-R, --recursive
change files and directories recursively
ใช้chmod
กับ-R
สวิตช์สำหรับหลายทิศทางซึ่งมีแผนผังย่อยไดเรกทอรีที่มีไฟล์หลายล้านไฟล์อยู่ภายในและคุณต้องการเปลี่ยนการอนุญาตไฟล์ของไฟล์เหล่านี้เข้าด้วยกันในครั้งเดียว
การอนุญาตให้ใช้ไฟล์อาจมีไว้สำหรับเช่น 777, 755, 644 เป็นต้น