วิธีป้องกัน Emacs จากการทำลายฮาร์ดลิงก์?


13

สมมติว่าฉันมีสองไฟล์file1และfile2:

$ echo aaa >file1
$ ln file1 file2

จากนั้นฉันตรวจสอบว่า inodes เหมือนกัน:

$ ls -i
18749779 file1  18749779 file2

ซึ่งแสดงให้เห็นว่าทั้งสองไฟล์เหมือนกันจริง ๆ ตอนนี้ฉันแก้ไขfile1ใน Emacs และเพิ่มบรรทัดด้วยเช่นข้อความbbbและบันทึกและออกจาก Emacs

ตอนนี้ฉันได้รับ:

$ ls -i
18749781 file1  18749779 file2
$ cat file1
aaa
bbb
$ cat file2
aaa

ดังนั้นการเชื่อมโยงฮาร์ดเสีย โปรดทราบว่าสิ่งนี้จะไม่เกิดขึ้นเมื่อฉันแก้ไขไฟล์vimหรือถ้าฉันเพียงแค่ทำecho bbb >>file1..

ฉันจะป้องกัน Emacs จากการทำลายฮาร์ดลิงก์ได้อย่างไร

ปรับปรุง:

ทราบว่าฉันมี

(require 'backup-dir)
(setq bkup-backup-directory-info
      '((t  "~/.emacs-backups/" ok-create full-path )))

ใน~/.emacsไฟล์ init ของฉัน หากฉันแก้ไขfile1โดยใช้emacs -Q file1ฉันจะได้รับไฟล์ที่เรียกว่าfile1~ในไดเรกทอรีปัจจุบันที่ลิงก์ไปยังfile2(มี inode เดียวกัน) แต่file1~ยังไม่ได้รับการแก้ไข (ดังนั้นจึงเหมือนกับไฟล์เก่าfile1) .. นี่ไม่ใช่สิ่งที่ฉันต้องการ ฉันต้องการทั้งไฟล์file1และfile2เป็นไฟล์เดียวกันและรวมเนื้อหาไฟล์ที่อัปเดตแล้ว ..


3
ตกลงฉันคิดว่าฉันพบวิธีแก้ปัญหา: ถ้าฉันเพิ่มลง(setq backup-by-copying t)ใน~/.emacsไฟล์ init ของฉันมันทำงานได้ตามที่ต้องการ ..
HåkonHægland

คำตอบ:


10

@Hakon แก้ไขปัญหาของเขาเองด้วย:

(setq backup-by-copying t)

หากคุณต้องการที่จะรักษาพฤติกรรมเริ่มต้นและใช้back-up-by-copyingเฉพาะสำหรับไฟล์ที่เชื่อมโยงอย่างหนักคุณสามารถใช้สิ่งนี้แทน (และปล่อยให้backup-by-copyingตั้งไว้ที่nil):

(setq backup-by-copying-when-linked t)

นอกจากนี้ตามที่ชี้แจงโดย @Harald คุณสามารถตั้งค่าback-up-by-copyingเป็นตัวแปรไฟล์ภายในเครื่องแทนเพื่อเปิดคุณลักษณะนี้เฉพาะสำหรับแต่ละไฟล์

คำอธิบายของพฤติกรรมนี้จากคู่มือ Emacs :

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

ดูหน้าเชื่อมโยงสำหรับการสนทนาเพิ่มเติม


2
โปรดทราบว่าคุณสามารถตั้งค่านี้เป็นตัวแปรโลคอลไฟล์ได้ในกรณีที่คุณไม่ต้องการให้มีพฤติกรรมนี้สำหรับไฟล์ทั้งหมด
Harald Hanche-Olsen

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