คัดลอกการอนุญาตของเจ้าของไฟล์ไปยังการอนุญาตกลุ่ม


25

ฉันจะคัดลอกสิทธิ์ผู้ใช้ / เจ้าของไฟล์ไปยังสิทธิ์กลุ่มได้อย่างไร

เช่นหากการอนุญาตคือ 755 ฉันต้องการให้เป็น 775

การชี้แจง: 755 -> 775 123 -> 113 abc -> aac

โบนัสถ้าฉันสามารถทำสิ่งนี้ซ้ำสำหรับไฟล์ทั้งหมดในไดเรกทอรี

(นั่นคือสำหรับทุกไฟล์สิทธิ์ของตัวเองจะถูกคัดลอกไปยังสิทธิ์กลุ่มแต่ละไฟล์อาจมีสิทธิ์ที่แตกต่างกัน)


ฉันไม่แน่ใจที่จะเข้าใจ คุณต้องการเปลี่ยนสิทธิ์ในไดเรกทอรี / ไฟล์เพื่อให้สิทธิ์กลุ่มเป็นเหมือนเจ้าของหรือไม่ ถ้าเป็นเช่นนั้นเพียงแค่เล่นกับ chmod ฉันสามารถแสดงตัวอย่างที่ชัดเจนมากขึ้นในคำตอบของฉันหากคุณต้องการ
Anarko_Bizounours

ในคำตอบของคุณมันจะเปลี่ยนไฟล์ทั้งหมดเป็น 775 จะเกิดอะไรขึ้นถ้าไฟล์ใดไฟล์หนึ่งมีสิทธิ์ 123 เดิม? จากนั้นจะต้องเปลี่ยนเป็น 113 และไม่ใช่ 775 สิทธิ์ที่ฉันใช้ในคำถาม (755) เป็นเพียงตัวอย่างเท่านั้นสิทธิ์จริงอาจเป็นอะไรก็ได้ ฉันต้องการทำสิ่งนี้โดยทางโปรแกรม
Annan

หมายเลขหลังจาก chmod เป็นเพียงการอนุญาตเชิงตัวเลข หากคุณทำ ls -l และคุณได้รับสิทธิ์เป็น 452 ให้ไปที่ chmod 442 / you_directory / ทุกอย่างมีการอธิบาย (ดีมาก) ในหน้าวิกิพีเดียฉันเชื่อมโยงกับคำตอบของฉัน
Anarko_Bizounours

สิ่งนี้ดูเหมือนจะเป็นคำถามซ้ำกันของ serverfault.com/questions/241082/…
ShoeLace

คำตอบ:


54

คุณสามารถใช้g=uเพื่อทำให้กลุ่ม perms เหมือนกับผู้ใช้ perms

ls -l file
-rw------- 1 user users 0 Jun 27 13:47 file

chmod g=u file

ls -l file
-rw-rw---- 1 user users 0 Jun 27 13:47 file

และวนซ้ำ

chmod -R g=u *

หรือสำหรับบาง filespec

find /patch/to/change/perms -name '*.txt' -exec chmod g=u {} +

manpage chmodเป็นเพื่อนของคุณ


วิธีที่ดีที่จะทำ! ฉันลืมเคล็ดลับนี้ทุกครั้งที่ xD
Anarko_Bizounours

ไม่เคยได้ยินเคล็ดลับนี้! มีประโยชน์อย่างใดอย่างหนึ่ง
skinp

g=uเคล็ดลับนั้นช่วยประหยัดเวลาของการจัดการที่น่าเบื่อ มี +1 ;-)
Edurne Pascual

ฉันมีไฟล์เป็นของผู้ใช้ที่ฉันต้องการแชร์กับผู้ใช้ทั้งหมด ดังนั้นฉันจึงchmod -R ag=u ${path_to_directory}
เทรเวอร์บอยด์สมิ ธ

2

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

ไฟล์ / usr / bin / otog:

#!/bin/sh

f=$1
p=`stat -c "%a" $f`
chmod ${p:0:1}${p:0:1}${p:2:1} $f

