Saya perlu menemukan waktu pembuatan file, ketika saya membaca beberapa artikel tentang masalah ini, semua menyebutkan bahwa tidak ada solusi (seperti Site1 , Site2 ).
Ketika saya mencoba stat
perintah, itu menyatakan Birth: -
.
Jadi bagaimana saya bisa menemukan waktu pembuatan file?
filesystem
metadata
stat
nux
sumber
sumber
Jawaban:
Ada cara untuk mengetahui tanggal pembuatan direktori, cukup ikuti langkah-langkah ini:
Ketahui inode direktori dengan
ls -i
perintah (misalkan X -nya )Ketahui di partisi mana direktori Anda disimpan oleh
df -T /path
perintah (misalkan aktif/dev/sda1
)Sekarang gunakan perintah ini:
sudo debugfs -R 'stat <X>' /dev/sda1
Anda akan melihat di output:
crtime adalah tanggal pembuatan file Anda.
Apa yang saya uji :
Dimodifikasi dengan membuat file.
Saya mencoba perintah dan itu memberi waktu yang tepat.
sumber
debugfs
mengekstraknya langsung dari sistem file sehingga tidak perlu menggunakan API kernel. Lihat di sini .statx()
pada Maret 2019.@Nux menemukan solusi hebat untuk ini yang harus Anda upvote semua. Saya memutuskan untuk menulis sedikit fungsi yang dapat digunakan untuk menjalankan semuanya secara langsung. Tambahkan saja ini ke
~/.bashrc
.Sekarang, Anda dapat menjalankan
get_crtime
untuk mencetak tanggal pembuatan sebanyak mungkin file atau direktori:sumber
cp -p
atau serupa.df
sepertinya tidak mendukung--output
opsi. Jika demikian, Anda dapat mengganti baris itu denganfs=$(df foo | awk '{a=$1}END{print a}'
dan fungsinya juga akan berfungsi. Yang saya tunjukkan dalam jawaban ini adalah cara untuk membungkus perintah dari jawaban yang diterima dengan cara yang dapat dijalankan secara langsung untuk target file / direktori.Ketidakmampuan
stat
untuk menunjukkan waktu pembuatan adalah karena keterbatasanstat(2)
panggilan sistem , yang kembali struct tidak menyertakan bidang untuk waktu pembuatan. Dimulai dengan Linux 4.11 (yaitu, 17.10 dan yang lebih baru *), bagaimanapun, panggilan sistem barustatx(2)
tersedia, yang tidak termasuk waktu pembuatan dalam struct kembali.* Dan mungkin pada rilis LTS yang lebih lama menggunakan kernel enablement stack hardware (HWE). Periksa
uname -r
untuk melihat apakah Anda menggunakan kernel setidaknya pada 4,11 untuk mengkonfirmasi.Sayangnya, tidak mudah untuk memanggil panggilan sistem secara langsung dalam program C. Biasanya glibc menyediakan pembungkus yang memudahkan pekerjaan, tetapi glibc hanya menambahkan pembungkus untuk
statx(2)
pada Agustus 2018 (versi 2.28 , tersedia dalam 18.10). Untungnya, @whotwagner menulis contoh program C yang menunjukkan cara menggunakanstatx(2)
pemanggilan sistem pada sistem x86 dan x86-64. Outputnya adalah format yang sama denganstat
default, tanpa opsi format apa pun, tetapi mudah untuk memodifikasinya untuk mencetak waktu kelahiran saja.Pertama, klon:
Anda dapat mengkompilasi
statx.c
kode, atau, jika Anda hanya ingin waktu kelahiran, buatbirth.c
di direktori kloning dengan kode berikut (yang merupakan versi minimal daristatx.c
pencetakan hanya cap waktu pembuatan termasuk ketepatan nanosecond):Kemudian:
Secara teori ini harus membuat waktu pembuatan lebih mudah diakses:
debugfs
adalah alat untuk filesystem ext2 / 3/4, dan tidak dapat digunakan pada yang lain)make
danlinux-libc-dev
).Menguji sistem xfs, misalnya:
Namun, ini tidak berfungsi untuk NTFS dan exfat. Saya kira sistem file FUSE untuk mereka yang tidak termasuk waktu pembuatan.
Jika, atau lebih tepatnya kapan, glibc menambahkan dukungan untuk
statx(2)
panggilan sistem,stat
akan segera menyusul dan kami akan dapat menggunakan perintah biasastat
untuk ini. Tapi saya tidak berpikir ini akan di-backport ke rilis LTS bahkan jika mereka mendapatkan kernel yang lebih baru. Jadi, saya tidak berharapstat
pada rilis LTS saat ini (14,04, 16,04 atau 18,04) untuk pernah mencetak waktu pembuatan tanpa intervensi manual.Pada 18.10, bagaimanapun, Anda dapat langsung menggunakan
statx
fungsi seperti yang dijelaskan dalamman 2 statx
(perhatikan bahwa halaman 18.10 salah dalam menyatakan bahwa glibc belum menambahkan pembungkus).sumber
1
?TL; DR: Jalankan saja:
sudo debugfs -R 'stat /path/to/your/file' /dev/<your fs>
(Untuk mengetahui fs Anda, jalankan
df -T /path/to/your/file
, kemungkinan besar itu akan terjadi/dev/sda1
).Versi panjang:
Kami akan menjalankan dua perintah:
Temukan nama nama partisi untuk file Anda.
Outputnya akan terlihat seperti ini (nama partisi adalah yang pertama):
Cari tahu waktu pembuatan untuk file itu.
Dalam output, cari
ctime
.sumber