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.