ทำไมค่า inode จึงเปลี่ยนไปเมื่อเราแก้ไขในตัวแก้ไข“ vi”


22

เมื่อฉันแก้ไขไฟล์ใน "vi" editor ค่า inode ของไฟล์จะเปลี่ยนไป แต่เมื่อแก้ไขด้วยคำสั่ง cat ค่า inode จะไม่เปลี่ยนแปลง

คำตอบ:


18

ส่วนใหญ่แล้วคุณได้ตั้งสำรองตัวเลือกและbackupcopyที่จะ "ไม่" หรือ "breakhardlink"


วิธีลบตัวเลือกนั้น
monu

2
@monu ~/.vimrcแก้ไขของคุณ สิ่งเหล่านี้ไม่ใช่การตั้งค่าเริ่มต้น
cjm

@cjm ด้วย VIM 7.4 ฉันไม่มีสตริงbackupในของฉัน.vimrcแต่ inode ยังคงเปลี่ยนแปลงเนื่องจากค่าเริ่มต้นคือการสำรองไฟล์ปัจจุบันลบออกหลังจากนั้นและ/ * เมื่อใดก็ตามที่เป็นไปได้ * / เปลี่ยนชื่อไฟล์ / * เป็น backup * / และเขียน หนึ่งใหม่ / * ภายใต้ชื่อเดียวกันได้อย่างมีประสิทธิภาพการเปลี่ยนไอโหนด * / แก้ไขโดยการเพิ่มการset backupcopy=yes .vimrc
Kirill Bulygin

27

เมื่อคุณต้องการแก้ไขไฟล์คุณมีสองตัวเลือกแต่ละตัวมีข้อดีและข้อเสีย

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

เครื่องมือแก้ไขขั้นสูงเช่น Vim หรือ Emacs สามารถเลือกระหว่างสองวิธี เมื่อพวกเขาใช้วิธีแรกพวกเขามักจะทำไฟล์สำรองก่อนซึ่งสามารถกู้คืนได้หากเนื้อหาไฟล์ใหม่ไม่สามารถเขียนได้อย่างถูกต้อง

Classical vi จะเขียนทับไฟล์ที่มีอยู่ ดังนั้น inode จึงไม่เปลี่ยนแปลง

ในเป็นกลุ่มเป็น CJM ได้ระบุไว้แล้วทางเลือกที่ถูกควบคุมโดยbackup, backupcopyและwritebackupตัวเลือก โดยค่าเริ่มต้น Vim จะเปลี่ยนชื่อไฟล์เก่าจากนั้นเขียนไฟล์ใหม่ด้วยชื่อเดิมหากคิดว่าสามารถสร้างแอททริบิวของไฟล์เดิมได้อีกครั้ง หากคุณต้องการที่จะนำมาใช้ไอโหนดที่มีอยู่ (และเพื่อให้ข้อมูลความสูญเสียหรือเสียเวลามากขึ้นในการทำสำเนาสำรอง), เพิ่มที่คุณset backupcopy yes.vimrc


+1 สำหรับการกล่าวถึงwritebackupเพราะฉันปิดไปbackupแล้วbackupcopyแต่ไอโหนดยังคงเปลี่ยนไป
Alireza Mohamadi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.