Di Linux (saat ini menggunakan sistem file ext4), bagaimana orang dapat memeriksa dengan cepat jika konten file telah dimodifikasi tanpa membaca kontennya?
Apakah stat
perintah itu pendekatan yang disarankan? Saat ini saya lakukan
$ stat --format "%Y" hello.txt
dan kemudian saya dapat memeriksa apakah perintah yang sama menghasilkan keluaran yang sama. Jika ya, saya menyimpulkan bahwa hello.txt belum berubah.
Perasaan saya adalah seseorang ingin memasukkan lebih banyak parameter untuk lebih yakin. Misalnya, apakah menambahkan ukuran file, nama file, dll, akan memberikan "sidik jari" file yang lebih baik?
Pada topik ini, saya ingat bahwa volume TrueCrypt yang pernah saya miliki selalu diabaikan oleh program cadangan tambahan saya, mungkin karena TrueCrypt memastikan untuk tidak meninggalkan perubahan meta data di belakang. Saya kira memang mungkin untuk mengubah semua data yang dikembalikan oleh stat
, oleh karena itu tidak dapat dijamin untuk mengambil setiap kemungkinan modifikasi file?
sumber
md5sum filename
?md5sum
atau segala macam checksum membaca isi file. Saya tidak ingin melakukan itu karena terlalu lambat untuk tujuan saya.ls -t
akan mengurutkan konten dalam direktori berdasarkan waktu modifikasi.Jawaban:
Jika Anda ingin mendeteksi apakah file telah dimodifikasi melalui cara normal (mengeditnya di beberapa aplikasi, memeriksa versi baru dari sistem kontrol revisi, membangunnya kembali, dll.), Periksa apakah waktu modifikasi (mtime) telah berubah dari cek terakhir. Itulah yang
stat -c %Y
dilaporkan.Waktu modifikasi dapat diatur oleh
touch
perintah. Jika Anda ingin mendeteksi apakah file tersebut telah diubah dengan cara apapun (termasuk penggunaantouch
, penggalian arsip, dll), periksa apakah waktu perubahan inode nya ( kriminal ) telah berubah dari cek terakhir. Itulah yangstat -c %Z
dilaporkan. Waktu tidak dapat dipalsukan kecuali oleh administrator sistem (dan bahkan kemudian, hanya melalui cara tidak langsung: dengan mengubah jam sistem, atau dengan mengakses disk secara langsung, mem-bypass sistem file).sumber
Perintah stat hanya memiliki resolusi satu detik. Jadi, jika file itu diubah dua kali dalam detik yang sama Anda bisa melewatkan modifikasi. Sistem file yang lebih baru seperti ext4 memberikan cap waktu resolusi lebih tinggi dalam nanodetik, tetapi beberapa alat lama belum menyusul.
Juga, mungkin bagi program lain untuk mengatur waktu modifikasi yang sewenang-wenang. Anda dapat melihat bagaimana ini bisa terjadi melalui perintah sentuh.
Jika Anda mengkhawatirkan salah satu dari dua kemungkinan itu, bukan ide yang buruk untuk melihat ukuran file juga. Inilah yang dilakukan rsync ketika mencari file yang dimodifikasi.
sumber
Apa yang Anda miliki adalah metode yang benar. Satu-satunya alasan untuk gagal adalah jika sistem file tidak memperbarui dengan benar - dalam hal ini Anda akan berakhir dengan sejumlah masalah yang lebih serius.
Tentu saja, saya kira seseorang dengan pengetahuan yang benar dan akses root ke sistem di mana partisi dapat diakses mungkin dapat mengubah informasi agar terlihat seolah-olah file belum diubah. Namun, dalam hal ini mereka pasti akan memastikan untuk melakukan hal yang sama dengan ukurannya, dll.
sumber
Saya membuat sidik jari lebih detail.
Saya membuat fungsi pembungkus kecil yang menghasilkan keluaran yang identik untuk versi MacOS / BSD dan GNU
stat
(juga mendeteksi versi yang diinstal oleh Homebrew dengang
awalan).The
init
fungsi dipanggil sekali selama inisialisasi naskah dangetFileStatus
dapat disebut berulang kali tanpa overhead deteksi.sumber