เปลี่ยนสิทธิ์ไฟล์และโฟลเดอร์ทั้งหมดของไดเรกทอรีเป็น 644/755


184

ฉันจะเปลี่ยนไฟล์ทั้งหมดเป็น 644 และโฟลเดอร์ทั้งหมดเป็น 755 โดยใช้chmodจากlinuxพรอมต์คำสั่งได้อย่างไร (เทอร์มิ)


6
หากใครบางคน (@animuson) จะใจดีมากที่จะอธิบายฉันทำไมคำถาม chmod นี้เป็นนอกหัวข้อและอื่น ๆ ทั้งหมด (14,438 ผล) ที่นี่ไม่ได้ ...
hugo der hungrige

สายเล็ก ๆ น้อย ๆ แต่คำสั่งนี้จะทำคำตอบที่ยอมรับในนัดเดียว: chmod -R a = r, + X, u + w / ของคุณ / เส้นทาง
MichaelICE

เป็นคำถามที่ดีไม่สมควรปิดตัวลง สิ่งเหล่านี้ควรถูกย้ายไปยังไซต์ย่อยของ stackoverflow แทนที่จะปิด
Erik Friesen

1
@hugoderhungrige หมายถึงไปถามบนเว็บไซต์เซิร์ฟเวอร์เช่นhttp://superuser.com: P แต่คำถามนี้ช่วยฉันที่นี่ขอบคุณ
รู้สึก

3
คำตอบสั้น ๆ :chmod -R u+rwX,go+rX,go-w /foo
kenorb

คำตอบ:


345

วิธีการหนึ่งอาจใช้ find:

สำหรับไดเรกทอรี

find /desired_location -type d -print0 | xargs -0 chmod 0755

สำหรับไฟล์

find /desired_location -type f -print0 | xargs -0 chmod 0644

21
เพียงเพื่อคนอื่นเช่นฉันนี้ไม่ทำงานแทนลองsudo find /your/location -type f -exec chmod 644 {} \;ใช้ไฟล์และsudo find /your/location -type d -exec chmod 755 {} \;ไดเรกทอรี
NineCattoRules

ฉันใช้โซลูชันดั้งเดิมและทำให้สิทธิ์ของฉันในไฟล์และไดเรกทอรีแย่ลง ระวัง! การแก้ปัญหาในความคิดเห็นทำงานขอบคุณ!
Mahsa Mortazavi

3
ทำไม (?) มันเป็นถ้ำที่ดีกว่าchmod -R a=r,u+w,a+X /foo?
Peter Krauss

ล้มเหลวด้วยunable to execute /bin/chmod: Argument list too long
vladkras

จะเกิดอะไรขึ้นถ้าฉันต้องการเฉพาะโฟลเดอร์ย่อยให้เป็น chmod 755 เมื่อระบุต้องการ เพราะสิ่งนี้จะทำให้โฟลเดอร์หลัก 755
MaXi32

105

วิธีที่ง่ายที่สุดคือทำ:

chmod -R u+rwX,go+rX,go-w /path/to/dir

ซึ่งโดยทั่วไปหมายถึง:

เพื่อchange ไฟล์modes -Recursively โดยให้:

  • user: rอี๊ดwพิธีกรรมและอีX ecute
  • group และoผู้ใช้: read และ e Xecute สิทธิ์ แต่ไม่ได้-wรับอนุญาตพิธี

โปรดทราบว่าXจะทำให้ไดเรกทอรีที่ใช้งานได้ แต่ไม่ใช่ไฟล์เว้นแต่ว่าจะสามารถค้นหาได้ / ปฏิบัติการได้

+X - ทำให้ทุกคนในไดเรกทอรีหรือไฟล์สามารถค้นหา / เรียกใช้งานได้ถ้าทุกคนสามารถค้นหาได้ / ปฏิบัติการได้

โปรดตรวจสอบman chmodรายละเอียดเพิ่มเติม

ดูเพิ่มเติม: วิธีการ chmod ไดเรกทอรีทั้งหมดยกเว้นไฟล์ (ซ้ำ)? ที่ SU


7
chmod -R a = r, u + w, a + X / foo
John Allsup

9
คำตอบนี้ในขณะที่เรียบร้อยมีปัญหา: ไฟล์ที่สามารถเรียกใช้งานได้ก่อนที่จะรันคำสั่งจะสามารถใช้งานได้ในภายหลัง ดูคำตอบของ @JohnAllsup สำหรับคำสั่งที่ไม่มีข้อบกพร่องนี้
mzuther

4
@mzuther ยกเว้นว่าปัญหานี้เป็นคุณลักษณะสำหรับคุณ
จริงๆ

37

สิ่งที่สั้นที่สุดที่ฉันสามารถทำได้คือ:

chmod -R a=r,u+w,a+X /foo

