chown -R user: user. * เปลี่ยนการอนุญาตย้อนหลัง: นี่เป็นพฤติกรรมที่ถูกต้องหรือไม่?


8

ฉันได้เป็นปัญหามากเมื่อมีการเปลี่ยนแปลงได้รับอนุญาตจากโฟลเดอร์ที่อาศัยอยู่ในmyfolder /ฉันออกคำสั่ง

sudo chown -R luca:luca /myfolder/.*

/myfolderความตั้งใจของผมคือการเปลี่ยนความเป็นเจ้าของของไฟล์ทั้งหมดที่ซ่อนอยู่ใน

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

การเปลี่ยนไดเรกทอรีหลักเป็นพฤติกรรมที่ถูกต้องหรือฉันควรรายงานข้อผิดพลาดหรือไม่?

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


4
นี่คือพฤติกรรมที่ตั้งใจจะให้เป็น..แมตช์.*
Uwe Plonus

.*หมายถึงไฟล์ใด ๆ ที่ลงท้ายด้วย. *.หมายถึงไฟล์ใด ๆ ที่ขึ้นต้นด้วย.
NickTux

4
@ NikTh มันวิธีอื่น ๆ รอบ!
Uwe Plonus

วิธีปฏิบัติที่ดีที่สุดข้อหนึ่งอาจไม่/สามารถแก้ไขได้โดยตรง (การสร้างโฟลเดอร์การลบ ฯลฯ ) เว้นแต่จำเป็นที่สุด (เปิดคำถามสำหรับสิ่งที่คุณต้องการบรรลุ) นอกจากนี้ยังเป็นสิ่งที่อันตรายหากใช้ wildcard + สิทธิพิเศษรูทเพราะบ่อยครั้งที่คุณไม่แน่ใจ 100% ว่าสิ่งที่ได้รับผลกระทบจากไวด์การ์ด
edwin

1
@LucaCerone มันเกี่ยวข้องchmodและchownเป็นคำสั่งที่คล้ายกันซึ่งเริ่มต้นด้วยchประกอบด้วยoและมีตัวอักษรอื่นที่คล้ายกันอีกสองตัว ( nและm) </ อักษร> [cmd] -R [mode or user] [one or more files]อย่างจริงจังพวกเขาทั้งสองรูปแบบ: โซลูชันบางอย่างที่นำเสนอในคำถามนั้นใช้ได้กับกรณีของคุณเช่นกันตัวอย่างเช่นจาก Sean Reifschneider (ตรงกลาง) คำตอบนี้ใช้ได้กับไฟล์ที่ซ่อนเท่านั้นโดยการลบรูปแบบ glob สำหรับไฟล์ที่ไม่ได้ซ่อนไว้
Lekensteyn

คำตอบ:


5

จำไว้ว่าบรรทัดคำสั่งถูกขยาย (ตีความ) โดยเชลล์ก่อนที่จะถูกดำเนินการ

sudo chown -R luca:luca /myfolder/.*

ถูกตีความก่อนเป็น:

sudo chown -R luca:luca /myfolder/.  /myfolder/.. /myfolder/.adobe  /myfolder/.bash_history

จดบันทึก/myfolder/..ในบรรทัดคำสั่งของคุณ

chown -R luca:luca /myfolder/..เทียบเท่ากับ chown -R luca:luca /
ที่ทำให้ chown ทำงาน "ย้อนกลับ"

ใช้echo /myfolder/.*เมื่อคุณใช้ "*" เพื่อยืนยัน


@Emmanuel: ทำไมคุณจะใช้ xargs และค้นหาเมื่อตัวเลือก -R เพียงพอหรือไม่
มกราคม

@Emmanuel: ขอบคุณ! คุณสามารถขยายเล็กน้อยเกี่ยวกับ find และ xargs ได้หรือไม่?
lucacerone

@LucaCerone ผมไม่แน่ใจว่าเหตุผลที่คุณได้รับการยอมรับคนนี้ก็ซ้ำเปลี่ยนแปลงทุก/myfolderไฟล์ใน findคำสั่งเป็นฟุ่มเฟือยและแบ่งกับชื่อไฟล์ที่มีช่องว่าง (หากคุณต้องการเปลี่ยนไฟล์ซ้ำfind /myfolder | xargs chown luca:lucaจะคล้ายกับchown -R luca:luca /myfolder)
Lekensteyn

Lekensteyn ถูกต้องฉันลืม grep ^
Emmanuel

@Lekensteyn ฉันเปลี่ยนการค้นหาไม่ให้ตรงกับพื้นที่
Emmanuel

4

ดี. บรรทัดคำสั่งในฐานะรูทนั้นทรงพลังมาก อ่านคลาสสิกเหล่านี้บางส่วน และใช่การ.*จับคู่กับ..เป็นสิ่งที่ตั้งใจไว้ Dot ไม่ใช่ตัวละครพิเศษ มันเป็นแบบแผน ตามแบบแผนไฟล์ที่ขึ้นต้นด้วยจุดจะถูกซ่อนจากมุมมองเริ่มต้นเมื่อแสดงรายการไดเรกทอรี - ไม่น้อยและไม่มีอะไรเพิ่มเติม โดยการประชุม inode ที่นำไปสู่ไดเรกทอรีปัจจุบันจะได้รับ.ชื่อและ inode ที่นำไปสู่ไดเรกทอรีหลักได้รับ..ชื่อ

สิ่งที่คุณควรทำคือ

chown -R luca:luca /myfolder

ฉันพูดถึงว่าไม่มีอะไรพิเศษเกี่ยวกับชื่อไฟล์ที่ขึ้นต้นด้วยจุดหรือไม่? การเรียกซ้ำchownไม่คิดอย่างนั้น

ตอนนี้คุณอาจสามารถช่วยเหลือบางส่วนของฟังก์ชั่นโดยเปลี่ยนความเป็นเจ้าของกลับเป็นรูท ในระยะยาวคุณอาจต้องติดตั้งระบบใหม่

ตามกฎทั่วไป:

  1. หลีกเลี่ยงการทำงานเป็นราก
  2. หากคุณทำงานเป็น root ให้อ่านแต่ละคำสั่งสองครั้งก่อนกด Enter
  3. หากคุณไม่แน่ใจเกี่ยวกับการขยายลองครั้งแรกด้วยคำสั่ง "ปลอดภัย" (เช่นecho .*)
  4. อย่าทำงานเหมือนรูท
  5. มีหลายงานที่สามารถทำได้อย่างปลอดภัยโดยใช้ส่วนต่อประสานกราฟิก (ปัญหาของคุณคือตัวอย่างของงานดังกล่าว)
  6. ฉันพูดถึงว่าคุณควรหลีกเลี่ยงการใช้บัญชีรูท?

ฉันไม่ได้ต้องการที่จะเปลี่ยนความเป็นเจ้าของของไฟล์ทั้งหมดในโฟลเดอร์ ... เพียงไฟล์ที่ซ่อนอยู่ ..
lucacerone

2
ตกลงฉันไม่ดีแล้ว ในกรณีที่chown -R luca:luca /myfolder/.[^.]*ผมคิดว่า
มกราคม

2
echo .*เป็นวิธีที่ดีในการลองใช้การขยายตัว มันจะแสดงให้คุณเห็นสิ่งที่เปลือกหอยเห็น ls .*อาจทำให้สับสนมากกว่านี้เพราะจะลงไดเรคทอรี ( ls -d .*อาจจะดีกว่า แต่ก็ใช้ได้เช่นกันecho .*)
Robie Basak

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