chmod: การลบการอนุญาต“ x” ซ้ำซาก borks สิทธิ์ทั้งหมด


1

ฉันมีโฟลเดอร์ที่มีเนื้อหาบางอย่าง (สามไฟล์และโฟลเดอร์) ที่มีลักษณะดังนี้:

-rwxr-xr-x 1 max max 14504 2011-05-31 16:55 main.css
-rwxr-xr-x 1 max max  2504 2011-05-31 16:55 reset.css
-rwxr-xr-x 1 max max   916 2011-05-31 16:55 scaffold.css
drwxrwxr-x 3 max max  4096 2011-05-31 16:55 ui-lightness

ฉันต้องการเพิ่มการเขียนกลุ่มลงในพวกเขาทั้งหมดและลบสถานะที่สามารถใช้งานได้สำหรับผู้ใช้ทั้งหมด ฉันทำไฟล์ก่อน:

$ chmod g+w main.css reset.css scaffold.css 
$ chmod a-x main.css reset.css scaffold.css 
$ ls -l
total 28
-rw-rw-r-- 1 max max 14504 2011-05-31 16:55 main.css
-rw-rw-r-- 1 max max  2504 2011-05-31 16:55 reset.css
-rw-rw-r-- 1 max max   916 2011-05-31 16:55 scaffold.css
drwxrwxr-x 3 max max  4096 2011-05-31 16:55 ui-lightness

จนถึงตอนนี้ดีมาก ตอนนี้โฟลเดอร์ ui-lightness มีการเขียนเป็นกลุ่มอยู่แล้วดังนั้นฉันแค่ต้องการลบสถานะ exe ออกจากมันรวมถึงไฟล์และโฟลเดอร์ย่อยทั้งหมดภายใน

$ ls -l ui-lightness/
total 40
drwxrwxr-x 2 max max  4096 2011-05-31 16:55 images
-rwxrwxr-x 1 max max 34146 2011-05-31 16:55 jquery-ui-1.8.11.custom.css

$ chmod -R a-x ui-lightness/
chmod: cannot access `ui-lightness/jquery-ui-1.8.11.custom.css': Permission denied
chmod: cannot access `ui-lightness/images': Permission denied

$ ls -l ui-lightness/
ls: cannot access ui-lightness/jquery-ui-1.8.11.custom.css: Permission denied
ls: cannot access ui-lightness/images: Permission denied
total 0
d????????? ? ? ? ?                ? images
-????????? ? ? ? ?                ? jquery-ui-1.8.11.custom.css
$ 

สัญชาตญาณแรกของฉันคือการตื่นตระหนก แต่การเพิ่มสถานะ x กลับมาแก้ไขได้!

$ chmod -R a+x ui-lightness/

$ ls -l ui-lightness/
total 40
drwxrwxr-x 2 max max  4096 2011-05-31 16:55 images
-rwxrwxr-x 1 max max 34146 2011-05-31 16:55 jquery-ui-1.8.11.custom.css

ใครสามารถอธิบายสิ่งที่เกิดขึ้นที่นี่ และฉันจะลบสถานะที่ปฏิบัติการได้โดยไม่ต้อง borking ทุกอย่างได้อย่างไร นี่คือใน Ubuntu 9.10 ในกรณีที่มีความเกี่ยวข้อง

เสียงเชียร์สูงสุด

คำตอบ:


8

พารามิเตอร์แรกของ chmod แบบเรียกซ้ำของคุณคือไดเร็กทอรีเอง คุณลบ x บิตในไดเรกทอรีทำให้ไม่สามารถค้นหาได้อีก (นั่นคือสิ่งที่ x บิตทำกับไดเรกทอรี) จากนั้นโปรแกรม chmod ไม่สามารถค้นหาในไดเรกทอรีนั้นและคุณได้รับข้อผิดพลาดการอนุญาต ลองทำสิ่งต่อไปนี้แทน

chmod -R a-x ui-lightness/*

ahhh - ดังนั้นไดเรกทอรีต้องมีคุณสมบัติ x แล้ว? ผมไม่ทราบว่า. ขอบคุณ!
Max Williams

แต่ถ้าเป็นเช่นนั้น chmod -R a-x ui-lightness/*และมีอีกตำบลหนึ่งในนั้น ที่ subdir จะได้รับ borked ใช่ไหม
Max Williams

5
ใช่. คุณควรจะใช้จริงๆ find . -type f -exec chmod -x {} \; เพื่อเลือกไฟล์ปกติเท่านั้น
Keith

8

หากต้องการลบสถานะที่สามารถใช้งานได้สำหรับไฟล์เท่านั้นให้ใช้:

$ chmod -R a-x+X ui-lightness/

+X ตัวเลือกที่กำหนดไว้ (ดู man chmod ) ถึง:

  • ตั้งค่าอนุญาตให้เรียกใช้งานก็ต่อเมื่อไฟล์นั้นเป็นไดเรกทอรีหรือมีสิทธิ์ดำเนินการสำหรับผู้ใช้บางคนแล้ว

ดังนั้นตัวพิมพ์เล็ก -x ตัวเลือกแรกจะลบสถานะที่สามารถใช้งานได้จากไฟล์ทั้งหมด (และไดเรกทอรี) จากนั้นจึงเป็นตัวพิมพ์ใหญ่ +X ตัวเลือกชุดมันกลับเฉพาะสำหรับไดเรกทอรี

มีข้อเสียเปรียบเล็กน้อยหนึ่งข้อ: ตั้งค่าสถานะที่สามารถใช้งานได้เป็น ทั้งหมด ไดเรกทอรีย่อยแม้กระทั่งรายการที่ไม่ได้ตั้งค่าไว้ก่อนหน้า chmod การภาวนา หากนั่นไม่ใช่สิ่งที่คุณต้องการเพียงใช้ Keith's find สารละลาย.


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