ซึ่งทำงานบน GNU / Linux และฉันเชื่อว่า Posix โดยทั่วไป (จากการอ่านของฉัน: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html )

สิ่งนี้คือ:

  1. ตั้งค่าไฟล์ / ไดเรกทอรีเป็น r__r__r__ (0444)
  2. เพิ่ม w สำหรับเจ้าของเพื่อรับ rw_r__r__ (0644)
  3. ตั้งค่าการดำเนินการทั้งหมดหากไดเรกทอรี (0755 สำหรับ dir, 0644 สำหรับไฟล์)

ที่สำคัญสิทธิ์ขั้นตอนที่ 1 จะล้างบิตเรียกใช้ทั้งหมดดังนั้นขั้นตอนที่ 3 จะเพิ่มบิตเรียกใช้กลับสำหรับไดเรกทอรีเท่านั้น (ไม่ต้องใช้ไฟล์) นอกจากนี้ทั้งสามขั้นตอนจะเกิดขึ้นก่อนที่ไดเรกทอรีจะถูกเรียกใช้ซ้ำ (ดังนั้นสิ่งนี้จึงไม่เทียบเท่ากับเช่น

chmod -R a=r /foo
chmod -R u+w /foo
chmod -R a+X /foo

เนื่องจาก a = r ลบ x ออกจากไดเรกทอรีดังนั้น chmod จึงไม่สามารถเรียกคืนเข้าไปได้)


! สดใส ช่วยฉันได้มาก
Jannie Theunissen

13

ง่ายที่สุดสำหรับฉันที่จะจำคือการดำเนินการสอง

chmod -R 644 dirName
chmod -R +X dirName

เครื่องหมาย + X มีผลกับไดเรกทอรีเท่านั้น


1
ง่ายและปลอดภัยที่สุด
Marco Marsala

12

ใน https://help.directadmin.com/item.php?id=589พวกเขาเขียน:

หากคุณต้องการวิธีที่รวดเร็วในการรีเซ็ตข้อมูล public_html ของคุณเป็น 755 สำหรับไดเรกทอรีและ 644 สำหรับไฟล์คุณสามารถใช้สิ่งต่อไปนี้:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

ฉันทดสอบแล้ว ... มันใช้งานได้!


ช่วยชีวิต! ขอบคุณสำหรับวิธีแก้ปัญหาที่สะอาดสำหรับปัญหานี้! ทำงานให้ฉันเมื่อต้องแก้ไขปัญหาการอนุญาตสำหรับการติดตั้ง WordPress!
twknab

ทำงานได้ดีเพื่อทำการปรับเปลี่ยนภายในไดเรกทอรี
Christian Berendt

8

สิ่งนี้ใช้ได้กับฉัน:

find /A -type d -exec chmod 0755 {} \;
find /A -type f -exec chmod 0644 {} \;

3
ระวัง: คำสั่งเหล่านี้จะไม่จัดการไฟล์หรือไดเรกทอรีที่มีช่องว่างในชื่อ คำสั่งในคำตอบที่ยอมรับจะ
Chad Nouis

1
ข้อแม้นี้ใช้เฉพาะถ้า {} ไม่ได้ล้อมรอบด้วยคำพูด ... ดังนั้นจึงไม่มีเหตุผลที่จะเล่นกับ print0 และ xargs -0, พอเพียงต่อไปนี้:find /A -type X -exec chmod Y '{}' \;
Michael Stumpfl

6

ทำทั้งสองอย่างในครั้งเดียวด้วย:

find -type f ... -o -type d ...

เช่นเดียวกับในค้นหาประเภท f หรือพิมพ์ d และทำ ... แรกสำหรับไฟล์และที่สอง ... สำหรับ dirs โดยเฉพาะ:

find -type f -exec chmod --changes 644 {} + -o -type d -exec chmod --changes 755 {} +

ออก--changesหากคุณต้องการให้มันทำงานอย่างเงียบ ๆ


2

หากคุณต้องการวิธีที่รวดเร็วในการรีเซ็ตข้อมูล public_html ของคุณเป็น 755 สำหรับไดเรกทอรีและ 644 สำหรับไฟล์คุณสามารถใช้สิ่งต่อไปนี้:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

นอกจากนี้หากคุณรู้ว่า PHP ทำงานในฐานะผู้ใช้และไม่ใช่ "apache" คุณสามารถตั้งค่าไฟล์ PHP เป็น 600 เพื่อความปลอดภัยในระดับสูงเช่น:

find . -type f -name '*.php' -exec chmod 600 {} \;

คุณสามารถค้นหาแหล่งข้อมูลนี้ได้ที่นี่: https://help.directadmin.com/item.php?id=589


-9

สิ่งนี้สามารถทำงานได้ด้วย:

chmod -R 755 *  // All files and folders to 755.

chmod -R 644 *.*  // All files will be 644.

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