it-swarm-tr.com

zaman damgası, değişiklik zamanı ve dosyanın oluşturulduğu zaman

Sadece ls -t Ve ls -f 'Un bir dizin altında farklı sıralama ve alt dizinler verdiğini biliyorum.

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

Örneğin, birisinin şunu yazdığını gördüm:

Varsayılan olarak, rsync programı yalnızca dosyaların farklı boyut ve zaman damgası olup olmadığına bakar. Hangi dosyanın daha yeni olduğu önemli değildir, eğer farklıysa üzerine yazılır. '--Update' bayrağını rsync'e iletebilirsiniz; bu, kaynaktaki dosyadan daha yeniyse, ancak aynı dosya türünde olmaları koşuluyla, hedefteki dosyaları atlamasına neden olur. Bunun anlamı, örneğin, kaynak dosya normal bir dosya ve hedef bir sembol bağlantısı 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. Değil, yalnızca normal dosya ve simlink anlamına mı geliyor?

108
Tim

3 çeşit "zaman damgası" vardır:

  • Erişim - dosya en son ne zaman okundu
  • Değiştir - dosya en son değiştirildiğinde (içerik değiştirildi)
  • Değiştir - dosyanın son meta verileri değiştirildiğinde (ör. İzinler)

Bu bilgileri görüntülemek için, coreutils'in bir parçası olan stat kullanabilirsiniz.

stat ayrıca cihaz, düğümler, bağlantılar vb. gibi bazı bilgileri de gösterir.

Bu tür bilgilerin büyük ölçüde dosya sistemine ve bağlama seçeneklerine bağlı olduğunu unutmayın. Örneğin, bir bölümü noatime seçeneğiyle bağlarsanız, erişim bilgisi yazılmaz.

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

touchcp -u ( "yalnızca SOURCE dosyası hedef dosyadan daha yeni olduğunda veya hedef dosya eksikse" ile birlikte kullanışlı olabilir ") veya boş işaretleyici dosyalarının oluşturulması için.

146
echox

Echox yanıtı geçerlidir ancak dosya oluşturma zamanı ile ilgili bilgi eklemek istiyorum.

Dosya Sistemi Desteği

Bazı dosya sistemleri, oluşturma zamanı (veya doğum zamanı) ile ilgili olarak inode'a ek bir girişi destekler. ext4 bu özelliği destekler ve ayrıca JFS ve BTRFS olduğunu biliyorum.

Bununla birlikte, çoğu araç ve API bu ek bilgileri okumak için henüz güncellenmemiştir. Yani orada olsa bile, 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 işlevinin bir doğum alanı olduğunu görebilirsiniz. Ve debugfs aracılığıyla bilgileri alabiliriz (ext4 dosya sistemindeyken crtime).

statx desteği

Şimdi Kernel 4.11 yeni bir statx sistem çağrısı olduğundan , Y2038 veya ağ dosya sistemlerini daha iyi desteklemenin yanı sıra, btime veya doğum zamanı ( oluşturma zamanı). Ext4 desteği aynı çekirdek sürümü 4.11'de olmalıdır.

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

Yaklaşan glibc, bu arayüzü sorgulamak için bir işlev çağrısı sağlayacaktır (bkz. glibc statx desteği ile ilgili Phoronix haberleri ). Bu yüzden kısa süre içinde kullanıcı alanında bu özellik için destek bekleyebiliriz.

38
Huygens