Abrufen der Erstellungszeit einer Datei unter Linux und ein praktisches Tutorial

Abrufen der Erstellungszeit einer Datei unter Linux und ein praktisches Tutorial

Hintergrund

Manchmal müssen wir den Erstellungszeitpunkt einer Datei ermitteln.

Zum Beispiel:

Als ich das „xtrabackup-Schema“ studierte, wollte ich durch Beobachtung bestätigen, dass xtrabackup_log die erste erstellte und die letzte gespeicherte Datei war. Wir müssen den Erstellungszeitstempel und den Änderungszeitstempel der Datei xtrabackup_logfile kennen.

Review: Drei Zeitstempel für Linux-Dateien

Das Linux-Dateisystem speichert drei Zeitstempel, die durch Anzeigen der Dateiinformationen mit dem Befehl stat abgerufen werden können. Dies sind ATime, MTime und CTime.

[root@192-168-199-198 Backups]# stat 2.txt 
 Datei: '2.txt'
 Größe: 16 Blöcke: 8 IO Blöcke: 4096 reguläre Datei
Gerät: 821h/2081d Inode: 15 Links: 1
Zugriff: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Zugriff: 2019-07-23 12:12:14.276981038 +0800
Ändern: 2019-07-23 12:12:41.415980158 +0800
Änderung: 2019-07-23 12:12:41.415980158 +0800
 Geburt: -

ATime - die letzte Zugriffszeit der Datei

Immer wenn eine Datei gelesen wird, wird ATime aktualisiert, um dem durch den Befehl stat abgerufenen Access-Wert zu entsprechen.

[root@192-168-199-198 Backups]# cat 2.txt #<-- Datei lesen 121231233123123
[root@192-168-199-198 Backups]# stat 2.txt 
 Datei: '2.txt'
 Größe: 16 Blöcke: 8 IO Blöcke: 4096 reguläre Datei
Gerät: 821h/2081d Inode: 15 Links: 1
Zugriff: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Zugriff: 2019-07-23 12:22:09.644961733 +0800 #<-- Die Zeit hat sich geändert Ändern: 2019-07-23 12:12:41.415980158 +0800
Änderung: 2019-07-23 12:12:41.415980158 +0800
 Geburt: -

MTime - der Zeitpunkt der letzten Änderung des Dateiinhalts

Wenn die Datei geschrieben wird, wird CTime entsprechend dem durch den Befehl stat erhaltenen Modify-Wert aktualisiert.

[root@192-168-199-198 Backups]# echo hello_world > 2.txt #<-- Dateiinhalt ändern [root@192-168-199-198 Backups]# stat 2.txt 
 Datei: '2.txt'
 Größe: 12 Blöcke: 8 IO Blöcke: 4096 reguläre Datei
Gerät: 821h/2081d Inode: 15 Links: 1
Zugriff: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Zugriff: 2019-07-23 12:22:09.644961733 +0800
Ändern: 2019-07-23 12:26:23.466953503 +0800 #<-- Die Zeit hat sich geändertÄndern: 2019-07-23 12:26:23.466953503 +0800
 Geburt: -

Verwenden Sie hier nicht vi, um den Dateiinhalt zu ändern, da die Verwendung von vi zum Ändern des Dateiinhalts dazu führen kann, dass sich der Inode ändert, d. h. die von Ihnen beobachtete Datei ist nicht die vorherige Datei! Dies hängt mit dem Prinzip von vi zusammen.

CTime – der Zeitpunkt der letzten Änderung der Dateiattribute

Wenn das Dateiverzeichnis geändert wird oder der Dateieigentümer, die Berechtigungen usw. geändert werden, wird auch CTime entsprechend dem durch den Befehl stat erhaltenen Änderungswert aktualisiert.

[root@192-168-199-198 Backups]# chmod 777 2.txt #<-- Dateiattribute ändern [root@192-168-199-198 Backups]# stat 2.txt 
 Datei: '2.txt'
 Größe: 12 Blöcke: 8 IO Blöcke: 4096 reguläre Datei
Gerät: 821h/2081d Inode: 15 Links: 1
Zugriff: (0777/-rwxrwxrwx) Uid: (0/root) Gid: (0/root)
Zugriff: 2019-07-23 12:22:09.644961733 +0800
Ändern: 2019-07-23 12:26:23.466953503 +0800
Änderung: 2019-07-23 12:30:35.830945320 +0800 #<-- Zeit geändertGeburt: -

Linux kann die Dateierstellungszeit nicht abrufen?

Jetzt wissen wir, dass es unter Linux drei Arten von Zeit gibt: ATime, MTime und CTime. Da wundern wir uns, warum es keine CRTime (Erstellungszeit) gibt.

