zaman damgası, değiştirme zamanı ve bir dosyanın yaratma zamanı


105

Sadece biliyorum ls -tve ls -fbir dizinin altına dosya ve alt dizin farklı sıralamayı verir.

  • Zaman damgası, değiştirme zamanı ve bir dosyanın yaratma zamanı arasındaki farklar nelerdir?
  • Bu tür bilgileri komutlarla almak ve değiştirmek nasıl?
  • İnsanlar ne tür bilgiler açısından bir dosyanın diğerinden daha "daha yeni" olduğunu söylüyor?
  • Ne tür bir bilgi değişikliği dosyayı farklı yapmaz?

Örneğin, birinin yazdığını gördüm:

Varsayılan olarak, rsync programı sadece dosyaların boyut ve zaman damgası bakımından farklı olup olmadığına bakar. Hangi dosyanın daha yeni olduğu önemli değil, eğer farklıysa üzerine yazılır. '--Update' bayrağını rsync'e iletebilirsiniz; bu, kaynaktaki dosyadan daha yeniyse, ancak aynı dosya türü oldukları sürece, hedefdeki dosyaları atlamasına neden olur. Bunun anlamı, örneğin, kaynak dosya normal bir dosya ve hedef bir bağlantı ise, zaman damgasından bağımsız olarak hedef dosyanın üzerine yazılır.

Bir yan notta, buradaki dosya türü pdf, jpg, htm, txt vb. Gibi değil, yalnızca normal dosya ve simlink anlamına gelir mi?


Yanıtlar:


138

3 tür "zaman damgası" vardır:

  • Erişim - dosyanın en son ne zaman okunduğuna
  • Değiştir - dosyanın son değiştirildiği zaman (içerik değiştirildi)
  • Değişiklik - dosyanın en son meta verileri değiştirildiği zaman (örneğin izinler)

Bu bilgiyi görüntülemek için stat, çekirdek elemanların bir parçası olanı kullanabilirsiniz .

stat Ayrıca cihaz, inode, link, vb. bazı bilgileri size gösterecektir.

Bu tür bilgilerin büyük ölçüde dosya sistemine ve mount seçeneklerine bağlı olduğunu unutmayın. Örneğin, noatimeseçeneğe sahip bir bölüm monte ederseniz , erişim bilgisi yazılmaz.

Zaman damgalarını değiştirmek için bir yardımcı program olacaktır touch. Hangi zaman damgasının değişeceğine karar vermek (örneğin erişim zamanı için -a, değişiklik zamanı için -m) ve verilen yeni bir zaman damgasının ayrıştırılmasını etkilemek için bazı argümanlar vardır. Daha man touchfazla ayrıntı için bakınız.

touchcp -u( "yalnızca SOURCE dosyası hedef dosyadan daha yeni olduğunda veya hedef dosya eksik olduğunda kopyala" ile birlikte ) veya boş işaretleyici dosyaları oluşturmak için kullanışlıdır .


1
Teşekkürler! Rsync komutu için, "hangi dosyanın daha yeni olduğu önemli değil" ifadesinde, hangi tür zaman damgası açısından "daha yeni" anlamına gelir. Ayrıca, bir yan notta, rsync'in umursadığı dosya tipi pdf, jpg, htm, txt vb.
Tim

2
Genellikle, bir dosyanın zamanına referans "değiştirilmiş" zaman damgasıdır. Örneğin, ne görüyorsanız onu ls -l. Ve dosya tipi dosyaya karşılık sembolik bağlantı (veya dizinler veya cihazlar gibi diğer dosya tiplerini) belirtir. Dosyadaki veri türü değil (text vs. jpeg, etc).
Seth L

