Saya ingin mengetahui tanggal pembuatan file tertentu, bukan tanggal modifikasi atau tanggal akses.
Saya sudah mencoba ls -ltrh
dan stat filename
.
linux
files
timestamps
stat
Özzesh
sumber
sumber
stat(1)
.stap
untuk mengambil waktu pembuatan.Jawaban:
Standar POSIX hanya menentukan tiga cap waktu yang berbeda untuk disimpan untuk setiap file: waktu akses data terakhir, waktu modifikasi data terakhir, dan waktu status file terakhir diubah.
Yang mengatakan, sistem file Linux modern, seperti ext4, Btrfs dan JFS, memang menyimpan waktu pembuatan file (alias waktu lahir), tetapi menggunakan nama yang berbeda untuk bidang yang dimaksud (
crtime
dalam ext4,otime
dalam Btrfs dan JFS). Namun, saat ini Linux tidak menyediakan API kernel untuk mengakses waktu pembuatan file , bahkan pada sistem file yang mendukungnya.Seperti yang ditunjukkan oleh Craig Sanders dan Mohsen Pahlevanzadeh ,
stat
mendukung%w
dan%W
memformat penspesifikasi untuk menampilkan waktu kelahiran file (dalam format yang dapat dibaca manusia dan dalam hitungan detik sejak masing-masing zaman). Namun,stat
itu sendiri mengakses waktu kelahiran melalui yangget_stat_birthtime()
disediakan oleh gnulib (dalamlib/stat-time.h
), yang mendapat waktu lahir darist_birthtime
danst_birthtimensec
bidangstat
struktur dikembalikan olehstat()
panggilan sistem. Sementara misalnya sistem BSD (dan dalam ekstensi OS X) menyediakanst_birthtime
melaluistat
, Linux tidak. Inilah sebabnya mengapastat -c '%w' file
output-
(menunjukkan waktu pembuatan yang tidak diketahui) di Linux bahkan untuk sistem file yang menyimpan waktu pembuatan secara internal.Seperti yang ditunjukkan Stephane Chazelas , beberapa sistem file, seperti ntfs-3g, mengekspos waktu pembuatan file melalui atribut file yang diperluas.
sumber
stap
untuk membuat API kernel Anda sendiri. Lihat contoh dalam jawaban di sini.TLDR; Gunakan
stap
( "SystemTap" ) untuk membuat API kernel Anda sendiri. Demo ekstraksi waktu pembuatan ext4 di bawah ini.Anda dapat mengekstrak waktu pembuatan ext4 pada sistem Fedora 19. Ini milik saya:
Sudah jelas bahwa inode pada partisi ext4 saya memiliki waktu pembuatan. Berikut ini skrip shell yang menentukan inode yang terkait dengan nama file dan kemudian menambah
stat
output dengan waktu pembuatan dengan menggunakanstap
("systemtap").NB: Ini hanya demo dan sangat tidak efisien karena modul kernel dibuat, dimuat, dan dibongkar untuk setiap eksekusi. Ini juga mungkin sangat rapuh karena tidak ada pengecekan kesalahan yang dilakukan. API kernel yang tepat akan lebih disukai, tetapi skrip ini dapat dibuat jauh lebih efisien dan membaca waktu pembuatan beberapa file / inode.
[isi stap_stat.sh]
Ini demo:
sumber
debugfs + stat
memungkinkan untuk mendapatkancrtime
tanpa monyet menambal kernel.Di
ext4
dalamnya dimungkinkan; karenaext4
file-system menyimpan waktu pembuatan file. Tapi tetap saja, Anda akan menemukan bahwastat
perintah tidak dapat menampilkan tanggal, karena saya pikir kernel tidak memiliki API untuk ini.Bagaimanapun, waktu kelahiran file disimpan
ext4
dan Anda dapat menemukannya, meskipun tidak dengan metode langsung, tetapi dengan menggunakandebugfs
sumber
xstat filename
/dev/sdxX
sudah di-mount/some/path
dan file-nya/some/path/some/file
, path yang ditentukan hanyalahsome/file
: path-nya harus dirujuk bukan ke root filesystem, tetapi ke mountpoint. Jika tidak, file tidak akan ditemukan.Secara teori, dengan stat GNU Anda dapat menggunakan
stat -c '%w'
atau%W
untuk mendapatkan tanggal pembuatan file (alias waktu lahir).Dalam praktiknya, sebagian besar sistem file tidak mencatat informasi itu dan kernel linux tidak menyediakan cara untuk mengaksesnya.
Waktu terdekat yang bisa Anda dapatkan adalah waktu file, yang bukan waktu pembuatannya, ini adalah waktu metadata file terakhir kali diubah.
Linux Weekly News memiliki artikel yang menarik tentang ini beberapa tahun yang lalu - http://lwn.net/Articles/397442/
sumber
Perbedaan antara
FreeBSD
danGNU\Linux
padastat command
:Jika Anda memanggil
stat
perintah diGNU\Linux
dalamnya memanggil-x
opsi, tetapi di FreeBSD, Anda sendiri yang harus memanggil-x
opsi.Lihat juga Sistem file apa di Linux yang menyimpan waktu pembuatan?
Catatan:
--printf
sangat berguna dalamscripting
....!sumber
Di OS X Anda bisa menggunakan
ls -lU
,stat -f%B
,GetFileInfo -d
, ataumdls -n kMDItemFSCreationDate
:sumber
Lihat ini:
BTW, ini hanya berfungsi pada ext4. Saya belum menemukan solusi untuk BtrFS ... belum;)
sumber