นี่ไม่ใช่คำถามที่ซ้ำกัน
สมมติว่าฉันมี
- เส้นทางเต็ม
- ไปยังไฟล์ปกติชื่อ
target
- ที่ อาจ เป็นของ ผู้ใช้รายอื่น
- และสภาพแวดล้อมอาจถูกถอดออก (busybox ที่เปิดใช้งานน้อยมาก)
ในเชลล์สคริปต์ ฉันจะทดสอบได้อย่างไรว่าไฟล์นี้รันได้โดยเจ้าของไฟล์ ในเมื่อฉันอาจไม่ได้เป็นเจ้าของ? ลองนึกภาพว่าจุดประสงค์ของโปรแกรมของฉันคือการตรวจสอบว่าทุกอย่างเป็นไปตามนั้นหรือไม่ ตั้งค่าอย่างดีเพื่อให้สิ่งอื่นทำงานได้ (เนื่องจากสภาพแวดล้อมอาจถูกทำลายโดยผู้ใช้รายอื่น) และกำลังมองหาในไดเร็กทอรีเฉพาะเพื่อให้แน่ใจว่าเจ้าของทุกไฟล์ได้รับอนุญาตให้เรียกใช้ไฟล์ของตน
นี่เป็นบริบททางวิชาชีพ ไม่ใช่การบ้าน
วิธีแก้ปัญหาใด ๆ ที่ฉันจะใช้จำเป็นต้องครอบคลุมสภาพแวดล้อม Linux เก่าทุกประเภทที่ฉันไม่มีการตั้งค่า (ดังนั้นพวกเขาอาจ หายไป สิ่งที่คุณคาดหวังตามปกติ เช่น which
หรือตัวเลือกบางตัวใน find
เป็นต้น) .
อย่างไรก็ตาม คำถามนี้อาจมีประโยชน์สำหรับคนอื่นๆ ที่ไม่ต้องเผชิญกับข้อจำกัดดังกล่าว ดังนั้นฉันจึงขอขอบคุณโซลูชันอื่นๆ ที่ต้องใช้สภาพแวดล้อมที่สมบูรณ์หรือทันสมัยกว่านี้
[ -x "$path" ]
บอกฉันเท่านั้นว่า ฉัน สามารถดำเนินการได้หรือไม่
ls -l "$path"
และการตรวจสอบว่าอักขระตัวที่สี่คือ x
ดูเปราะบางเกินไปหรือไม่: -rwxrw-rw- 1 otheruser group 26 Jun 13 10:57 target
ls -F "$path"
และการตรวจสอบว่าลงท้ายด้วย *
ดูดีขึ้นเล็กน้อย: target*
สภาพแวดล้อมเดียวที่ฉันทดสอบนั้นคำนึงถึงว่าใครคือเจ้าของที่แท้จริง... แต่นี่ไม่รู้สึกว่าเป็นวิธีที่ดีที่สุด...
[ -x "$path" ]
นั้นเพียงพอที่จะแยกแยะได้ในทางเทคนิค ฉันคิดว่า) โปรแกรมของฉันคือเครื่องมือตรวจสอบความถูกต้อง และต้องการให้แน่ใจว่าเจ้าของไฟล์แต่ละไฟล์ในไดเร็กทอรีนั้นสามารถเรียกใช้งานได้โดยเจ้าของรายนั้น ฉันไม่คิดว่ากลุ่มจะนับเพราะฉันทิ้งสิทธิ์ผู้ใช้ในสิ่งที่ฉันเป็นเจ้าของซึ่งมีกลุ่ม (ของฉัน) และชุด x อื่น ๆ และฉันไม่สามารถดำเนินการได้ ไม่มีการบ้าน จำเป็นต้องแข็งแกร่งและจัดการกับสภาพแวดล้อม Linux ที่แปลกหรือเก่าทุกประเภท - person user1011471   schedule 14.06.2018