คุณglen
เป็นเจ้าของไดเรกทอรี (ดู.
ไฟล์ในรายชื่อของคุณ) ไดเรกทอรีเป็นเพียงรายการไฟล์และคุณได้รับอนุญาตให้แก้ไขรายการนี้ (เช่นเพิ่มไฟล์ลบไฟล์เปลี่ยนความเป็นเจ้าของเพื่อให้เป็นของคุณอีกครั้งเป็นต้น) คุณอาจไม่สามารถแก้ไขเนื้อหาของไฟล์ได้โดยตรง แต่คุณสามารถอ่านและยกเลิกการเชื่อมโยง (ลบ) ไฟล์โดยรวมและเพิ่มไฟล์ใหม่ได้ในภายหลัง 1 เป็นพยานเฉพาะก่อนและหลังสิ่งนี้อาจมีลักษณะเหมือนไฟล์ที่มีการเปลี่ยนแปลง
เสียงเรียกใช้ไฟล์แลกเปลี่ยนและไฟล์ย้ายไปรอบ ๆ ใต้น้ำเพื่อที่จะอธิบายว่าทำไมมันดูเหมือนว่าจะเขียนถึงไฟล์เดียวกันกับที่คุณทำในเปลือกของคุณ แต่มันไม่ได้เป็นสิ่งเดียวกัน 2
ดังนั้นสิ่งที่ Vim ทำลงมาถึงสิ่งนี้:
cat temp > .temp.swp # copy file by contents into a new glen-owned file
echo nope >> .temp.swp # or other command to alter the new file
rm temp && mv .temp.swp temp # move temporary swap file back
1 นี่เป็นข้อแตกต่างที่สำคัญในการจัดการสิทธิ์การใช้ไฟล์ระหว่าง Windows และ Unices ใน Windows มักจะไม่สามารถลบไฟล์ที่คุณไม่ได้รับอนุญาตให้เขียนได้
2 update: ดังที่ระบุไว้ในความคิดเห็น, Vim ไม่ได้ทำเช่นนี้ในการเปลี่ยนความเป็นเจ้าของเนื่องจากหมายเลข inode บนtemp
ไฟล์จะไม่เปลี่ยนแปลง ( ls -li
มาก่อนและหลัง) การใช้งานstrace
เราสามารถเห็นสิ่งที่vim
ทำ ส่วนที่น่าสนใจอยู่ที่นี่:
open("temp", O_WRONLY|O_CREAT|O_TRUNC, 0664) = -1 EACCES (Permission denied)
unlink("temp") = 0
open("temp", O_WRONLY|O_CREAT|O_TRUNC, 0664) = 4
write(4, "more text bla\n", 14) = 14
close(4) = 0
chmod("temp", 0664) = 0
นี้แสดงให้เห็นว่ามันเป็นการยกเลิกการลิงก์แต่ไม่ได้ใกล้temp
อธิบายไฟล์ไป มันค่อนข้างจะเขียนทับเนื้อหาทั้งหมด ( more text bla\n
ในกรณีของฉัน) ฉันเดาว่านี่จะอธิบายว่าทำไมหมายเลขไอโหนดไม่เปลี่ยนแปลง
ls -il
ก่อนและหลัง ... ถ้าtemp
หมายเลขไอโหนดเปลี่ยนไปคุณรู้ว่ามันเป็นไฟล์อื่นที่มีชื่อเดียวกัน