2
@Tim Bu bağlamda değiştirilmiş zaman damgasıdır; rsync, bir dosyayı yedeklemek gerekip gerekmediğine karar verirken, kaynak dosyanın mevcut yedeklemeden daha önce değiştirilip değiştirilmediğini kontrol etmediğini (yedekleme programlarıyla ortak olan) olduğunu söyler; sadece dosyaları farklı boyutlarda veya farklı modifikasyon süreleri var olmadığını denetler ve eğer öyleyse yedekler
Michael Mrozek

1
Dosyanın ilk ne zaman oluşturulduğunu nasıl bilebilirim? Bu bilgi bir yerde saklanıyor mu yoksa güncellemelerde kayboluyor mu? Söylemek gerekirse, dosya ne kadar süredir var ..?
xyz

1
İstatistik (2) bu zaman damgaları değiştiğinde adam sayfası daha ayrıntılı olarak anlatılmaktadır.
Cristian Ciupitu

35

Echox'un cevabı geçerlidir ancak dosya oluşturma süresi ile ilgili bilgi eklemek istiyorum.

Dosya Sistemi Desteği

Bazı dosya sistemleri, yaratma zamanına (veya doğum zamanına) ilişkin inode'a ek bir girişi destekler. Ext4'ün bu özelliği ve ayrıca JFS ve BTRFS'yi desteklediğini biliyorum .

Ancak, çoğu araç ve API bu fazla bilgiyi okumak için henüz güncellenmedi. Öyle olsa bile orada olabilir, erişilebilir değil.

Örneğin Ubuntu 12.04 LTS'de bugün oluşturduğum bir dosya için aşağıdakileri alıyorum:

$ echo Just another test > /tmp/mytest
$ sleep 3
$ touch /tmp/mytest
$ sleep 2
$ cat /tmp/mytest > /dev/null
$ stat /tmp/mytest 
[...]
Access: 2012-06-05 13:33:44.279774711 +0200
Modify: 2012-06-05 13:33:34.611893317 +0200
Change: 2012-06-05 13:33:34.611893317 +0200
 Birth: -
$ sudo debugfs -R 'stat /tmp/mytest' /dev/sda1
[...]
 ctime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
 atime: 0x4fcdee98:42b417dc -- Tue Jun  5 13:33:44 2012
 mtime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
crtime: 0x4fcdee46:01258f1c -- Tue Jun  5 13:32:22 2012
[...]

Çıktı yanlış görünse de, yeni stat fonksiyonunun bir doğum alanı olduğunu görebilirsiniz. Ve debugfs aracılığıyla bilgi alabiliriz (ext4 dosya sisteminde olduğum gibi crtime).

statx desteği

Orada şimdi Kernel 4.11 yeni STATx sistem çağrısı beri , Y2038 veya ağ dosya sistemlerinin daha iyi destek üstünde, o da böyle birkaç ekstra özellik getiriyor btimeveya doğum zamanı (oluşturma zamanı) erişimi. Ext4 desteği 4.11 sürümündeki aynı çekirdek sürümünde olmalıdır.

Daha sonraki Çekirdek sürümlerinde bu yeni sisteme destek eklemek için yamalar yapıldı: örneğin Çekirdek 4.13'te BTRFS ve F2FS, 4.14'te SMB3, 4.15'te GFS2, 4.16'da NFS, vb.

Gelecek olan glibc bu arayüzü sorgulamak için bir işlev çağrısı sağlayacaktır (bkz . Glibc statx desteği hakkında Phoronix haberleri ). Böylece bu özellik için kısa sürede kullanıcı alanında destek bekleyebiliriz.


Windows'tan gelen dosyalar (Oluşturma zamanı), mtime gibi, ext4'e veya tersi yönde taşınırken btime'in bozulmaya devam edip etmediğini biliyor musunuz?
paradroid

@ Paradroid üzgünüm cevabı bilmiyorum. Linux altında NTFS'den ext4'e dosya kopyalarken, oluşturma zamanını destekliyorsa NTFS sürücüsüne bakmanız gerekir. Windows altında demek istiyorsan, Windows için ext4 sürücüsüne bakmak gerekir.
Huygens
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.