Im Vergleich zum Windows-System (siehe oben) gibt es im Windows NTFS-Dateisystem drei Zeitstempel, einschließlich der „Erstellungszeit“. In der Designphilosophie von Linux gibt es jedoch keine „Erstellungszeit“ für Dateien, sodass frühe Versionen des ext-Dateisystems die „Erstellungszeit“ für Dateien nicht unterstützen. Ab der ext4-Version wird die Dateierstellungszeit jedoch im Inode des ext4-Dateisystems gespeichert, sodass das ext4-Dateisystem die Dateierstellungszeit auch mithilfe einer speziellen Methode abrufen kann.

Außerdem wird erläutert, dass die Ermittlung der Erstellungszeit einer Datei davon abhängt, ob das Dateisystem dies unterstützt.

Schritte zum Ermitteln der Dateierstellungszeit unter Linux

Das CentOS7-Linux-System verfügt über ein Tool namens debugfs, mit dem die Erstellungszeit von Dateien im ext4-Dateisystem ermittelt werden kann. man debugfs hat herausgefunden, dass die Beschreibung des Tools „ext2/ext3/ext4-Dateisystem-Debugger“ lautet, es unterstützt also das xfs-Dateisystem nicht.

Es ist nicht klar, ob das häufig verwendete xfs-Dateisystem das Abrufen der Dateierstellungszeit unterstützt und wie dies zu tun ist. Leser müssen die offizielle Dokumentation zu Rate ziehen.

1. Holen Sie sich die Inode-Nummer der Datei

Methode 1:

[root@192-168-199-198 Backups]# stat /backups/2.txt
 Datei: „/backups/2.txt“
 Größe: 30 Blöcke: 8 IO Blöcke: 4096 reguläre Datei
Gerät: 821h/2081d Inode: 14 #<--- Diese Links: 1
Zugriff: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Zugriff: 2019-07-23 12:49:11.462909146 +0800
Ändern: 2019-07-23 12:49:11.462909146 +0800
Änderung: 2019-07-23 13:08:20.138871900 +0800
 Geburt: -

Methode 2:

[root@192-168-199-198 Backups]# ls -i /backups/2.txt
14 /backups/2.txt

Hier erhalten wir die Inode-Nummer 14.

2. Suchen Sie den Datenträgerpfad, auf dem sich die Datei befindet

[root@192-168-199-198 Backups]# df -h
Verwendete Dateisystemgröße Verfügbare Nutzung% Eingebunden auf
/dev/mapper/centos-root 46 G 23 G 24 G 49 % /
devtmpfs 3,8 G 0 3,8 G 0 % /Entwickler
tmpfs 3,9 G 8,0 K 3,9 G 1 % /Entwickler/shm
tmpfs 3,9 G 12 M 3,8 G 1 %/Lauf
tmpfs 3,9 G 0 3,9 G 0 % /sys/fs/cgroup
/dev/sdb1 100 G 77 G 24 G 77 % /data2
/dev/sdc1 50G 53M 47G 1% /backups #<--- Sie können sehen, dass die Dateien hier sind /dev/sda1 1014M 142M 873M 14% /boot
tmpfs 781M 0 781M 0 % /run/Benutzer/0

Der Datenträgerpfad lautet /dev/sdc1

3. Verwenden Sie debugfs, um die Dateierstellungszeit anzuzeigen

[root@192-168-199-198 Backups]# debugfs -R 'stat <14>' /dev/sdc1
debugfs 1.42.9 (28. Dezember 2013)
Inode: 14 Typ: regulär Modus: 0644 Flags: 0x80000
Generation: 737271740 Version: 0x00000000:00000001
Benutzer: 0 Gruppe: 0 Größe: 30
Datei-ACL: 0 Verzeichnis-ACL: 0
Links: 1 Blockanzahl: 8
Fragment: Adresse: 0 Nummer: 0 Größe: 0
 ctime: 0x5d369644:211c1170 – Dienstag, 23. Juli 2019, 13:08:20 Uhr
 atime: 0x5d3691c7:6e5dbb68 – Dienstag, 23. Juli 2019, 12:49:11 Uhr
 mtime: 0x5d3691c7:6e5dbb68 – Dienstag, 23. Juli 2019, 12:49:11 Uhr
crtime: 0x5d3691c7:6e5dbb68 – Dienstag, 23. Juli 2019, 12:49:11 Uhr
Größe der zusätzlichen Inode-Felder: 28
UMFANG:
(0):35337

Skript zum Abrufen der Dateierstellungszeit

Angesichts der Tatsache, dass der Vorgang zum Abrufen des Zeitschritts für die Dateierstellung etwas umständlich ist (obwohl es nur drei Schritte sind :))

