it-swarm-id.com

cap waktu, waktu modifikasi, dan waktu pembuatan file

Saya hanya tahu itu ls -t dan ls -f memberikan pengurutan file dan subdirektori yang berbeda di bawah direktori.

  • Apa perbedaan antara cap waktu, waktu modifikasi, dan waktu pembuatan file?
  • Bagaimana cara mendapatkan dan mengubah informasi semacam ini dengan perintah?
  • Dalam hal informasi apa yang dikatakan orang bahwa sebuah file "lebih baru" daripada yang lain?
  • Apa jenis perubahan informasi yang tidak akan membuat file berbeda?

Sebagai contoh, saya melihat seseorang menulis:

Secara default, program rsync hanya terlihat untuk melihat apakah file berbeda dalam ukuran dan cap waktu. Tidak peduli file mana yang lebih baru, jika berbeda, ia akan ditimpa. Anda dapat meneruskan flag '--perbarui' ke rsync yang akan menyebabkannya melompati file di tujuan jika mereka lebih baru daripada file pada sumbernya, tetapi hanya selama mereka adalah jenis file yang sama. Artinya adalah jika, misalnya, file sumber adalah file biasa dan tujuannya adalah symlink, file tujuan akan ditimpa, terlepas dari timestamp.

Di samping catatan, apakah jenis file di sini berarti hanya file dan simlink biasa, bukan jenis seperti pdf, jpg, htm, txt dll?

108
Tim

Ada 3 jenis "cap waktu":

  • Akses - terakhir kali file dibaca
  • Ubah - terakhir kali file diubah (konten telah dimodifikasi)
  • Ubah - terakhir kali meta data file diubah (mis. Izin)

Untuk menampilkan informasi ini, Anda dapat menggunakan stat yang merupakan bagian dari coreutils.

stat akan menunjukkan kepada Anda juga beberapa informasi lebih lanjut seperti perangkat, inode, tautan, dll.

Ingat bahwa informasi semacam ini sangat tergantung pada filesystem dan opsi mount. Misalnya, jika Anda memasang partisi dengan opsi noatime, tidak ada informasi akses yang akan ditulis.

Utilitas untuk mengubah cap waktu adalah touch. Ada beberapa argumen untuk memutuskan stempel waktu yang akan diubah (mis. -A untuk waktu akses, -m untuk waktu modifikasi) dan untuk memengaruhi penguraian stempel waktu yang baru diberikan. Lihat man touch untuk detail lebih lanjut.

touch dapat menjadi berguna dalam kombinasi dengan cp -u ( "salin hanya ketika file SOURCE lebih baru dari file tujuan atau ketika file tujuan hilang" ) atau untuk pembuatan penanda kosong file.

146
echox

Jawaban echox valid tetapi saya ingin menambahkan informasi mengenai waktu pembuatan file.

Dukungan Sistem File

Beberapa sistem file mendukung entri tambahan dalam inode mengenai waktu pembuatan (atau waktu lahir). Saya tahu bahwa ext4 mendukung fitur ini dan juga JFS dan BTRFS .

Namun sebagian besar alat dan API belum diperbarui untuk membaca informasi tambahan ini. Jadi meskipun itu bisa ada, itu tidak dapat diakses.

Misalnya pada Ubuntu 12.04 LTS saya mendapatkan yang berikut untuk file yang saya buat hari ini:

$ 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
[...]

Anda dapat melihat bahwa fungsi stat yang lebih baru memiliki bidang kelahiran, meskipun hasilnya tampaknya tidak benar. Dan melalui debugfs kita bisa mendapatkan informasi (crtime karena saya menggunakan sistem file ext4).

dukungan statx

Sekarang ada karena Kernel 4.11 panggilan sistem statx bar , di atas dukungan yang lebih baik dari Y2038 atau sistem file jaringan, itu juga membawa beberapa fitur tambahan seperti btime atau waktu lahir ( waktu pembuatan) akses. Dukungan untuk ext4 harus dalam rilis kernel yang sama 4.11.

Ada tambalan untuk menambahkan dukungan ke syscall baru ini di rilis Kernel nanti: mis. BTRFS dan F2FS di Kernel 4.13, SMB3 di 4.14, GFS2 di 4.15, NFS di 4.16, dll.

Glibc yang akan datang akan menyediakan pemanggilan fungsi untuk menanyakan antarmuka ini (lihat berita Phoronix tentang dukungan statx glibc ). Jadi kami dapat mengharapkan dukungan untuk fitur ini di ruang pengguna segera.

38
Huygens