ตัวอย่างการใช้งาน:

find . -exec otog {} \;

ใช้สถิติเพื่อรับการอนุญาตเชิงตัวเลขใช้chmodเพื่อเปลี่ยนการอนุญาต

PS: โปรดดูคำตอบของ Iain สำหรับวิธีที่ดีกว่าในการทำเช่นนี้!


1
ไม่ควรเป็น $ {p: 0: 1} $ {p: 0: 1} $ {p: 2: 1}
minaev

ใช่แล้วคุณล่ะ มันก็ใช้วิธีของฉันเหมือนกัน
Annan

มีคนช่วยอธิบาย downvote บ้างมั้ย
Annan

ไม่ใช่ฉัน แต่ฉันต้องการชดเชย นี่เป็นทางออกที่ดีที่ใช้งานได้
minaev

1
ฉันว่ามันปลอดภัยกว่าที่จะใช้คำสั่งที่เป็นอันตรายในสคริปต์มากกว่าด้วยตนเอง ในสคริปต์ที่ผ่านการทดสอบอย่างดีนั่นคือ :) ในทางกลับกันการchmodห่างไกลจากคำสั่งที่อันตรายจริงๆ เปรียบเทียบกับrmฉันหมายถึงrsync --deleteหรืออื่น ๆ
minaev

1

ก่อนอื่นคุณต้องแสดงสิทธิ์ของคุณ

ls -l /your_directory/
-rwxr-xr-x  1   57 Jul  3 10:13  file1
-rwxr-xr-x  1   57 Jul  3 10:13  file2

เพื่อแปลผลลัพธ์ในการอนุญาตให้ใช้ตัวเลข: R = 4, W = 2, X = 1

ดังนั้นใน 2 ไฟล์นี้การอนุญาตคือ 755

หลังจากได้รับสิทธิของคุณคุณต้องใช้คำสั่ง chmod เพื่อเปลี่ยนวิธีที่คุณต้องการ:

chmod 775 /your_directory/

คำสั่งนี้จะเปลี่ยนเฉพาะสิทธิ์ในไดเรกทอรี แต่ไม่ได้อยู่ในไฟล์ภายใน

หากคุณต้องการเปลี่ยนด้านขวาด้วยให้ทำคำสั่งนี้:

chmod 775 /your_directory/ -fR

-fR จะบังคับให้ทำซ้ำ (ใช้เฉพาะในกรณีที่คุณมั่นใจในสิทธิที่คุณต้องการใช้และไฟล์ในไดเรกทอรี)

หากคุณต้องการเปลี่ยนสิทธิ์ใน file1 เท่านั้น:

chmod 775 /your_directory/file1

และนั่นเป็นวิธีที่คุกกี้แตก!

/! \ ระวังการใช้คำสั่งนี้ในทางที่ผิดสามารถทำลายสิทธิ์ระบบปฏิบัติการทั้งหมดของคุณและนำไปสู่การทำงานผิดพลาดของมัน /! \

ps: ดูที่นั่นเพื่อหาข้อมูลเพิ่มเติมเกี่ยวกับ chmod

หวังว่านี่จะช่วยคุณได้


ฉันได้เพิ่มความกระจ่างให้กับคำถาม ไฟล์อาจไม่ได้รับการอนุญาตจากเจ้าของเหมือนกันดังนั้นหากจะใช้ chmod ต้องมีวิธีการแยกสิทธิ์การอนุญาตก่อนที่จะส่งไปยัง chmod?
Annan

มันยุ่งยาก แต่คำสั่ง ls -l จะต้องให้สิทธิ์กับคุณ แต่มันจะอยู่ในรูปแบบนี้ -rw-rw-r-- ปัญหาคือคุณจะต้องไม่ใช้สคริปต์เพื่อทำงานกับ chmod! คุณต้องได้รับอนุญาตจากไฟล์ก่อน จากนั้น chmod จะมีสิทธิที่ดีสำหรับกลุ่ม ฉันจะแก้ไขคำตอบเพื่อแสดงตัวอย่าง
Anarko_Bizounours
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.