Tại sao giá trị inode thay đổi khi chúng tôi chỉnh sửa trong trình soạn thảo của Vi vi?


22

Khi tôi chỉnh sửa tệp trong trình chỉnh sửa "vi", giá trị inode của tệp sẽ thay đổi. Nhưng khi chỉnh sửa bằng lệnh cat, giá trị inode không thay đổi.

Câu trả lời:


18

Nhiều khả năng, bạn đã thiết lập sao lưu tùy chọn trên, và backupcopy để "không" hoặc "breakhardlink".


Làm thế nào để loại bỏ tùy chọn đó
monu

2
@monu, chỉnh sửa của bạn ~/.vimrc. Đó không phải là các thiết lập mặc định.
cjm

@cjm Với VIM 7.4, tôi không có chuỗi backuptrong tôi .vimrc, nhưng inode vẫn thay đổi, bởi vì mặc định là tập tin hiện sao lưu, xóa sau đó/ * bất cứ khi nào có thể * / đổi tên tập tin / * để sao lưu * / và ghi cái mới / * dưới cùng tên, thay đổi hiệu quả inode * / . Giải quyết bằng cách thêm set backupcopy=yesvào .vimrc.
Kirill Bulygin

27

Khi bạn muốn sửa đổi một tập tin, bạn có hai tùy chọn, mỗi tùy chọn đều có lợi ích và nhược điểm của nó.

  • Bạn có thể ghi đè lên tập tin tại chỗ. Điều này không sử dụng bất kỳ không gian bổ sung nào và bảo tồn các liên kết cứng, quyền và bất kỳ thuộc tính nào khác ngoài nội dung của tệp hiện có. Hạn chế chính của việc này là nếu có bất cứ điều gì xảy ra trong khi tệp đang được ghi (ứng dụng gặp sự cố hoặc mất điện), bạn sẽ kết thúc với một tệp được ghi một phần.
  • Bạn có thể viết phiên bản mới của tệp vào một tệp mới với một tên khác, sau đó di chuyển nó vào vị trí. Điều này sử dụng nhiều không gian hơn và phá vỡ các liên kết cứng và nếu bạn có quyền ghi trên một tệp nhưng không có trong thư mục chứa trong đó, bạn hoàn toàn không thể làm điều đó. Mặt khác, phiên bản cũ của tệp được thay thế nguyên bản bằng phiên bản mới, do đó, tại mọi thời điểm, tên tệp chỉ đến một phiên bản hoàn chỉnh của tệp.

Các trình soạn thảo nâng cao như Vim hoặc Emacs có thể chọn giữa hai phương thức. Khi họ sử dụng phương thức đầu tiên, họ thường tạo một tệp sao lưu trước, có thể được phục hồi nếu nội dung tệp mới không thể được viết chính xác.

Cổ điển vi ghi đè các tập tin tại chỗ. Vì vậy, inode không thay đổi.

Trong Vim, như CJM đã nói , sự lựa chọn được điều khiển bởi backup, backupcopywritebackuptùy chọn. Theo mặc định, Vim đổi tên tệp cũ, sau đó ghi một tệp mới với tên gốc, nếu nó nghĩ rằng nó có thể tạo lại các thuộc tính của tệp gốc. Nếu bạn muốn sử dụng lại inode hiện tại (và do đó có nguy cơ mất dữ liệu hoặc lãng phí thêm thời gian để tạo bản sao lưu), hãy thêm set backupcopy yesvào .vimrc.


+1 Để đề cập writebackupvì tôi đã tắt backupbackupcopyinode vẫn thay đổi.
Alireza Mohamadi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.