Những gì được tính là một sửa đổi hoặc thay đổi tập tin?


16

Việc đổi tên có ảnh hưởng đến sửa đổi tập tin hoặc thời gian truy cập không? Có một danh sách ở đâu đó của những gì thay đổi thời gian?

Câu trả lời:


9

Đổi tên không cập nhật thời gian Thay đổi:

$ mkdir tmp
$ cd tmp

$ echo abc > a
$ stat a
  File: `a'
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 26h/38d Inode: 5038682     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000 /  zelda   Gid: ( 1000/   zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:06:58.981107444 +0100
 Birth: -

$ mv a b
$ stat b
  File: `b'
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 26h/38d Inode: 5038682     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/  zelda)   Gid: ( 1000/   zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:07:14.893238472 +0100
 Birth: -

Thời gian truy cập được cập nhật khi đọc nội dung của tệp. Sửa đổi khi bạn thực sự cập nhật tệp (mở để sửa đổi là không đủ để thay đổi Thời gian sửa đổi).


Việc sao chép một tập tin và dán có làm thay đổi thời gian "sửa đổi" của nó trên tập tin mới không? Việc sử dụng Ctrl + X và dán có thay đổi thời gian "thay đổi" không?

1
Một bản sao tạo một tệp mới với Sửa đổi, Truy cập và Thay đổi với một giá trị mới (tất cả đều giống nhau). Dán một cái gì đó trong trình chỉnh sửa (và sau đó lưu) cập nhật cả ba (Thay đổi bằng dấu thời gian muộn hơn so với hai phần còn lại, tất nhiên chỉ sau khi bạn lưu)
Zelda

Tôi có nghĩa là sử dụng CTRL + x trên tệp và CTRL + v ở một nơi khác.

Đây là sử dụng các công cụ dòng lệnh cpmv, và viđể chỉnh sửa. Các trình soạn thảo khác hoặc máy tính để bàn của bạn có thể xử lý tác vụ khác nhau và có thêm dấu thời gian được cập nhật.
Zelda

Ví dụ: Nautilus không cập nhật Truy cập và Sửa đổi bằng Ctrl + X rồi Ctrl + V, chỉ thay đổi là khác nhau, nhưmv
Zelda

9

Một sửa đổi ảnh hưởng đến thời gian của tệp là thay đổi dữ liệu của tệp: ghi một số lượng byte khác nhau hoặc cắt ngắn kết thúc việc sửa đổi tệp. Tạo một tập tin cũng đặt thời gian của nó đến ngày hiện tại. Chỉ mở một tệp để viết không ảnh hưởng đến mtime, giả sử tệp không được tạo hoặc cắt ngắn.

Đọc từ một tệp (nếu số byte khác nhau được đọc) hoặc thực thi một tệp sẽ đặt thời gian hiện tại của nó. Chỉ mở một tệp để đọc không bao giờ ảnh hưởng đến atime. Trên Linux, điều này hiện bị tắt theo mặc định trong hầu hết các trường hợp; các atimegắn kết tùy chọn khôi phục atime cập nhật, trong khi noatimegắn kết tùy chọn vô hiệu hóa chúng hoàn toàn.

Các chương trình có thể thay đổi thời gian và thời gian của một tập tin; lệnh cơ bản để làm điều này là touch. Một số chương trình sao chép tệp đặt bản sao về cùng thời gian với bản gốc, ví dụ cp -phoặc rsync -t.

Thay đổi ảnh hưởng đến thời gian của tệp là thay đổi siêu dữ liệu của tệp: quyền, chủ sở hữu, thời gian, số lượng liên kết, v.v. Đổi tên tệp cũng cập nhật thời gian của tệp. Thay đổi dữ liệu tệp cũng ảnh hưởng đến thời gian, nhưng đọc từ tệp không thay đổi thời gian ngay cả khi thay đổi thời gian. Không thể thay đổi thời gian theo bất kỳ cách nào ngoài việc đặt nó thành thời gian hiện tại (ngay cả root bị hạn chế, nhưng root có thể gián tiếp đặt ctime bằng cách thay đổi thời gian hệ thống trước tiên hoặc bằng cách truy cập trực tiếp vào phân vùng chứa hệ thống tệp).


1

Một quan sát thực nghiệm bổ sung không được đề cập bởi các câu trả lời khác:

Mở tệp để viết với O_TRUNCthay đổi mtime ngay cả khi tệp ban đầu trống.

Đây có vẻ là trường hợp ít nhất là trên ext3 trên Linux 3.10.

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.