Kategorie:Linux/Datei/Zeit: Unterschied zwischen den Versionen

Aus Foxwiki
KKeine Bearbeitungszusammenfassung
K Dirkwagner verschob die Seite Kategorie:Linux/Datei/Zeitstempel nach Kategorie:Linux/Datei/Zeit, ohne dabei eine Weiterleitung anzulegen: Textersetzung - „Linux/Datei/Zeitstempel“ durch „Linux/Datei/Zeit“
 
(123 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=== Bedeutung von Zeitstempeln ===
[[Kategorie:Linux/Datei/Eigenschaft]]
=== Welche Zeitstempel gibt es? ===
Die Zeitstempel der Dateien sind in Linux in den [http://wiki.linux-club.de/opensuse/Inode Inodes] abgelegt.
* Dort stehen jeweils 4 Zeitstempel, wovon jedoch einer für den Anwender nicht sichtbar und auch nicht von Interesse ist, den verwendet Linux im Filesystem zum Verwalten der gelöschten Inode, er enthält die Zeit, zu der die Datei gelöscht worden ist, und somit der Inode für eine neue Verwendung frei geworden ist.
 
Derzeit kommt im ext3/4 Filesystem noch ein weiterer Zeitstempel hinzu, auf den wohl so mach ein ehemaliger Windowsuser schon lange gewartet hat, und der die wirkliche Entstehungszeit der Datei dokumentiert.
 
Dazukommen bedeutet, in aktuellen Systemen ist er intern schon da, allerdings war dies das geringste Problem.
* Das Hauptproblem jetzt, es müssen sehr viele, zum Teil auch zentrale Librarys und Programme, auf eine mögliche Benutzung dieses Zeitstempels noch angepasst werden.
 
Solche weitreichenden Änderungen könnten nur durch eine gezielte Koordinierung von zahlreichen Projekten schnell eingebracht werden.
 
Es wird also durchaus noch einiges Wasser die Flüsse herunterfließen, bis Otto der Normalanwender letztlich diesen Zeitstempel irgendwann einmal zu Gesicht bekommt, bzw.
* bis er wirklich auch damit arbeiten kann.
 
==== Access Time (atime) ====
Diese Zeit wird jedes mal neu gesetzt, wenn der Inhalt der Datei geöffnet worden ist.
* In ihm wird also der letzte Zugriff auf den Inhalt der Datei angezeigt.
 
Dabei ist es für diesen Zeitstempel von Bedeutung, ob die Datei vor einem schreiben erst gelesen wird oder nur an das Ende weitergeschrieben wird.
 
Ansonsten gilt, egal ob die Datei gelesen oder ausgeführt wird oder ob eine Kopie von dieser Datei gemacht wird, oder die Datei durchsucht wird, oder die Datei in ein Backuparchiv aufgenommen wird - immer wird dieser Zeitstempel neu auf die aktuelle Zeit gesetzt.
 
Durch die Auswertung dieses Zeitstempels könnten wir also z.B.
* feststellen, das wir eine Datei schon einen längeren Zeitraum nicht mehr angefasst haben.
 
Das kann unter Anderem dabei helfen alte temporäre User- oder Systemdateien zu löschen.
 
Das ständige setzen der Access Time von Dateien und Verzeichnissen kann bei sehr vielen Zugriffen in einem Filesystem eine nicht unbedeutende Last verursachen, in bestimmten Situationen ist dieses aus Performancegründen nicht gewünscht, und kann deshalb z.B.
* mit Mountoptionen des Filesystems für alle Dateien oder alle Verzeichnisse abgeschaltet werden.
 
Einige Filesysteme erlauben auch ein gezieltes Abschalten dieser ständigen atime Aktualisierungen für ausgewählte Dateien oder Verzeichnisse.
 
==== Modify Time (mtime) ====
Diese Zeit wird gesetzt, wenn der Inhalt der Datei verändert wird.
* In diesem Zeitstempel steht also die Zeit der letzten Veränderung der Dateidaten.
 
Es ist der Zeitstempel der für uns die meiste Bedeutung hat.
* Können wir doch damit feststellen, wie aktuell die Dateidaten sind.
* Diese Zeit wird z.B.
* bei ls -l in der default Einstellung angezeigt.
 
==== Change Time (ctime) ====
Fälschlicher Weise wird ctime oftmals mit Create Time übersetzt und somit herrscht über diesen Zeitstempel oftmals eine ganz falsche Vorstellung.
 
Mit diesem Zeitstempel wird die Zeit gespeichert, zu welcher das letzte Mal die Daten innerhalb des Inodes geändert worden sind.
 
Wenn man sich anschaut, welche Daten im [http://wiki.linux-club.de/opensuse/Inode Inode] enthalten sind, kann man schon erahnen, wann diese Zeit neu gesetzt wird.
 
Bei einem Ändern des Dateiinhaltes werden die Dateigröße sowie die Datenblöcke neu gesetzt, beim Ändern der Zugriffsrechte, der UserID oder GruppenID, beim Anlegen eines neuen Hardlinks immer wird auch der Inhalt des Inodes geändert und damit auch die ctime neu gesetzt.
 
Aber auch bei einem Umbenennen der Datei, wird die ctime neu gesetzt, (man muss sich dabei vorstellen, das beim Umbenennen die Anzahl der "Links" zuerst um 1 erhöht wird, dann wird der neue Name angelegt, und dann anschließend der alte Name gelöscht und die "Links" wieder um 1 verringert).
 
Es gibt eine einzige Ausnahme bei der die ctime nicht gesetzt wird: wenn durch das Auslesen der Datei nur die Access Time im Inode neu gesetzt wird, also die Datei z.B.
* ausgelesen wird, dann wird die Change Time nicht neu gesetzt.
 
Dieser Zeitstempel hat z.B.
* eine große Bedeutung fürs Backup, da damit nicht nur festgestellt werden kann, ob sich der Inhalt der Datei sondern z.B.
* auch der Name oder die Eigentums- oder Zugriffsrechte einer Datei seit dem letzten Backup geändert haben.
 
Während sich die anderen beiden Zeitstempel durch Befehle auf eine bestimmte Zeit manipulieren lassen, ist es nicht möglich die ctime auf diese Art zu setzen.
 
What if you want to find files by their age? This is something that can be useful if you're trying to find a file that you know you created within a certain timeframe, or if you want to look for older files to delete.
* Lots of good reasons, actually.
 
The <tt>find</tt> utility is all about finding by time.
* You can search by access time ('''-atime''') or the last time a file was modified ('''-mtime''') or by the last time it was changed ('''-ctime''').
 
For example, let's look for any files that have not been modified in the last two days:
 
find -mtime +2
 
The options take a number that is interpreted as "n times 24 hours ago" and actually encompass a range.
* If you say +1, <tt>find</tt> will interpret that as "at least 24 hours ago, but not more than 48 hours ago."
 
You can combine the options, if you want to look for files within a specific range.
* So '''find -mtime +2 -mtime -5''' would be "two or more days ago, but not more than five days ago."
 
==== Zeitstempel anzeigen ====
===== ls =====
Der Befehl [http://man.splitbrain.org/ls ls] ( Verzeichnisinhalte anzeigen ) zeigt in der default Einstellung in Verbindung mit der Option -l immer die mtime der Dateien an.
 
Die Option -t sortiert die Verzeichnisseinträge nach der Zeit und in Verbindung mit der Option -r kann die Sortierreihenfolge auch jeweils umgekehrt werden.
 
Neben der mtime kann der ls-Befehl aber auch die anderen beiden Zeitstempel anzeigen und auch die Verzeichniseinträge nach diesen Zeiten sortieren.
 
Dafür zuständig sind die Optionen -u bei der die atime der Dateien verwendet wird, und die Option -c bei der die ctime zur Geltung kommt.
* In neueren Versionen des ls-Befehls können auch die Ausgaben der Zeiten analog dem Formatierungsmöglichkeiten von [http://man.splitbrain.org/date date] mittels der Option --time-style= formatiert werden.
 
Überblick über die gesamten Optionen und Möglichkeiten gibt die [http://man.splitbrain.org/ls ManPage von ls].
 
===== stat =====
Der Befehl '''stat''' ohne Optionen kann alle Zeitstempel und alle anderen Informationen einer Datei auflisten.
* Siehe dazu auch das dokumentierte Beispiel unter [http://wiki.linux-club.de/opensuse/Inode Inode].
* Es ist aber auch möglich die Ausgabe von '''stat''' nach seinen eigenen Vorstellungen zu formatieren.
 
Folgender Befehl listet die Dateinamen und die Zeitstempel aller Dateien im Verzeichnis auf:
 
stat -c "Filename&nbsp;:&nbsp;%n
atime &nbsp;:&nbsp;%x
mtime &nbsp;:&nbsp;%y
ctime &nbsp;:&nbsp;%z
" *
 
Das Format der Ausgabe dieses Befehles für jede Datei
 
Filename&nbsp;: test
atime &nbsp;: 2006-11-03 18:17:42.764670001 +0100
mtime &nbsp;: 2006-10-25 20:42:55.000000000 +0200
ctime &nbsp;: 2006-10-25 20:42:55.000000000 +0200
 
genaue Beschreibungen aller Optionen und weitere Möglichkeiten zeigt die [http://man.splitbrain.org/stat Manpage von stat]
 
==== Unterschiede bei Dateitypen ====
Bei der Interpretation der Zeitstempel müssen wir weiterhin unterscheiden, ob es sich um eine '''"normale" Datei''' oder z.B.
* um ein [http://wiki.linux-club.de/opensuse/Directory Verzeichnis] handelt.
 
Die Funktion der Zeitstempel ist bei allen Dateitypen prinzipiell gleich, allerdings durch den speziellen Aufbau und die Funktion einzelner Dateitypen ergibt sich eine etwas andere Betrachtungsweise.
 
Bei den '''Verzeichnissen''' bedeutet die atime, das Verzeichnis wurde gelesen z.B.
* mit '''ls''', die mtime bedeutet es wurde in diesem Verzeichnis an den Namen der Dateien etwas geändert, oder Dateien sind in diesem Verzeichnis dazu gekommen oder entfernt worden.
 
'''Pipes''' und '''Geräteknoten''' zeigen prinzipiell analoges Verhalten wie normale Dateien, es gibt jedoch einige Besonderheiten bei '''Symbolischen Links'''.
 
Die atime wird hier immer dann gesetzt, wenn über diesen Weg auf die verlinkte Datei zugegriffen wird.
* Die ctime wird gesetzt bei Eigentumswechsel oder Umbenennen der Datei.
 
Da der eigentliche Inhalt des Softlinks, der Verweis auf die Datei nicht geändert werden kann, wird die mtime nur bei der Erstellung des Softlinks gesetzt.
 
Beim Versuch mittels '''chmod''' oder '''touch''' auf den Inode des Softlinks zuzugreifen, wird statt dessen dem Link gefolgt und der Zugriff erfolgt dort auf den Inode der verlinkten Datei.
 
==== Zeitstempel und Datei-Operation ====
Die folgende Tabelle zeigt einige häufige Befehle und ihre Auswirkungen auf die Zeitstempel von Verzeichnissen, normalen Dateien und Softlinks.
* Dabei entspricht: * '''( X )''' dieser Zeitstempel wird neu gesetzt
* '''( . )''' dieses Zeitstempels bleibt unverändert
* '''( - )''' auf Softlinks wurden nicht alle Befehle getestet oder sind wirkungslos
 
'''Änderung der Zeitstempel verschiedener Dateitypen bei Befehlen'''
 
{| class="wikitable sortable" 
|-
| | '''Befehl '''
| colspan="3" align=center | '''aktuelles Directory '''
| colspan="3" align=center | '''Datei '''
| colspan="3" align=center | '''Sym.
* Link auf Datei '''
|-
| |
| align=center | atime
| align=center | mtime
| align=center | ctime
| align=center | atime
| align=center | mtime
| align=center | ctime
| align=center | atime
| align=center | mtime
| align=center | ctime
|-
| | '''ls * '''
| align=center | X
| align=center | .
| align=center | .
| align=center | .
| align=center | .
| align=center | .
| align=center | X
| align=center | .
| align=center | .
|-
| | '''cat * '''
| align=center | X
| align=center | .
| align=center | .
| align=center | X
| align=center | .
| align=center | .
| align=center | X
| align=center | .
| align=center | .
|-
| | '''find . '''
| align=center | X
| align=center | .
| align=center | .
| align=center | .
| align=center | .
| align=center | .
| align=center | .
| align=center | .
| align=center | .
|-
| | '''grep Begriff * '''
| align=center | X
| align=center | .
| align=center | .
| align=center | X
| align=center | .
| align=center | .
| align=center | X
| align=center | .
| align=center | .
|-
| | '''echo "neue Zeile" >> Datei '''
| align=center | .
| align=center | .
| align=center | .
| align=center | .
| align=center | X
| align=center | X
| align=center | -
| align=center | -
| align=center | -
|-
| | '''echo "neue Zeile" >> SymLink '''
| align=center | X
| align=center | .
| align=center | .
| align=center | .
| align=center | X
| align=center | X
| align=center | X
| align=center | .
| align=center | .
|-
| | '''mv Datei Datei_1 '''
| align=center | .
| align=center | X
| align=center | X
| align=center | .
| align=center | .
| align=center | X
| align=center | .
| align=center | .
| align=center | X
|-
| | '''ln Datei Datei_1 '''
| align=center | .
| align=center | X
| align=center | X
| align=center | .
| align=center | .
| align=center | X
| align=center | -
| align=center | -
| align=center | -
|-
| | '''chmod 777 Datei '''
| align=center | .
| align=center | .
| align=center | .
| align=center | .
| align=center | .
| align=center | X
| align=center | -
| align=center | -
| align=center | -
|-
| | '''chown user1 Datei '''
| align=center | .
| align=center | .
| align=center | .
| align=center | .
| align=center | .
| align=center | X
| align=center | .
| align=center | .
| align=center | X
|-
| | '''tar -cf ../Archiv.tar ./ '''
| align=center | X
| align=center | .
| align=center | .
| align=center | X
| align=center | .
| align=center | .
| align=center | X
| align=center | .
| align=center | .
|-
| | '''tar -xf ../Archiv.tar '''
| align=center | X
| align=center | .
| align=center | X
| align=center | X
| align=center | .
| align=center | X
| align=center | X
| align=center | X
| align=center | X
 
|-
|}
==== Zeitstempel ändern ====
Der Befehl [http://man.splitbrain.org/touch touch] bietet die Möglichkeit die atime und die mtime der Dateien zu manipulieren.
* Per default (ohne andere Optionen) setzt touch für alle Zeitstempel die aktuelle Zeit, ist eine Datei nicht vorhanden wird eine leere normale Datei angelegt.
 
Über die Optionen '''-t''' oder '''-d''' können beliebige Zeiten bestimmt werden, auf die die Zeitstempel gesetzt werden sollen.
* Auch ist es über die Option '''-r''' möglich eine Referenzzeit einer anderen Datei auszuwählen.
 
Mittels der Optionen '''-a''' und '''-m''' ist es möglich nur die atime oder nur die mtime mit touch neu zu setzen.
 
'''In allen Fällen wird die ctime immer auf das aktuelle Datum gesetzt.'''
 
Überblick über die gesamten Optionen und Möglichkeiten git die [http://man.splitbrain.org/touch Manpage von touch].
 
Für Datei unter Linux werden Zeitstempel gespeichert, die den Zeitpunkt des letzten Zugriffs, des letzten veränderung und der letzten Änderung der Eigenschaften.
* Wird eine Datei neu erstellt oder eine existierende Datei oder ihre Attribute verändert werden diese Zeitstempel automatisch aktualisiert.
 
Kommandos wie ls oder find benutzen diese Zeitstempel zur Auflistng und zum finden von Dateien.
* Das Kommando Touch <tt>'''touch'''</tt> wird benutzt um die Zeitstempel zu ändern (access time, modification time, and change time of a file).
 
'''touch''' [-acm] [-r ''Referenzdatei''] [-t ''MMDDhhmm''<nowiki>[[</nowiki>''CC'']''YY''][.''ss'']] [-d ''Zeit''] [-time={atime, access, use, mtime, modify}] [-date=''Zeit''] [-file=''Referenzdatei''] [-no-create] ''Datei'' ...
 
===== Zeitstempel aktualisieren / Datei erstellten =====
<tt>'''touch'''</tt> setzt die Zugriffs- und die Änderungszeit der ''Datei'' auf die aktuelle Zeit.
* Wenn die ''Datei'' nicht existiert, wird eine leere Datei erzeugt:
 
$ touh neue_datei
 
===== Mehrere Dateien erstellen =====
$ touch datei_1 datei_2 datei_3
$ touch datei{_A,_B,_C}
 
===== Datei erstellten unterbinden (-c) =====
Mit der Option -c werden existierende Dateien aktualisiert, aber keine neuen erstelt:
 
$ touch -c neue_datei_2
 
===== Zugriffszeit setzen (-a) =====
Mit der Option -a kann die Zugriffzeit geändert werden.
* Ohne weiter Angabe wird die aktuelle Systemzeit genutzt und in das Feld atime eingetragen.
 
<u>Vor der Ausführung von touch:</u>
 
$ stat neue_datei
Datei: „neue_datei“
Größe: 0 Blöcke: 0 EA Block: 4096 reguläre leere Datei
Gerät: 20h/32d Inode: 5291574 Verknüpfungen: 1
Zugriff: (0644/-rw-r--r--) Uid: ( 1000/dirkwagner) Gid: ( 2000/dirkwagner)
Zugriff : 2013-07-14 '''02:25:17.812326958 +0200'''
Modifiziert: 2013-07-14 02:25:17.812326958 +0200
Geändert : 2013-07-14 02:25:17.812326958 +0200
Geburt : -
$ touch -a neue_datei
 
<u>Nach der Ausführung von touch</u>
 
$ stat neue_datei
Datei: „neue_datei“
Größe: 0 Blöcke: 0 EA Block: 4096 reguläre leere Datei
Gerät: 20h/32d Inode: 5291574 Verknüpfungen: 1
Zugriff: (0644/-rw-r--r--) Uid: ( 1000/dirkwagner) Gid: ( 2000/dirkwagner)
Zugriff : 2013-07-14 '''02:26:35.178102630 +0200'''
Modifiziert: 2013-07-14 02:25:17.812326958 +0200
Geändert : 2013-07-14 02:26:35.178102630 +0200
Geburt : -
 
===== Änderungzeit setzen (-m) =====
Dder Zeitpunkt der letzten Änderung kann mit der Option -m aktualisiert werden.
 
$ touch -m neue_datei
 
HINWEIS: Es ist mit touch nicht möglih die Erstellungszeit (Geburt) zu ändern.
 
===== Zeitstempel einer anderen Datei kopieren (-r) =====
Der Option -r kann ein Dareiname angegben werden, deren Zeitstempel dann als Referenz benutzt werden.
 
$ touch neue_datei -r /etc/passwd
 
===== Zeitangaben festlegen (-t) =====
Mit den Optionen -t und -d können eigene Zeitangaben an touch übergeben werden:
 
<nowiki>$ touch -t [[CC]YY]MMDDhhmm[.SS]</nowiki>
 
{| class="wikitable sortable" 
|-
| | '''CC'''
| | Jahr (ersten zwei Ziffern)
|-
| | '''YY'''
| | Jahr (letzten beiden Ziffern)* Bei Werten zwischen 70 und 99 wird für CC der Wert 19 angenommen.
* Bei Werten zwischen 00 und 37 wird für CC der Wert 20 angenommen.
* Es ist nicht möglich, ein Datum jenseits des 18.
* Januar 2038 zu setzten.
 
|-
| | '''MM'''
| | Monat
|-
| | '''DD'''
| | Tag
|-
| | '''hh'''
| | Stunde
|-
| | '''mm'''
| | Minute
|-
| | '''SS'''
| | Sekunden
|-
|}
<u>Beispiel</u>
 
$ touch -a -m -t 203801181205.09 neue_datei
 
<u>Prüfung der Änderung mit stat</u>
 
$ stat neue_datei
Datei: „neue_datei“
Größe: 0 Blöcke: 0 EA Block: 4096 reguläre leere Datei
Gerät: 20h/32d Inode: 5291574 Verknüpfungen: 1
Zugriff: (0644/-rw-r--r--) Uid: ( 1000/dirkwagner) Gid: ( 2000/dirkwagner)
Zugriff : '''2038-01-18 12:05:09'''.000000000 +0100
Modifiziert: '''2038-01-18 12:05:09'''.000000000 +0100
Geändert : 2013-07-14 02:52:12.117238294 +0200
Geburt : -
 
===== Optionen =====
{| class="wikitable sortable" 
|-
| | <tt>'''-a '''</tt>
| | ändert nur die Zugriffszeit
|-
| | <tt>'''-c '''</tt>
| | unterdrückt die Erzeugung nicht existierender Dateien
|-
| | <tt>'''-d ''Zeit'' '''</tt>
| | setzt ''Zeit'' anstelle der aktuellen Uhrzeit; für ''Zeit'' können verschiedene gebräuchliche Formate verwendet werden
|-
| | <tt>'''-m '''</tt>
| | ändert nur die Änderungszeit
|-
| | <tt>'''-r ''Referenzdatei'' '''</tt>
| | setzt die Zeit von ''Referenzdatei'' anstelle der aktuellen Zeit
|-
| | <tt>'''-t ''MMDDhhmm''<nowiki> [[</nowiki>''CC''] ''YY''][.''ss''] '''</tt>
| | benutzt das Argument als Zeitangabe
 
|-
|}
==== Dateien anhand der Zeitstempel suchen mit find ====
Der Befehl '''find''' hat eine Vielzahl von Optionen mit deren Hilfe man Dateien finden kann, darunter auch einige mit denen Dateien nach den 3 Zeitstempeln gesucht werden können.
 
Im folgenden ein Auszug aus der [http://man.splitbrain.org/find ManPage von find] der diese Optionen beschreibt.
 
{| class="wikitable sortable" 
|-
| | '''-amin''' ''N''
| | auf die Datei ist vor '''''N''''' Minuten zugegriffen worden
|-
| | '''-anewer''' ''Referenzdatei''
| | auf die Datei ist vor weniger Zeit zugegriffen worden, als seit der letzten Veränderung der '''''Referenzdatei''''' vergangen ist
|-
| | '''-atime''' ''N''
| | auf die Datei ist vor '''''N*24''''' Stunden zugegriffen worden
|-
| | '''-cmin''' ''N''
| | der Status der Datei wurde vor '''''N''''' Minuten geändert
|-
| | '''-cnewer''' ''Referenzdatei''
| | der Status der Datei wurde vor weniger Zeit verändert, als seit der letzten Veränderung der '''''Referenzdatei''''' vergangen ist
|-
| | '''-ctime''' ''N''
| | der Dateistatus wurde vor '''''N*24''''' Stunden geändert
|-
| | '''-mmin''' ''N''
| | der Inhalt der Datei wurde vor '''''N''''' Minuten verändert
|-
| | '''-mtime''' ''N''
| | der Inhalt der Datei wurde vor '''''N*24''''' Stunden verändert
|-
| | '''-newer''' ''Referenzdatei''
| | die Datei ist später verändert worden als die '''''Referenzdatei'''''
|-
|}
dabei können die numerischen Argumente '''N''' auf drei Arten angegeben werden:
 
{| class="wikitable sortable" 
|-
| align=center | '''+ N'''
| align=center | wird interpretiert "alle Zahlen größer als N"
|-
| align=center | '''- N'''
| align=center | wird interpretiert "alle Zahlen kleiner als N"
|-
| align=center | '''N'''
| align=center | wird interpretiert "genau N"
 
|-
|}
==== Beispiele ====
find /tmp&nbsp;! -type d -atime +20 -user USER1 2>/dev/null
 
findet unterhalb /tmp alle Dateien die kein Verzeichnis sind und seit über 20 Tagen nicht mehr angefasst wurden und dem Benutzer USER1 gehören
 
find /home/USER1 -type f -mmin -20 -user USER1
 
findet alle normalen Dateien unterhalb vom Homeverzeichnis von USER1 die innerhalb der letzten 20 Minuten geändert wurden und dem User USER1 gehören
 
find /etc -cnewer /etc/fstab 2>/dev/null
 
findet alle Dateien unterhalb /etc deren ctime nach der letzten Änderung (mtime) der /etc/fstab geändert wurde
 
==== Backup und Zeitstempel ====
Zeitstempel spielen beim Backup eine besondere Rolle, zum Einem möchte man bei vielen Backupaufgaben bei der Wiederherstellung der Dateien aus dem Backuparchiv die alten Zeitstempel wieder haben, zum anderen benötigt man z.B.
* bei [http://wiki.linux-club.de/mediawiki/index.php?title=Inkrementelles_Backup&action=edit&redlink=1 inkrementellen Backups] die Zeitstempel der Dateien, um herauszufinden, ob sich die Datei seit dem letztem Backup geändert hat und somit jetzt in das inkrementelle Backup mit aufgenommen werden muss.
 
Und nicht zu guter Letzt, gibt es auch Backup Methoden bei denen einzelne Dateien innerhalb eines Backuparchives gezielt ausgetauscht werden, wenn sie sich seit dem Erstellen des Backups geändert haben, oder in der Zwischenzeit neu hinzu gekommen sind, müssen sie natürlich jetzt in das Archiv aufgenommen werden.
 
Beim Anlegen eines Backups werden die Dateien ausgelesen, durch dieses Auslesen wird im Normalfall die atime dieser Dateien neu gesetzt.
 
Dieses hätte jedoch zur Folge, dass in einem so gesicherten Verzeichnis nicht nach den Dateien gesucht werden könnte, auf die schon länger nicht mehr zugegriffen worden ist, um sie z.B.
* zu löschen.
 
Aus diesem Grund haben die meisten Backupprogramme spezielle Optionen, die das setzen der atime beim Backup verhindern.
* Dieses kann aber nur dadurch erreicht werden, dass nach dem die Datei ausgelesen wurde, die alte atime wieder neu gesetzt wird.
 
Der touch-Befehl und viele andere Programme (auch tar) mit denen die Zeitstempel in den [http://wiki.linux-club.de/opensuse/Inode Inode] manipuliert werden können, nutzen den Systembefehl [http://man.splitbrain.org/utime%282%29 utime] dafür.
* Bei diesen Befehlen wird beim zurücksetzen der atime auf den alten Wert, die ctime zerstört und auf die aktuelle Zeit gesetzt.
 
Das hat dann die Konsequenz, das nach einem Backup dann in diesem Verzeichnis zwar nach Dateien gesucht werden kann, auf die lange nicht zugegriffen wurde, aber nicht mehr nach Dateien gesucht werden kann, bei denen in der letzten Zeit die ctime verändert wurde.
 
Auch kann mit solchen Backupprogrammen nur die atime und die mtime der Dateien wieder hergestellt werden, die ctime wird auf eine Zeit des Zurückspielens der Sicherung gesetzt.
 
Bei inkrementellen Backups stellt sich die Frage, sollen die Dateien nach der mtime oder der ctime beurteilt werden.
* Wird die Datei nach der Änderung der mtime beurteilt, dann sind dort sämtliche Änderungen am Inhalt dieser Datei für das Backup berücksichtigt, jedoch nicht, z.B.
* eventuelle vorgenommene Änderungen an den Besitz- oder Zugriffsrechten.
 
Einige Backupkonzepte ermöglichen die Wahl zwischen beiden Varianten, einige Programme unterstützen jedoch nur die Suche nach dem geänderten mtime Zeitstempel.
 
Gelegentlich ein kleines Problem sind die Zeitstempel der [http://wiki.linux-club.de/opensuse/Directory Verzeichnisse].
 
Wird z.B.
* zuerst das Verzeichnis aus dem Backup gewonnen, dann können die gespeicherten Zeitstempel aus dem Backup zwar gesetzt werden, wenn jedoch anschließend noch die Dateien aus diesem Verzeichnis hineingepackt werden, dann sind die Zeitstempel der Verzeichnisse wieder auf dem Zeitpunkt des Auspackens der letzten Datei in diesem Directory gesetzt und nicht wie gewünscht, die vom gesicherten Verzeichnis.
 
Von Bedeutung für manche Anwendungen ist auch die Genauigkeit mit der die Zeitstempel in den Headerdateien des Backups abgelegt werden können, während für einige Anwendungen durchaus eine Genauigkeit von 1 Sekunde ausreicht, benötigen andere Backupkonzepte eventuell eine Genauigkeit von 1/1000 Sekunde.
 
Aus diesen Ausführungen sollte jetzt erkennbar sein dass es zwischen Backup und Zeitstempel eine doch recht vielschichtige Wechselwirkung gibt, die sich oftmals nur mit der Wahl des für diesen Zweck geeigneten Backupprogramms und den richtigen Einstellungen und Optionen lösen lässt.
 
Wem die Möglichkeiten z.B.
* von tar in Bezug auf die Zeitstempel nicht ausreichen und wer eventuell auch noch weitere Features wie z.B. [http://wiki.linux-club.de/opensuse/Zugriffsrechte#Access_Control_Lists_unter_Linux ACL-Unterstützung] benötigt, dem sei an dieser Stelle ein Blick in die [http://man.splitbrain.org/star ManPage von star] empfohlen.
 
===== tar und Zeitstempel =====
Der Befehl [http://man.splitbrain.org/tar tar] ('''T'''ape '''AR'''chiver) bezeichnet ein Programm mit dessen Hilfe einfache Backup-, Archivierungs und ähnliche -Arbeiten am System gemacht werden können.
* Wenn wir unter LINUX von '''tar''' sprechen, meinen wir damit eigentlich eine '''GNU implementierung''' eines unter UNIX als tar bezeichneten Befehls.
 
Man bezeichnet das Programm deshalb auch auf anderen Systemen '''GNUtar oder gtar'''.
* Die beiden Programme (UNIX tar und GNU tar) sind nur bedingt kompatibel.
 
Daneben existieren noch mehrere mit TAR verwandte Implementationen die mehr oder weniger viele Erweiterungen und Verbesserungen beinhalten, und oft noch weniger kompatibel zu ihren Urprogrammen sind.
 
Die Stärke von tar liegt in der einfachen und universellen Benutzung, eine der historisch gewachsenen Schwächen von tar, ist der Umgang mit Zeitstempeln.
 
Mit tar läßt sich nur die mtime wieder herstellen.
* Die atime und die ctime werden zerstört und durch die aktuelle Zeit beim Restore ersetzt.
* Moderne Versionen von tar haben eine Option, um mittels der mtime inkrementelle Backups machen zu können.
 
Eine weitere Option von tar ermöglicht es beim Erstellen des Archives die atime, (welche durch das Lesen der Dateien beim Erstellen des Archives verändert würde,) vor Veränderung zu schützen, allerdings mit der Nebenwirkung, dass damit analog zum touch-Befehl, die ctime der oginalen Dateien zerstört wird.
 
Damit ist tar durchaus noch geeignet um einfache Backupaufgaben zu übernehmen, und ein Linuxsystem aus einem Tar-Archiv wird sicherlich ohne Probleme funktionieren, allerdings die gehobenen Anspüche die heute an ein modernes Backupprogramm gestellt werden, kann tar damit nicht erfüllen.
 
Die Hauptbedeutung und der Haupteinsatz von GNUtar ist heute deshalb auch mehr im Bereich der Verteilung und Verbreitung von Softwarepaketen zu finden.
* Den Umfang und die Funktionen können der [http://man.splitbrain.org/tar ManPage von tar] entnommen werden.

Aktuelle Version vom 14. September 2024, 20:50 Uhr

Seiten in der Kategorie „Linux/Datei/Zeit“

Folgende 2 Seiten sind in dieser Kategorie, von 2 insgesamt.