ฉันสับสนเกี่ยวกับการอนุญาตให้ใช้ไฟล์ไม่ทำงานตามที่คาดไว้ อาจเป็นเพราะความคาดหวังของฉันผิด อย่างไรก็ตาม:
ฉันมีไฟล์สคริปต์สำหรับความเรียบง่ายที่เรียกว่าเพียงแค่ตั้งอยู่ในs
~/bin
เพื่อประโยชน์ของตัวอย่างนี้ไฟล์มีเพียงบรรทัดต่อไปนี้:
#!/bin/zsh
echo "Test";
ง่ายมาก.
ฉันนำทางไปยัง~/bin
ไดเรกทอรีและchmod
สิทธิ์ของแฟ้มของs
การ400
- คืออ่านอย่างเดียวสำหรับฉันเท่านั้น ไม่มีสิทธิ์ดำเนินการ ดังนั้นฉันจึงพยายามรันสคริปต์โดยป้อนเส้นทางของสิ่งนี้:
% ./s
zsh: permission denied: ./s
จนถึงตอนนี้ดีมาก ไม่สามารถเรียกใช้ไฟล์ได้เนื่องจากการอนุญาตที่ไม่ถูกต้อง การกำหนดสิทธิ์การเข้าถึงให้เกิน500
(เรียกใช้การอนุญาตที่ได้รับ) จะทำงานได้ดีเช่นกัน - ด้วยการอนุญาตเหล่านี้ไฟล์จะทำงานได้ดี:
% ./s
Test
ทั้งหมดนี้เป็นไปตามที่คาดไว้ แต่ฉันก็chmod
อนุญาตให้ย้อนกลับไปที่400
(ดำเนินการอนุญาตอีกครั้ง) ลองsource
ใช้ไฟล์และสิ่งนี้เกิดขึ้น:
% source s
Test
แม้ว่าสิทธิ์จะเป็น 400
สคริปต์จะดำเนินการ
ดังนั้นนี่คือคำถามของฉัน: เหตุใดจึง./s
ล้มเหลว (เช่นควร) แต่source s
ดำเนินการตามปกติ สิ่งนี้ไม่ได้เป็นการทำลายวัตถุประสงค์ทั้งหมดของการอนุญาตให้ดำเนินการหรือไม่
ใน400
สิทธิ์sh s
และzsh s
ยังทำงาน
ฉันแน่ใจว่าฉันกำลังทำหรือเข้าใจบางสิ่งผิดปกติอย่างน่ากลัว สามารถชี้คนออกที่ให้ฉันและอธิบายความแตกต่างระหว่าง./s
, source s
, sh s
และzsh s
?