Ich stelle hier ein Skript zur Verfügung

vi statx

#!/bin/sh

[ $# -ne 1 ] && echo "Verwendung: $0 {FILENAME}" && exit 1

INODE=`ls -i $1 |awk '{print $1}'`
DATEINAME=$1

#Wenn der Parameter / enthält, holen Sie sich den Verzeichnispfad des Parameters und wechseln Sie in das Verzeichnis `echo $FILENAME |grep / 1> /dev/null` && { FPWD=${FILENAME%/*};FPWD=${FPWD:=/};cd ${FPWD};FPWD=`pwd`; } || FPWD=`pwd`

 

Array = (`echo ${FPWD} | sed 's@/@ @g'`)
Arraylänge=${#array[@]}

für ((i=${array_length};i>=0;i--))
Tun
 nicht gesetztes Array[$i]
 SUBPWD=`echo " "${array[@]} | sed 's@ @/@g'`
 DISK=`df -h |grep ${SUBPWD}$ |awk '{print $1}'`
 [[ -n $DISK ]] && abbrechen
Erledigt

 

#Beenden, wenn es nicht ext4 ist [[ "`mount |grep ${DISK} |awk '{print $5}'`" != "ext4" ]] && { echo ${DISK} wird auf Typ ext4 nicht gemountet! Nur ext4-Dateisystemunterstützung!;exit 2; }

debugfs -R "stat <${INODE}>" ${DISK}

verwenden:

chmod +x statx
mv statx /usr/sbin/statx

[root@192-168-199-198 Backups]# statx 2.txt
debugfs 1.42.9 (28. Dezember 2013)
Inode: 14 Typ: regulär Modus: 0644 Flags: 0x80000
Generation: 737271740 Version: 0x00000000:00000001
Benutzer: 0 Gruppe: 0 Größe: 30
Datei-ACL: 0 Verzeichnis-ACL: 0
Links: 1 Blockanzahl: 8
Fragment: Adresse: 0 Nummer: 0 Größe: 0
 ctime: 0x5d369644:211c1170 – Dienstag, 23. Juli 2019, 13:08:20 Uhr
 atime: 0x5d36bb8f:56eb1e70 – Dienstag, 23. Juli 2019, 15:47:27 Uhr
 mtime: 0x5d3691c7:6e5dbb68 – Dienstag, 23. Juli 2019, 12:49:11 Uhr
crtime: 0x5d3691c7:6e5dbb68 – Dienstag, 23. Juli 2019, 12:49:11 Uhr
Größe der zusätzlichen Inode-Felder: 28
UMFANG:
(0):35337

! ! ! Bitte in Produktionsumgebungen mit Vorsicht verwenden. Shell-Skripte führen kaum Ausnahmebehandlungen durch, unterstützen keine Pipes, keine Verzeichnisse und wurden nicht umfassend getestet.

Im tatsächlichen Kampf gehen wir zurück und verwenden diese Methode, um zu bestätigen, ob das „Xtrabackup-Schema“ korrekt ist.

Was wir überprüfen müssen, ist:

xtrabackup_log ist die erste erstellte und die letzte gespeicherte Datei.

1. Erstellen Sie ein Backup

DATE=`Datum "+%Y%m%d%H%M%S"`
xtrabackup -uroot -proot \
 -S /tmp/mysql3306.sock \
 --Backup \
 --target-dir=/backups/$DATE

2. Finden Sie die crtime aller Sicherungsdateien

cd /backups/$DATE
>/tmp/1.txt
>/tmp/2.txt
finde . -type f >/tmp/1.txt

für i in `cat /tmp/1.txt`
Tun
 { echo -n $i" ";statx $i 2>/dev/null |grep crtime |awk '{print $7}'; } >>/tmp/2.txt
Erledigt

cat /tmp/2.txt |sort -k2 |weniger
###Das Folgende ist die Ausgabe###
./ibdata1 23:32:59
./xtrabackup_logfile 23:32:59 #<---Sie können sehen, dass diese Datei die erste ist, die erstellt wurde./mysql/engine_cost.ibd 23:33:00
./mysql/gtid_executed.ibd 23:33:00
./mysql/help_category.ibd 23:33:00
./mysql/hilfe_schlüsselwort.ibd 23:33:00
./mysql/help_relation.ibd 23:33:00
./mysql/help_topic.ibd 23:33:00
./mysql/innodb_index_stats.ibd 23:33:00
./mysql/innodb_table_stats.ibd 23:33:00
./mysql/plugin.ibd 23:33:00
./mysql/server_cost.ibd 23:33:00
./mysql/servers.ibd 23:33:00
./mysql/slave_master_info.ibd 23:33:00
./mysql/slave_relay_log_info.ibd 23:33:00
./mysql/slave_worker_info.ibd 23:33:00
./mysql/time_zone.ibd 23:33:00
./mysql/time_zone_leap_second.ibd 23:33:00
...
./zabbix/trigger_tag.frm 23:33:09
./zabbix/users.frm 23:33:09
./zabbix/users_groups.frm 23:33:09
./zabbix/usrgrp.frm 23:33:09
./zabbix/valuemaps.frm 23:33:09
./zabbix/widget_field.frm 23:33:09
./zabbix/widget.frm 23:33:09

3. Finden Sie die mtime aller Sicherungsdateien

>/tmp/1.txt
>/tmp/2.txt
finde . -type f >/tmp/1.txt

für i in `cat /tmp/1.txt`
Tun
 { echo -n $i" ";statx $i 2>/dev/null |grep mtime |awk '{print $7}'; } >>/tmp/2.txt
Erledigt

cat /tmp/2.txt |sort -k2 |weniger
###Das Folgende ist die Ausgabe###
./ibdata1 23:33:00
./mysql/engine_cost.ibd 23:33:00
./mysql/gtid_executed.ibd 23:33:00
./mysql/help_category.ibd 23:33:00
./mysql/hilfe_schlüsselwort.ibd 23:33:00
./mysql/help_relation.ibd 23:33:00
./mysql/help_topic.ibd 23:33:00
./mysql/innodb_index_stats.ibd 23:33:00
./mysql/innodb_table_stats.ibd 23:33:00
./mysql/plugin.ibd 23:33:00
...
./xtrabackup_logfile 23:33:09 #<---Sie können sehen, dass diese Datei zuletzt geändert und gespeichert wurde./zabbix/acknowledges.frm 23:33:09
./zabbix/actions.frm 23:33:09
...
./zabbix/users_groups.frm 23:33:09
./zabbix/usrgrp.frm 23:33:09
./zabbix/valuemaps.frm 23:33:09
./zabbix/widget_field.frm 23:33:09
./zabbix/widget.frm 23:33:09

Abschließend haben wir die Richtigkeit des ersten und siebten Schritts des xtrabackup-Schemas überprüft, indem wir uns die Erstellungs- und Änderungszeit der Dateien angesehen haben.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Mit Golang Zugriffs-/Erstellungs-/Änderungszeit von Dateien unter Linux abrufen
  • Analysieren der Erstellung und Löschung von Linux-Ordnerdateien
  • So erstellen Sie ein Dateisystem in einer Linux-Partition oder einem logischen Volume
  • So erstellen Sie eine Swap-Partitionsdatei in Linux
  • Befehl zum Anzeigen der Erstellungszeit der Binlog-Datei unter Linux
  • Beispielcode eines Linux-Befehls zum Erstellen eines Datumsordners oder einer Datumsdatei

<<:  So verwenden Sie Node zum Implementieren des statischen Datei-Cachings

>>:  Wie MLSQL Stack das Stream-Debugging vereinfacht

Artikel empfehlen

Diskussion über die numerische Begrenzung des OL-Elements im HTML-Dokument

Im Allgemeinen ist es unwahrscheinlich, dass Sie ...

Warum der CSS-Attributwert clear:right im Detail nicht funktioniert

Die Verwendung der Clear-Eigenschaft zum Löschen v...

So ändern Sie den Standardspeicherort von Docker-Images (Lösung)

Aufgrund der anfänglichen Partitionierung des Sys...

So implementieren Sie die Unschärfefunktion von DIV

Verwenden Sie Anti-Shake, um DIV verschwinden zu ...

WeChat-Applet zur Bestimmung, ob die Mobiltelefonnummer legal ist Beispielcode

Inhaltsverzeichnis Szenario Wirkung Code Zusammen...

Vue implementiert die browserseitige Code-Scan-Funktion

Hintergrund Vor nicht allzu langer Zeit habe ich ...

Ursachen und Lösungen für Verzögerungen bei der MySQL Master-Slave-Replikation

Inhaltsverzeichnis Ein kurzer Überblick über die ...

Details der MySQL-Berechnungsfunktion

Inhaltsverzeichnis 2. Feldverkettung 2. Geben Sie...

MySQL-Optimierung: Cache-Optimierung

Ich freue mich, dass einige Blogger meinen Artike...

Lernen Sie MySQL-Datenbanken in einer Stunde (Zhang Guo)

Inhaltsverzeichnis 1. Datenbankübersicht 1.1 Entw...

Vue integriert Tencent Map zur Implementierung der API (mit DEMO)

Inhaltsverzeichnis Hintergrund zum Schreiben Proj...