Datei
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
- https://stackoverflow.com/questions/13889659/read-a-file-by-bytes-in-bash
- https://www.unix.com/shell-programming-and-scripting/166786-split-string-convert-binary.html
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 |
---|---|---|---|
Wikipedia | ger | Dateiwbm | Enzyklopädischer Artikel |