Bir dosyanın tüm zaman damgaları nasıl kontrol edilir?


52

Linux'ta bir dosyanın tüm zaman damgalarını kontrol etmek için bir komut var mı?

Dosyadaki son değiştirilen, oluşturulan ve dokunulan tarihleri ​​görmeye çalışıyorum.


4
Sadece işaret etmek gerekirse, Linux dosyalarının doğum tarihi yoktur. Bu nedenle, bir dosyanın oluşturulduğu tarihi belirlemek mümkün değildir.
FatalError

farkettim ki = (. Bana gösterdiğin için teşekkürler.
Mechaflash

4
@FatalError: Çeşitli dosya sistemleri zaten doğum / oluşturma zaman damgalarını destekliyor; asıl sorun, bu tür ilave bilgilere erişmek . (Kişi bir struct statşeyleri kırmadan uzatamaz , ne yazık ki ...) Bir ino ile debugfs -R "stat <1234>" /dev/sdXYdeğiştirerek ext4'ü deneyebilirsiniz 1234.
Grawity

@grawity: Düzgün! Neden hiç bir fs'nin olmadığını merak etmiştim ... ama sanırım yaptılar, ancak sizin de dediğiniz gibi, mevcut ikili dosyalar için ABI’yi parçalayamazsınız. Bahşiş için teşekkürler :).
FatalError,

1
@FatalError, Doğum statkomutu Linux komutu ile görüntülenebilir; bkz . Dosyanın oluşturulma tarihi nasıl bulunur? ve Linux'ta hangi dosya sistemleri oluşturma süresini depolar? .
Franklin Piat

Yanıtlar:


73

Komuta denir stat.

$ stat test
234881026 41570368 -rw-r--r-- 1 werner staff 0 0 "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" 4096 0 0 test

Biçimi ayarlamak istiyorsanız, çıktı OS'ye özgü olduğundan ve Linux / Unix altında değiştiğinden, man sayfalarına bakın.

Genellikle, zamanları normal bir dizin listesinden de alabilirsiniz:

  • ls -l dosya içeriğinin son değiştirildiği zamanki çıktıları mtime
  • ls -lcdosya durum değişikliği son kez çıktılar, ctime( Fark nedir? )
  • ls -luSon erişim zamanını verir, atime(Bu kavramın faydası tartışmaya tabi olmasına rağmen )

Ve elbette, ctimebir dosya "oluşturulduğunda" kayıt yapmaz. POSIX özelliği yalnızca üç zaman damgasını tanımlar, ancak bazı Linux dosya sistemleri Doğum Zamanını / Oluşturma Zamanını depolar. Dosyanın oluşturulma tarihi nasıl bulunur? Böyle bir desteklenen yapılandırmada, bir kullanabilirsiniz

stat --printf '%n\nmtime: %y\nctime: %z\natime: %x\ncrtime:%w\n'

statgerçekten ayrıntılı. Ama lssadece bir satıra ihtiyaç var. Aynı zamanda saniyeler gösterebilseydi iyi olurdu. Ancak, dosya listeleri oluştururken, birincisi tamamen uygundur.
AslaMind9

Benim için hızlı bir çözüm oldu
Andrew

ls -lBusyBox kurulu olduğunda (Android'de) sonucunun farklı bir tarih formatı gösterebileceğini fark ettim . Bence onsuz, "2019-07-26 14:41" gibi, ve onunla da "6 Mayıs 21:27" gibi. Yıl nasıl geçiyor? Onsuz formatını kullanarak zorlamak için bir yolu var mı?
android geliştirici,

@ androiddeveloper Dediğim gibi, cevap OS'ye bağlıdır. Bence yeni bir soru açmalısın. Özellikle Android hakkında konuşuyorsanız, belki de Stack Overflow veya Android Meraklıları daha uygun olurdu.
slhck

@slhck Peki, aynı işletim sistemi, sadece BusyBox kurulu iken. Gösterilecek formatı elde etmenin mümkün olup olmadığını sordum (anlamı: kullanılacak bir komut var mı).
android geliştirici

21

POSIX Standardında tanımlandığı şekilde dosyalarınızın her biri için depolanan yalnızca ÜÇ farklı zaman değeri vardır : http://pubs.opengroup.org/onlinepubs/9699919799/ (bkz. Temel Tanımlar bölümü -> 4. Genel Kavramlar -> 4.8 Dosya Kez Güncelleme)

Her dosyanın üç ayrı ilişkili zaman damgası vardır: son veri erişim zamanı, son veri değişikliğinin zamanı ve dosya durumunun en son değiştirildiği saat . Bu değerler, <sys / stat.h> ' de açıklandığı gibi dosya özellikleri yapı yapı statünde döndürülür .

Ve <sys / stat.h> öğesinden :

atime is for Last data access timestamp.
mtime is for Last data modification timestamp.
ctime is for Last file status change timestamp.

Aşağıdaki örnekler atime , mtime ve ctime arasındaki farkı göstermektedir , bu örnekler GNU / Linux BASH'dadır. Sen kullanabilirsiniz stat -xMac OS X veya diğer BSD Dist. benzer çıkış formatını görmek için.

$ stat --version
stat (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ touch test
$ stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:58:28.609223953 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800

Dosya yeni oluşturulduğunda, üç zaman damgası aynıdır.


1. atime

Birincisi, let en erişmek (bunu okuyarak dosyanın verilerini lessveya vim(yazdırmanın) catbaşka bir dosyaya) ya da kopyalamak ( cp).

$ cat test #Nothing will be printed out, since the file is empty
$ stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800  <-- atime Changed!
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800

2. ctime

Şimdi let değiştirmek izin (değiştirerek, dosya durumunu chmod() veya yeniden adlandırma mv)

$ chmod u+x test
$ stat stet
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:04:10.178285430 +0800  <-- ctime Changed!
$    
$ mv test testing
$ stat testing
  File: `testing'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:06:33.342207679 +0800  <-- ctime Changed again!

Şimdiye kadar , dosyanın içeriğinin ( verilerinin ) oluşturulduğu zamankilerle aynı olduğunu unutmayın.


3. mtime

Son olarak, dosyayı düzenleyerek dosyanın içeriğini değiştirelim .

$ echo 'Modify the DATA of the file' > testing
$ echo 'Modify the DATA of the file also change the file status' > testing
$ stat testing
  File: `testing'
  Size: 56          Blocks: 8          IO Block: 4096   regular file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 11:09:48.247345148 +0800  <-- mtime Changed!
Change: 2014-03-16 11:09:48.247345148 +0800  <-- ctime also Changed!

4. doğum zamanı

Ayrıca stat(örneğin stat --version 8.13Ubuntu 12.04'te) yeni sürümünün 4. zaman damgası bilgisine sahip olduğunu unutmayın - Doğum Saati (dosya oluşturma süresi). Şimdilik doğru zamanı göstermese de:

$ stat --version
stat (GNU coreutils) 8.13
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ stat birth_time
  File: `birth_time'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d  Inode: 4073946     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/ bingyao)   Gid: ( 1000/ bingyao)
Access: 2014-03-16 10:46:48.838718970 +0800
Modify: 2014-03-16 10:46:48.838718970 +0800
Change: 2014-03-16 10:46:48.838718970 +0800
 Birth: -

10: 46: 48.838718970'in anlamı nedir? SS: dd: ss. nanosaniye?
Dzung Nguyen

2
Evet . "Çekirdek 2.5.48'den bu yana, stat yapısı üç dosya zaman damgası alanı için nanosaniye çözünürlüğünü destekliyor ...."
Tom Lord


2
Doğum zamanı… memnuniyetle. Çünkü son değiştirilen ve son değişiklik neredeyse aynı amaç için ama yine de farklı. Bu ise iyidir hepsi dört sağlıklı olur.
AslaMind9
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.