Datei: Unterschied zwischen den Versionen

Aus Mikiwiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(17 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Eine <b>Datei</b> (gebildet aus "Daten" und "Kartei") 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.
Eine <b>Datei</b> (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 Bits, 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.
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.
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 <b>Dateitypen</b>. "[[ls]] -l" zeigt Angaben zum Dateityp als erstes Zeichen der Ausgabe.
[[Unix]] kennt verschiedene <b>Dateitypen</b>. "[[ls]] -l" zeigt Angaben zum Dateityp als erstes Zeichen der Ausgabe.


{| class=wikitable width=100%
{| class=wikitable width=100%
! width=20% | Dateityp !! Beschreibung
! width=25% | Dateityp !! Beschreibung
|-
|-
| <b>Reguläre Datei</b> || [[Textdatei]] oder binäre Daten.
| <b>Reguläre Datei</b> || [[Textdatei]] oder binäre Daten.
Zeile 16: Zeile 16:
| <b>Ausführbare Datei</b> || Datei mit gesetztem "execute bit" (x). Die meisten [[Shell-Befehl]]e sind ausführbar.
| <b>Ausführbare Datei</b> || Datei mit gesetztem "execute bit" (x). Die meisten [[Shell-Befehl]]e sind ausführbar.
|-
|-
| <b>[[Symbolische Dateiverknüpfung]]</b> || Die Datei ist eine "Abkürzung", die auf eine andere Datei zeigt.
| <b>Symbolische [[Dateiverknüpfung]]</b> || Die Datei ist eine "Abkürzung", die auf eine andere Datei zeigt.
|-
|-
| <b>[[Gerätedatei]]</b> || (special file) Eine Schnittstelle zu einem Stück Hardware wie z. B. einen Drucker.
| <b>[[Gerätedatei]]</b> || (special file) Eine Schnittstelle zu einem Stück Hardware wie z. B. einen Drucker.
Zeile 23: Zeile 23:
|}
|}


Der 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".
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.


[http://adm1n.cjb.net/cw/ 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.
[http://adm1n.cjb.net/cw/ 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.
{| class=wikitable width=100%
! width=25% | Zeitstempel !! Beschreibung
|-
| <b>atime</b> || (access time) Zeitpunkt des letzten Zugriffs.
|-
| <b>ctime</b> || (change time) Zeitpunkt der letzten Änderung des Dateistatus.
|-
| <b>mtime</b> || (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.
$ <b>cat tit-1 tit-2 tit-3 > TITEL</b>
$ <b>cat tit-* > TITEL</b>
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.
* https://unix.stackexchange.com/questions/120642/what-defines-the-maximum-size-for-a-command-single-argument
$ <b>grep ARG_MAX /usr/include/linux/limits.h</b>
#define ARG_MAX      131072 /* # bytes of args + environ for exec() */
$ <b>expr $(getconf ARG_MAX) / 1024 / 16</b>
128
Folgender Befehl erledigt die Aufgabe am schnellsten.
$ <b>find . -name "tit-*" -exec cat {} \; > TITEL</b>
Die Ausführung der Verkettung der Befehle "find", "xargs" und "cat" dauert deutlich länger.
$ <b>find . -name "tit-*" -print0 | xargs -0 cat > TITEL</b>
Womöglich klappt auch folgendes (getestet habe ich das nicht).
$ <b>find . -name "tit-*" | while read dateiname
    do
    cat ${dateiname} >> TITEL
    done</b>
=== 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
* https://www.unix.com/shell-programming-and-scripting/166786-split-string-convert-binary.html
=== Duplikate finden ===
* https://www.makeuseof.com/best-tools-find-and-remove-duplicate-files-linux/
=== Informationen über eine Datei ===
$ <b>[[stat]] file.jpg</b>
  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
$ <b>[[ls]] -al file.jpg</b>
-rw-r--r-- 1 abc abc 43565 2011-03-19 04:06 file.jpg
$ <b>[[file]] file.jpg</b>
file.jpg: JPEG image data, JFIF standard 1.01
=== Erstellungszeit einer Datei ===
* https://unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4/50184#50184
Herausfinden der Inode-Nummer der betreffenden Datei. Im gezeigten Beispiel wurde die Datei "datei.txt" am 23. August 2018 um 10:09:25 angelegt.
# <b>stat -c %i datei.txt</b>
10879054
# <b>df -k</b>
Filesystem    1K-blocks    Used Available Use% Mounted on
<font color=red>/dev/dm-0</font>      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
# <b>debugfs -R 'stat <10879054>' /dev/dm-0</b>
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 -- <font color=green>Thu Aug 23 10:09:25 2018</font>
Size of extra inode fields: 28
EXTENTS:
(0-10239):835456-845695, (10240-10258):820225-820243


== Weblinks ==
== Weblinks ==


{{dewi|Datei|Datei}}
{{Weblinks}}
{{url_dewikipedia|Datei|Datei}}
{{Fuss}}




{{cat|Datei}}
{{cat|Datei}}
{{cat|Dateisystem}}
{{cat|Dateisystem}}

Aktuelle Version vom 17. Januar 2023, 15:05 Uhr

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
Wikipedia ger Dateiwbm Enzyklopädischer Artikel