Datei

Aus Mikiwiki
Wechseln zu: Navigation, Suche

Eine Datei (gebildet aus "Daten" und "Kartei"; engl. file; auch: data file, computer file) ist ein strukturierter Bestand inhaltlich zusammengehöriger Daten, der in einem bestimmten Dateiformat auf einem beliebigen Datenspeicher gespeichert werden kann. Diese Daten existieren über die Laufzeit eines Programms hinaus und werden als "nicht flüchtig" (engl. persistent) bezeichnet.

In der elektronischen Datenverarbeitung ist jeder Dateiinhalt zunächst eine eindimensionale Aneinanderreihung von Bit, welche normalerweise in ganzen Byte-Blöcken zusammengefasst sind. Erst der Anwender einer Datei bzw. ein Anwendungsprogramm oder das Betriebssystem selbst interpretieren diese Bit- oder Bytefolge beispielsweise als einen Text, ein ausführbares Programm oder ein Bild.

Im Dateisystem eines Unix-Betriebssystems lässt sich jede Datei auf einer Festplatte oder einem Datenspeicher über einen Inode erreichen und besitzt einen Dateinamen.

Unix kennt verschiedene Dateitypen. "ls -l" zeigt Angaben zum Dateityp als erstes Zeichen der Ausgabe.

Dateityp Beschreibung
Reguläre Datei Textdatei oder binäre Daten.
Verzeichnis (directory) Beinhaltet andere Dateien und Verzeichnisse.
Ausführbare Datei Datei mit gesetztem "execute bit" (x). Die meisten Shell-Befehle sind ausführbar.
Symbolische Dateiverknüpfung Die Datei ist eine "Abkürzung", die auf eine andere Datei zeigt.
Gerätedatei (special file) Eine Schnittstelle zu einem Stück Hardware wie z. B. einen Drucker.
Named Pipe Ein FIFO-Puffer.

Der Shell-Befehl file sagt genaueres über den Inhalt einer Datei. Der Inhalt einer Datei ist jedoch für Unix nicht wichtig und aus seiner Sicht nur ein "Bytestream".

Die Befehle ncdu und gt5 zeigen die Dateien eines Verzeichnisses nach Grösse geordnet an.

Weedit versucht innerhalb einer gegebenen Verzeichnisstruktur Duplikate von Dateien aufzuspüren, die unnötig Festplattenplatz belegen. Dabei werden alle Dateien mit MD5- und CRC-32-Algorithmen auf Doppelgänger überprüft.

Zeitstempel

Linux speichert je Datei folgende drei Zeitstempel.

Zeitstempel Beschreibung
atime (access time) Zeitpunkt des letzten Zugriffs.
ctime (change time) Zeitpunkt der letzten Änderung des Dateistatus.
mtime (modification time) Zeitpunkt der letzten Änderung des Dateiinhalts.

FAQ

Aneinanderhängen von Dateien

Bei einer einigermassen kleinen Zahlen von einanderzuhängenden Dateien eignet sich folgender Befehl, welcher alle dem Muster entsprechenden Dateien in die Datei "TITEL" schreibt.

$ cat tit-1 tit-2 tit-3 > TITEL
$ cat tit-* > TITEL

Sollen zuviele Dateien aneinandergehängt werden, so erscheint folgende Fehlermeldung.

bash: /bin/cat: Die Argumentliste ist zu lang
bzw. 
bash: /bin/cat: Argument list too long

Gemäss der Datei "limits.h" ist die Variable ARG_MAX so eingestellt, dass Argumente und Umgebung für exec() höchstens 128 KB gross sein können.

$ grep ARG_MAX /usr/include/linux/limits.h
#define ARG_MAX       131072	/* # bytes of args + environ for exec() */
$ expr $(getconf ARG_MAX) / 1024 / 16
128

Folgender Befehl erledigt die Aufgabe am schnellsten.

$ find . -name "tit-*" -exec cat {} \; > TITEL

Die Ausführung der Verkettung der Befehle "find", "xargs" und "cat" dauert deutlich länger.

$ find . -name "tit-*" -print0 | xargs -0 cat > TITEL

Womöglich klappt auch folgendes (getestet habe ich das nicht).

$ find . -name "tit-*" | while read dateiname
    do
    cat ${dateiname} >> TITEL
    done

Auslesen (und umwandeln) einer Datei Byte für Byte

Duplikate finden

Informationen über eine Datei

$ stat file.jpg
  File: „file.jpg“
  Size: 43565           Blocks: 88         IO Block: 4096   reguläre Datei
Device: 900h/2304d      Inode: 2100300     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/     abc)   Gid: ( 1000/     abc)
Access: 2011-05-06 15:43:33.370690706 +0200
Modify: 2011-03-19 04:06:13.529875311 +0100
Change: 2011-03-19 04:06:13.529875311 +0100
$ ls -al file.jpg
-rw-r--r-- 1 abc abc 43565 2011-03-19 04:06 file.jpg
$ file file.jpg
file.jpg: JPEG image data, JFIF standard 1.01

Erstellungszeit einer Datei

Herausfinden der Inode-Nummer der betreffenden Datei. Im gezeigten Beispiel wurde die Datei "datei.txt" am 23. August 2018 um 10:09:25 angelegt.

# stat -c %i datei.txt
10879054
# df -k
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/dm-0      205329136 10156656 184719284   6% /
udev               10240        0     10240   0% /dev
tmpfs             812144    16904    795240   3% /run
tmpfs            2030356        0   2030356   0% /dev/shm
tmpfs               5120       24      5096   1% /run/lock
tmpfs            2030356        0   2030356   0% /sys/fs/cgroup
# debugfs -R 'stat <10879054>' /dev/dm-0
Inode: 10879054   Type: regular    Mode:  0644   Flags: 0x80000
Generation: 2271554628    Version: 0x00000000:00000001
User:     0   Group:     0   Size: 42017752
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 82072
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x5b7e7543:d021f1c4 -- Thu Aug 23 10:50:11 2018
 atime: 0x5b7e7704:e957bd4c -- Thu Aug 23 10:57:40 2018
 mtime: 0x5b7e7543:d021f1c4 -- Thu Aug 23 10:50:11 2018
crtime: 0x5b7e6bb5:610fd70c -- Thu Aug 23 10:09:25 2018
Size of extra inode fields: 28
EXTENTS:
(0-10239):835456-845695, (10240-10258):820225-820243

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
country DE.gif Wikipedia ger Dateiwbm Enzyklopädischer Artikel