Linux/Datei/Name: Unterschied zwischen den Versionen

Aus Foxwiki
Subpages:
K Textersetzung - „z. B.“ durch „z. B. “
K Textersetzung - „Man-Pages“ durch „Man-Page“
 
(72 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''topic''' - Kurzbeschreibung
'''Linux/Dateinamen''' - Beschreibung
 
== Beschreibung ==
== Beschreibung ==
== Installation ==
; Was ist ein Dateiname?
== Syntax ==
Identifiziert eine [[Datei]]
=== Optionen ===
* auf einem [http://de.wikipedia.org/wiki/Datenspeicher Datenträger]
=== Umgebungsvariablen ===
* bei einer [http://de.wikipedia.org/wiki/Datenübertragung Datenübertragung]
=== Exit-Status ===
== Anwendung ==
=== Fehlerbehebung ===
== Konfiguration ==
=== Dateien ===
== Anhang ==
=== Siehe auch ===
{{Special:PrefixIndex/{{BASEPAGENAME}}}}
==== Sicherheit ====
==== Dokumentation ====
===== RFC =====
===== Man-Pages =====
===== Info-Pages =====
==== Links ====
===== Einzelnachweise =====
<references />
===== Projekt =====
===== Weblinks =====
<noinclude>
=== Testfragen ===
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 1''
<div class="mw-collapsible-content">'''Antwort1'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 2''
<div class="mw-collapsible-content">'''Antwort2'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 3''
<div class="mw-collapsible-content">'''Antwort3'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 4''
<div class="mw-collapsible-content">'''Antwort4'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 5''
<div class="mw-collapsible-content">'''Antwort5'''</div>
</div>


= TMP =
; Verzeichnis
* Meist wird eine Datei zusätzlich durch einen Verzeichnisnamen charakterisiert
* sodass ein vollständiger [http://de.wikipedia.org/wiki/Pfadname Pfadname] entsteht


== Dateieigenschaften ==
Eindeutigkeit
Wenn sie sich ein Verzeichnis mit dem Kommando "<tt>'''ls·-l'''</tt>" ansehen, erhalten wir eine solche Liste:
Erst diese Kombination zu einem vollständigen Pfadnamen ist in der Regel eindeutig


total 1093
; Teile
-rw-r--r-- 1 root root 116547 May 25 1997 System.map
Dateinamen können aus mehreren Teilen bestehen
drwxr-xr-x 2 root root 1024 Sep 23 1996 bin/
* Abhängig vom jeweiligen [http://de.wikipedia.org/wiki/Betriebssystem Betriebssystem]
drwxr-xr-x 2 root root 1024 May 25 1997 boot/
* Die einzelnen Teile sind durch bestimmte Zeichen, die in der Regel nicht Teil des Dateinamens sein können, getrennt; die [http://de.wikipedia.org/wiki/Liste_von_Dateinamenserweiterungen Liste von Dateinamenserweiterungen] verschafft einen Überblick
drwxr-xr-x 2 root root 1024 Oct 27 1996 cdrom/
drwxr-xr-x 3 root root 20480 May 4 15:28 dev/
drwxr-xr-x 7 root root 2048 May 4 16:05 etc/
drwxr-xr-x 5 root root 1024 Dec 7 1997 home/
drwxr-xr-x 3 root root 1024 Sep 23 1996 lib/
drwxr-xr-x 5 root root 1024 Sep 23 1996 local/
drwxr-xr-x 2 root root 12288 Sep 23 1996 lost+found/
drwxr-xr-x 2 root root 1024 Sep 23 1996 mnt/
dr-xr-xr-x 5 root root 0 May 4 1999 proc/
drwx------ 5 root root 1024 Sep 21 1997 root/
drwxr-xr-x 4 root root 2048 Sep 23 1996 sbin/
drwxrwxrwx 4 root root 1024 Apr 6 09:18 tmp/
drwxr-xr-x 18 root root 1024 Apr 25 1997 usr/
drwxr-xr-x 14 root root 1024 Apr 25 1997 var/


; Ausgabe von rechts nach links
; Mime-Types
* '''Dateiname''', jede Zeile ist der Eintrag für eine Datei.
* Einige Betriebssysteme machen die Behandlung der Dateien von der jeweiligen [http://de.wikipedia.org/wiki/Dateinamenserweiterung Dateinamenserweiterung] abhängig, andere arbeiten ohne diese Konvention und erkennen den Dateityp anhand des Inhalts (beispielsweise anhand einer sogenannten [http://de.wikipedia.org/wiki/Magische_Zahl_%28Informatik%29 magischen Zahl])
* '''Datum und Uhrzeit''' der letzten Modifikation der Datei
* Auch auf diesen Systemen werden aber oft Dateien mit solchen Dateiendungen versehen, da es den Datenaustausch vereinfacht
* '''Größe''' der Datei in Bytes (1 Byte entspricht einem Zeichen, also z.B.
* einem Buchstaben
* '''Gruppe''' der Datei
* '''Besitzer''' der Datei
* '''Zugriffsrechte'''
* '''Dateityp''' (erstes Zeichen)
 
{| class="wikitable sortable"
|-
| | <tt>'''-'''</tt>
| | Normale Datei
|-
| | <tt>'''d'''</tt>
| | Verzeichnis
|-
| | <tt>'''c '''</tt>
| | Character (Zeichen)- Gerätedatei
|-
| | <tt>'''b'''</tt>
| | Block – Gerätedatei
|-
| | <tt>'''l'''</tt>
| | Softlink
|-
| | <tt>'''p'''</tt>
| | Pipe
|-
| | '''s'''
| | Socket
 
|-
|}


=== Dateiname ===
; Länge
* Ein Dateiname identifiziert eine [http://de.wikipedia.org/wiki/Datei Datei] auf einem [http://de.wikipedia.org/wiki/Datenspeicher Datenträger] oder bei einer [http://de.wikipedia.org/wiki/Datenübertragung Datenübertragung].
Die maximale Länge eines Dateinamens wird sowohl durch das Betriebssystem als auch durch das [http://de.wikipedia.org/wiki/Dateisystem Dateisystem] des Datenträgers begrenzt
* Meist wird eine Datei zusätzlich durch einen Verzeichnisnamen charakterisiert, sodass ein vollständiger [http://de.wikipedia.org/wiki/Pfadname Pfadname] entsteht.
* So können etwa auf einer CD-ROM bei Verwendung des [http://de.wikipedia.org/wiki/Joliet_%28Dateisystem%29 Joliet-Dateisystems] maximal 64 Zeichen genutzt werden
* Erst diese Kombination zu einem vollständigen Pfadnamen ist in der Regel eindeutig.
* Eine indirekte Begrenzung kann zudem durch eine maximale Länge von Pfadnamen im Betriebssystem entstehen
* Ein Dateiname kann – abhängig vom jeweiligen [http://de.wikipedia.org/wiki/Betriebssystem Betriebssystem] – aus mehreren Teilen bestehen.
* Ein Unterschied zwischen MS-Windows und Linux/Unix besteht darin, dass Windows bei Dateinamen nicht zwischen Groß- und Kleinschreibung unterscheidet, während Unix dies tut (zum Beispiel bezeichnen dort ''Haustuer.txt'' und ''hausTuer.txt'' unterschiedliche Dateien)
* Die einzelnen Teile sind durch bestimmte Zeichen, die in der Regel nicht Teil des Dateinamens sein können, getrennt; die [http://de.wikipedia.org/wiki/Liste_von_Dateinamenserweiterungen Liste von Dateinamenserweiterungen] verschafft einen Überblick.
* Einige Betriebssysteme machen die Behandlung der Dateien von der jeweiligen [http://de.wikipedia.org/wiki/Dateinamenserweiterung Dateinamenserweiterung] abhängig, andere arbeiten ohne diese Konvention und erkennen den Dateityp anhand des Inhalts (beispielsweise anhand einer sogenannten [http://de.wikipedia.org/wiki/Magische_Zahl_%28Informatik%29 magischen Zahl]).
* Auch auf diesen Systemen werden aber oft Dateien mit solchen Dateiendungen versehen, da es den Datenaustausch vereinfacht.
* Die maximale Länge eines Dateinamens wird sowohl durch das Betriebssystem als auch durch das [http://de.wikipedia.org/wiki/Dateisystem Dateisystem] des Datenträgers begrenzt.
* So können etwa auf einer CD-ROM bei Verwendung des [http://de.wikipedia.org/wiki/Joliet_%28Dateisystem%29 Joliet-Dateisystems] maximal 64 Zeichen genutzt werden.
* Eine indirekte Begrenzung kann zudem durch eine maximale Länge von Pfadnamen im Betriebssystem entstehen.
* Ein Unterschied zwischen MS-Windows und Linux/Unix besteht darin, dass Windows bei Dateinamen nicht zwischen Groß- und Kleinschreibung unterscheidet, während Unix dies tut (zum Beispiel bezeichnen dort ''Haustuer.txt'' und ''hausTuer.txt'' unterschiedliche Dateien).


==== Groß-/Kleinschreibung ====
=== Groß-/Kleinschreibung ===
* Im Unterschied zu Windows wird bei Linux zwischen Groß- und Kleinschreibung unterschieden.
Im Unterschied zu Windows wird bei Linux zwischen Groß- und Kleinschreibung unterschieden
* Daher ist die Datei test nicht identisch mit der Datei Test.
* Daher ist die Datei test nicht identisch mit der Datei Test
* Was am Anfang bei Umsteigern womöglich zur Verwirrung beiträgt, erweist sich nach einer Einarbeitungszeit häufig als eine praktische Eigenschaft.
* Was am Anfang bei Umsteigern womöglich zur Verwirrung beiträgt, erweist sich nach einer Einarbeitungszeit häufig als eine praktische Eigenschaft
* Der folgende Einzeiler wandelt alle Dateinamen im aktuellen Verzeichnis in Kleinbuchstaben um:
* Der folgende Einzeiler wandelt alle Dateinamen im aktuellen Verzeichnis in Kleinbuchstaben um:
  '''for i in * ; do mv -i $i $(echo $i | tr [A-ZÄÖÜ] [a-zäöü]) ; done'''
  '''for i in * ; do mv -i $i $(echo $i | tr [A-ZÄÖÜ] [a-zäöü]) ; done'''
* Mit dem ß hat der Einzeiler noch Probleme. (Warum? Es gibt kein großes ß.)
* Mit dem ß hat der Einzeiler noch Probleme. (Warum? Es gibt kein großes ß.)


==== Länge von Dateinamen ====
=== Länge von Dateinamen ===
Ein Dateiname darf 255 Zeichen lang sein.
Ein Dateiname darf 255 Zeichen lang sein
* Damit sollte es jedem gelingen, seine Dokumente aussagekräftig zu benennen.
* Damit sollte es jedem gelingen, seine Dokumente aussagekräftig zu benennen
* Wie die Erfahrung zeigt, sind Dateinamen in der Praxis selten auch nur annähernd so lang.
* Wie die Erfahrung zeigt, sind Dateinamen in der Praxis selten auch nur annähernd so lang


==== Dateiendungen ====
=== Dateiendungen ===
Eine Datei muss unter Linux keine bestimmte Endung haben, wie dies bei Windows der Fall ist (beispiel.exe oder beispiel.txt).
Eine Datei muss unter Linux keine bestimmte Endung haben, wie dies bei Windows der Fall ist (beispiel.exe oder beispiel.txt)
* Auch dies verwirrt am Anfang den Umsteiger, doch gewöhnt man sich auch daran.
* Auch dies verwirrt am Anfang den Umsteiger, doch gewöhnt man sich auch daran


Die meisten Dateien haben aber eine Endung, nicht ungewöhnlich sind auch mehrere - durch Punkte getrennte - Endungen (beispiel.tar.bz2).[http://de.wikipedia.org/wiki/Unix Unix]- und Unix-ähnliche Betriebssysteme wie zum Beispiel [http://de.wikipedia.org/wiki/Solaris_%28Betriebssystem%29 Solaris] oder [http://de.wikipedia.org/wiki/Linux Linux] betrachten Dateinamen als Ganzes.
Die meisten Dateien haben aber eine Endung, nicht ungewöhnlich sind auch mehrere - durch Punkte getrennte - Endungen (beispiel.tar.bz2).[http://de.wikipedia.org/wiki/Unix Unix]- und Unix-ähnliche Betriebssysteme wie zum Beispiel [http://de.wikipedia.org/wiki/Solaris_%28Betriebssystem%29 Solaris] oder [http://de.wikipedia.org/wiki/Linux Linux] betrachten Dateinamen als Ganzes


Eine Datei kann mehrere Namen haben und sich in mehreren Verzeichnissen befinden („hard links“ oder „bind mounts“).
Eine Datei kann mehrere Namen haben und sich in mehreren Verzeichnissen befinden („hard links“ oder „bind mounts“)
* Alle Zeichen außer dem [http://de.wikipedia.org/wiki/Schrägstrich Schrägstrich] "/" und dem [http://de.wikipedia.org/wiki/Nullzeichen Nullzeichen] sind erlaubt.
* Alle Zeichen außer dem [http://de.wikipedia.org/wiki/Schrägstrich Schrägstrich] "/" und dem [http://de.wikipedia.org/wiki/Nullzeichen Nullzeichen] sind erlaubt
* Frühe Versionen hatten 1 bis 14 Zeichen lange Dateinamen.
* Frühe Versionen hatten 1 bis 14 Zeichen lange Dateinamen
* Die [http://de.wikipedia.org/wiki/Berkeley_Software_Distribution BSD]-Varianten führten bis zu 255 Zeichen lange Namen ein.
* Die [http://de.wikipedia.org/wiki/Berkeley_Software_Distribution BSD]-Varianten führten bis zu 255 Zeichen lange Namen ein


Ein relativer Dateipfad kann aus mehreren Segmenten bestehen und beginnt mit einem Segment.
Ein relativer Dateipfad kann aus mehreren Segmenten bestehen und beginnt mit einem Segment
* Jedes Segment unterliegt den Regeln des Dateinamens, kann also 14 bzw. 255 Zeichen lang sein.
* Jedes Segment unterliegt den Regeln des Dateinamens, kann also 14 bzw.&nbsp;255 Zeichen lang sein
* Die Segmente der Dateipfade werden durch das Zeichen "/" getrennt.
* Die Segmente der Dateipfade werden durch das Zeichen "/" getrennt


Das letzte Segment kennzeichnet die eigentliche Datei.
Das letzte Segment kennzeichnet die eigentliche Datei
* Die vorhergehenden Segmente sind entweder Verzeichnisnamen oder symbolische Verweise (englisch „symbolic links“) auf Verzeichnisnamen.
* Die vorhergehenden Segmente sind entweder Verzeichnisnamen oder symbolische Verweise (englisch „symbolic links“) auf Verzeichnisnamen
* Ein relativer Dateipfad geht vom aktuellen Arbeitsverzeichnis aus, das jeder [http://de.wikipedia.org/wiki/Prozess_%28Informatik%29 Prozess] individuell setzen kann.
* Ein relativer Dateipfad geht vom aktuellen Arbeitsverzeichnis aus, das jeder [http://de.wikipedia.org/wiki/Prozess_%28Informatik%29 Prozess] individuell setzen kann


Ein absoluter Dateipfad beginnt hingegen bereits mit "/" und ist unabhängig vom aktuellen Arbeitsverzeichnis.
Ein absoluter Dateipfad beginnt hingegen bereits mit "/" und ist unabhängig vom aktuellen Arbeitsverzeichnis
* Er geht vom Wurzelverzeichnis aus. Über das Wurzelverzeichnis sind alle Dateien eines Systems erreichbar.
* Er geht vom Wurzelverzeichnis aus. Über das Wurzelverzeichnis sind alle Dateien eines Systems erreichbar


Beim Zugriff wird zwischen Groß- und Kleinschreibung unterschieden.
Beim Zugriff wird zwischen Groß- und Kleinschreibung unterschieden


===== Wichtige Dateiendungen =====
; Wichtige Dateiendungen
{| class="wikitable sortable"
{| class="wikitable sortable"
|-
|-
| | <tt>'''Zip.gz'''</tt>
| | <tt>'''.zip.gz'''</tt>
| | Mit dem ZIP Algorithmus komprimierte Datei
| | Mit dem ZIP Algorithmus komprimierte Datei
|-
|-
Zeile 169: Zeile 79:
|-
|-
| | <tt>'''.c.cpp'''</tt>
| | <tt>'''.c.cpp'''</tt>
| | C bzw.
| | C bzw.&nbsp;
* C++ Quelltext
* C++ Quelltext
|-
|-
Zeile 194: Zeile 104:
|-
|-
| | <tt>'''.rpm.tar.tgz.deb'''</tt>
| | <tt>'''.rpm.tar.tgz.deb'''</tt>
| | Verschiedene Packetformate.
| | Verschiedene Packetformate
* Packete werden verwendet, um Software zu installieren
* Packete werden verwendet, um Software zu installieren
|-
|-
Zeile 208: Zeile 118:
| | <tt>'''.dvi'''</tt>
| | <tt>'''.dvi'''</tt>
| | Device Independent - Übersetzte .tex Datei
| | Device Independent - Übersetzte .tex Datei
|-
|-
|}
|}
=== Beispiele ===
/home/user/Dokumente/brief.txt
/usr/bin/texteditor
Der Dateiname '.' (Punkt) bezeichnet das aktuelle Arbeitsverzeichnis.
* Der Name '..' verweist auf das übergeordnete Verzeichnis.
Auch das Leerzeichen, der Zeilentrenner oder die sogenannten [http://de.wikipedia.org/wiki/Wildcard_%28Informatik%29 Wildcards] '*' und '?' können Teil eines Pfadnamens sein.
* Solche Zeichen bringen allerdings manchmal später Probleme mit sich, da zum Beispiel schlecht programmierte [http://de.wikipedia.org/wiki/Skriptsprache Skripte] damit nicht umgehen können.
Weiterhin kann es Probleme mit Dateinamen geben, die Zeichen enthalten, die im aktuell verwendeten Zeichensatz eines Programms nicht vorkommen (zum Beispiel japanische Zeichen auf einem amerikanisch eingerichteten System).
Die nicht darstellbaren Zeichen werden dann oft als Fragezeichen oder kleine Kästchen angezeigt, was den Zugriff auf die Daten sehr schwierig macht.
Diese Dateien können dann oft nur bearbeitet werden, nachdem sie auf einer niedrigen Dateisystem-Abstraktionsebene umbenannt wurden (zum Beispiel durch Angabe der sogenannten inode statt des Dateinamens mit <tt>ls -i</tt> und <tt>find . -inum […] -exec mv {} […] \;</tt>).
Ein Unix-System verwendet keine speziellen Erweiterungen, wie .EXE oder .CMD.
* Es hat sich allerdings eingebürgert, Dateien eines bestimmten Types, wie in anderen Betriebssystemen, auch mit einem Punkt und einer entsprechenden Erweiterung zu versehen, um die Übersichtlichkeit zu erhöhen.
Beispielsweise wird die Endung ''.c'' für C-Quellprogramme verwendet.
* Ausführbare Dateien, also Programme und Skripte, erhalten keine Endung.
* Dateitypen können ansonsten mit dem einfachen Programm "file", unabhängig von einer eventuell vorhandenen Erweiterung ermittelt werden.
Dateien oder Verzeichnisse, deren Namen mit einem Punkt beginnen, werden üblicherweise als „versteckte“ Dateien behandelt und nur angezeigt, wenn der Benutzer dies explizit angibt (zum Beispiel mit <tt>ls -a</tt>). Ähnliches gilt für Verzeichnispfade.


=== Dateisysteme ===
=== Dateisysteme ===
{| class="wikitable sortable"
{| class="wikitable options"
|-
|-
! | Dateisystem
! | Dateisystem
Zeile 296: Zeile 180:
|-
|-
|}
|}
(1) Bei Verwendung von [http://de.wikipedia.org/wiki/UTF-8 UTF-8]-Codierung und Benutzung von Nicht-ASCII-Zeichen stehen zwar 255 ''Byte'', aber weniger als 255 ''Zeichen'' zur Verfügung.
:Anmerkungen
:# Bei Verwendung von [http://de.wikipedia.org/wiki/UTF-8 UTF-8]-Codierung und Benutzung von Nicht-ASCII-Zeichen stehen zwar 255 ''Byte'', aber weniger als 255 ''Zeichen'' zur Verfügung
:# Die Codierung ist nicht genormt; als Voreinstellung wird meist UTF-8 verwendet
:# Bei Verwendung langer Unicode-Pfade sind lediglich 255 Zeichen möglich


(2) Die Codierung ist nicht genormt; als Voreinstellung wird meist UTF-8 verwendet.
== Anwendung ==
<noinclude>


(3) Bei Verwendung langer Unicode-Pfade sind lediglich 255 Zeichen möglich
== Anhang ==
=== Siehe auch ===
* [[stat]]
{{Special:PrefixIndex/{{BASEPAGENAME}}}}


== Dateieistatus anzeigen ==
==== Dokumentation ====
 
===== Man-Page =====
[[stat]]
===== Info-Pages =====
 
==== Links ====
== Zeitstempel ==
===== Projekt =====
[[Linux/Datei:Zeitstempel]]
===== Weblinks =====
 
== Dateityp ==
===== Dateityp anzeigen (file) =====
<tt>'''file'''</tt> bestimmt den Dateityp
 
'''file''' [-c ] [-f ''Namendatei''] [-m ''Magiedatei''] ''Datei'' ...
 
<tt>'''file'''</tt> versucht die Art oder den Typ der angegebenen ''Datei'' zu bestimmen.
* Dazu werden drei Tests durchgeführt: ein Dateisystemtest, ein Kennzahlentest und ein Sprachtest.
* Der erste erfolgreiche Test führt zur Ausgabe des erkannten Dateityps.
 
Der erkannte Typ enthält normalerweise eines der Schlüsselwörter `text' für Dateien, die ohne Schwierigkeiten angezeigt werden können, `executable' für Dateien, die ausführbare Programme enthalten und auf dem einen oder anderen Unix-Rechner auch ausgeführt werden können, und `data' für alle anderen Dateien, die normalerweise nicht angezeigt werden können.
 
Nur allgemein bekannte Dateiformate wie <tt>core</tt>-Dateien oder <tt>tar</tt> Archive werden ohne diese Schlüsselwörter benannt.
* Der Dateisystemtest wird mit Hilfe des <tt>stat</tt>(2) Systemaufrufs durchgeführt.
* Hier werden leere Dateien ebenso erkannt wie alle Gerätedateien, Sockets, symbolische Links und andere Spezialdateien.
 
Der Kennzahlentest kann einige Dateien anhand festgelegter Kennzahlen - sogenannter `magic numbers' - erkennen, die sich in der Nähe des Dateianfangs an einer festgelegten Stelle befinden.
 
Mit Hilfe solcher Kennzahlen entscheidet beispielsweise das Betriebssystem, ob eine Datei korrekt ausführbar ist oder nicht.
* Diese Kennzahlen sind in der Datei /etc/magic abgespeichert.
* Wenn eine Datei als Text erkannt ist, versucht <tt>file</tt> noch, die (Programmier-)Sprache zu erkennen, indem es nach bestimmten Schlüsselwörtern sucht.
 
Auf diese Weise kann beispielsweise C-Quelltext oder die Eingabe für den <tt>groff</tt> Textprozessor erkannt werden.
 
====== Optionen ======
{| class="wikitable sortable"
|-
| | <tt>'''-m ''Magiedatei'' '''</tt>
| | benutzt die benannte ''Magiedatei'' anstelle von /etc/magic für den Kennzahlentest
|-
| | <tt>'''-c '''</tt>
| | gibt den interpretierten Inhalt der Kennzahlendatei für Testzwecke aus
|-
| | <tt>'''-f ''Namendatei'' '''</tt>
| | veranlaßt <tt>file</tt>, die Namen der zu untersuchenden Programme aus der ''Namendatei'' zu lesen; in der Namendatei werden die Dateinamen durch Zeilenende getrennt aufgeführt
 
|-
|}
===== Normale Dateien =====
* Normale Dateien (normal files)
* Dateien im üblichen Sinn: Text- oder Binärdateien
* Das System unterstützt keine Dateistruktur
* Dateien sind Bytefolgen (Strukturierung nur durch das Programm)
 
===== Gerätedateien =====
Die Dateien im <tt>'''/dev'''</tt> Verzeichnis sind, wie bereits angedeutet "Pipelines" zur Hardware des Computers.
 
Die meisten Dateien können (die entsprechenden Zugriffsrechte vorausgesetzt) sowohl ausgelesen als auch beschrieben werden.
 
Einige, welche Statusinformationen über die Hardware liefern können selbstverständlich nur ausgelesen werden, während andere, welche die Hardware konfigurieren nur geschrieben werden können.
 
D.h.
* auf die einzelnen Hardwarekomponenten des Computers kann wie auf Dateien zugegriffen werden.
 
Vorteil dieses Konzepts: Auf diese Weise kann auf die Hardware zugegriffen werden (z.B.
* aus Shellscripten heraus), ohne dass spezielle Hilfsprogramme geschrieben werden müssen.
 
Die folgende Tabelle enthält eine Liste der wichtigsten Gerätedateien, samt Beschreibung:
 
{| class="wikitable sortable"
|-
! | Gerätedatei
!colspan="2" | | Bedeutung
|-
| | <tt>'''sdasdbsdcsdd'''</tt>
| | erstezweitedrittevierte
| | SCSI/SATA-Festplatte
|-
| | <tt>'''sda1sda2sda3sda4'''</tt>
| | erstezweitedrittevierte
| | Festplattenpartition auf der ersten SCSI/SATA-Festplatte
|-
| | <tt>'''hda'''</tt>
| colspan="2" | wie s<tt>'''da'''</tt>, nur für IDE-Festplatten
|-
| | <tt>'''ttyS0ttyS1'''</tt>
| colspan="2" | Erste und zweite serielle Schnittstelle (COM1 und COM2 unter DOS)
|-
| | <tt>'''audiodspsndstatmidi00'''</tt>
| colspan="2" | Zugriff auf die Soundblasterkarte
|-
| | <tt>'''psaux'''</tt>
| colspan="2" | Zugriff auf die PS/2 Schnittstelle
|-
| | <tt>'''lp0lp1lp2'''</tt>
| colspan="2" | Zugriff auf die parallele Schnittstelle
|-
| | <tt>'''fd0'''</tt>
| colspan="2" | Zugriff auf das erste Diskettenlaufwerk
|-
|}
Dies ist selbstverständlich nur eine kleine Zusammenstellung.
* Eine vollständige Liste findet sich unter:
 
/usr/src/linux/Documentation/devices.txt
 
====== Besondere Geräte ======
{| class="wikitable sortable"
|-
| | <tt>'''/dev/zero'''</tt>
| | liefert unendlich vielen Nullen
|-
| | <tt>'''/dev/null'''</tt>
| | schluckt alle Daten die es erhält
|-
| | '''/dev/random'''
| | liefert [http://de.wikipedia.org/wiki/Zufallszahlengenerator Zufallszahlen] von hoher Qualität
|-
| | '''/dev/urandom'''
| | liefert unendlich viele [http://de.wikipedia.org/wiki/Zufallszahlengenerator Zufallszahlen]
 
|-
|}
======= /dev/null =======
'''/dev/null''' ([http://de.wikipedia.org/wiki/Englische_Sprache englisch] ''null'': dt. „nichts“) ist der Name einer speziellen [http://de.wikipedia.org/wiki/Gerätedatei#Virtuelle_Ger.C3.A4tedateien virtuellen Gerätedatei], des ''Nulldevice'', auf [http://de.wikipedia.org/wiki/Unix Unix] und Unix-ähnlichen [http://de.wikipedia.org/wiki/Betriebssystem Betriebssystemen], die jegliche Daten, die dorthin geschrieben werden, verwirft.
* Unter [http://de.wikipedia.org/wiki/CP/M CP/M] und seinen Abkömmlingen [http://de.wikipedia.org/wiki/PC-kompatibles_DOS DOS], [http://de.wikipedia.org/wiki/OS/2 OS/2] und [http://de.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows] wird das Nulldevice als <tt>NUL:</tt> angesprochen.
* Unter [http://de.wikipedia.org/wiki/Disk_Operating_System DOS] und Nachfolgerbetriebssystemen existiert das Nulldevice in jedem Verzeichnis unter dem Dateinamen <tt>NUL</tt>.
* Die Datei <tt>/dev/null</tt> ist durch den [http://de.wikipedia.org/wiki/Portable_Operating_System_Interface POSIX]-Standard standardisiert.
 
======= Verwendung =======
Eine häufige Verwendung ist z.&nbsp;B.&nbsp;, in einer [http://de.wikipedia.org/wiki/Unix-Shell Shell]-Sitzung die Meldungen eines Programms von der [http://de.wikipedia.org/wiki/Stdout Standardausgabe] statt auf den Bildschirm nach <tt>/dev/null</tt> umzuleiten, wenn man an ihnen nicht interessiert ist; sie werden dann nicht angezeigt.
 
Das Gerät <tt>/dev/null</tt> kann auch als Ziel bei Dateisystemoperationen dienen.
 
Ein solcher Zweck tritt gelegentlich auf, wenn Shellskripte oder Programme unbedingt eine Dateiangabe erfordern, diese im vorliegenden Fall aber keinen Sinn ergibt oder unerwünscht ist.
 
Lesezugriffe liefern sofort ein Dateiende ([http://de.wikipedia.org/wiki/End_of_File End of File], „EOF“).
* Dabei verhält sich das Gerät wie eine gewöhnliche Datei, das öffnende Programm muss also keine besonderen Vorkehrungen treffen.
 
In der [http://de.wikipedia.org/wiki/Netzkultur Netzkultur] ist <tt>/dev/null</tt> ein umgangssprachlich verwendeter Begriff für eine Art gedankliches [http://de.wikipedia.org/wiki/Schwarzes_Loch Schwarzes Loch], meist um Desinteresse an der Aussage des Gesprächspartners zu bekunden.
 
======= Beispiele =======
Wenn man nur die normale Ausgabe eines Programms sehen will, nicht aber die Fehlermeldungen und sonstigen Informationen, die das Programm in die [http://de.wikipedia.org/wiki/Standard-Datenströme#Standardfehlerausgabe_.28stderr.29 Standardfehlerausgabe] schreibt, kann man diese umleiten:
 
$ programm 2>/dev/null
 
Möchte man für Shell-Skripte nur den Rückgabewert eines Programms verwenden und somit sämtliche Ausgaben nach <tt>/dev/null</tt> umleiten, kann die folgende Syntax verwendet werden:
 
$ programm >/dev/null 2>&1
 
Mittels Shell-[http://de.wikipedia.org/wiki/Pipe_%28Informatik%29 Pipes] kann man selektiv uninteressante (Fehler-)Meldungen von Teilen der Pipeline ausblenden:
 
$ programm1 2>/dev/null | programm2 | ...
 
Ähnlich ist die Verwendung mittels [http://de.wikipedia.org/wiki/Symbolische_Verknüpfung symbolischer Verknüpfung], danach wird alles, was in die verlinkte Datei (<tt>~/.bash_history</tt>) geschrieben wird, nicht gespeichert, beispielsweise zum [http://de.wikipedia.org/wiki/Datenschutz Datenschutz]:
 
$ ln -sf /dev/null ~/.bash_history
 
Auch üblich ist die Verwendung für die Standardeingabe.
* Ein Beispiel dafür ist das Ausführen eines Kommandos im Hintergrund während einer [http://de.wikipedia.org/wiki/Secure_Shell SSH]-Sitzung.
* Dabei wird die Standardeingabe an <tt>/dev/null</tt> übergeben, womit das Programm im Hintergrund weiterläuft, auch wenn man sich aus der SSH-Sitzung ausloggt:
 
$ ssh example.com "programm </dev/null >/dev/null 2>&1 &"
 
Man kann auch einen Datenträger überprüfen, indem z.&nbsp;B.&nbsp; <tt>/dev/cdrom0</tt> nach <tt>/dev/null</tt> kopiert wird.
* Wenn hierbei ein Fehler auftritt, ist der entsprechende Datenträger beschädigt oder nicht vorhanden.
 
$ dd if=/dev/cdrom of=/dev/null
 
======= /dev/zero =======
<tt>'''/dev/zero'''</tt> ist eine spezielle [http://de.wikipedia.org/wiki/Virtuelle_Gerätedatei virtuellen Gerätedatei] auf [http://de.wikipedia.org/wiki/Unix Unix] und [http://de.wikipedia.org/wiki/Unixoides_System unixoiden Systemen], die bei jedem Lesezugriff [http://de.wikipedia.org/wiki/Nullzeichen Nullzeichen] zurückgeliefert.
* Im Gegensatz zu [http://de.wikipedia.org/wiki//dev/null /dev/null] ist <tt>/dev/zero</tt> nicht Bestandteil des [http://de.wikipedia.org/wiki/Portable_Operating_System_Interface POSIX]-Standard.
 
<tt>/dev/zero</tt> wurde mit [http://de.wikipedia.org/wiki/SunOS SunOS]-4.0 im Jahre 1987 gemeinsam mit dem neuen VM-Subsystem eingeführt.
 
======= Details =======
Wenn auf <tt>/dev/zero</tt> geschrieben wird, verhält sich <tt>/dev/zero</tt> wie <tt>/dev/null</tt>.
 
Bei einem ''mmap'' auf <tt>/dev/zero</tt> werden anonyme genullte Seiten aus dem virtuellen [http://de.wikipedia.org/wiki/Speicherpool Speicherpool] des [http://de.wikipedia.org/wiki/Kernel_%28Betriebssystem%29 Kernels] zur Verfügung gestellt.
 
Viele Betriebssysteme verwenden diesen ''mmap''-Mechanismus, um Programmen und [http://de.wikipedia.org/wiki/Shared_Library Shared Libraries] den sogenannten ''nichtinitialisierten''-Datenbereich zur Verfügung zu stellen.
 
Viele Programme verwenden Datenbereiche, die durch einen ''mmap'' auf <tt>/dev/zero</tt> erzeugt wurden, als Basis für [http://de.wikipedia.org/wiki/Shared_Memory Shared Memory], das zur Kommunikation zwischen mehreren [http://de.wikipedia.org/wiki/Prozess_%28Informatik%29 Prozessen] verwendet wird.
 
======= Beispiele =======
Das folgende [http://de.wikipedia.org/wiki/Unix-Kommando Unix-Kommando] erzeugt eine Datei namens ''file'', die 12 MB groß ist und nur das [http://de.wikipedia.org/wiki/Nullzeichen Nullzeichen] enthält:
 
[http://de.wikipedia.org/wiki/Dd_%28Unix%29 dd] if=/dev/zero of=file bs=1M count=12
 
======= /dev/random =======
<tt>/dev/random</tt> ist eine zeichen-orientierte [http://de.wikipedia.org/wiki/Virtuelle_Gerätedatei virtuelle Gerätedatei], über die Programme auf einen systemweiten [http://de.wikipedia.org/wiki/Zufallszahlengenerator Zufallszahlengenerator] von hoher Qualität zugreifen können.
 
Da für [http://de.wikipedia.org/wiki/Rechnernetz netzwerk]-orientierte Systeme wie Unix [http://de.wikipedia.org/wiki/Kryptografie Kryptografie]-Dienste und damit [http://de.wikipedia.org/wiki/Zufallszahl Zufallszahlen] eine bedeutende Rolle spielen, kommt dieser Datei und dem dahinterstehenden Treiber eine wichtige Bedeutung zu.
 
Der Zufallsgenerator sammelt [http://de.wikipedia.org/w/index.php?title=Umgebungsrauschen&action=edit&redlink=1 Umgebungsrauschen] von [http://de.wikipedia.org/wiki/Gerätetreiber Gerätetreibern] und anderen Quellen in einem [http://de.wikipedia.org/wiki/Entropie_%28Informationstheorie%29 Entropiepool].
* Der Generator speichert auch eine Abschätzung über die Anzahl der [http://de.wikipedia.org/wiki/Bit Bit] im Entropiepool.
 
Aus diesem Pool werden die Zufallszahlen generiert.
* Beim Lesen gibt <tt>/dev/random</tt> nur solange Zufallszahlen zurück, bis die abgeschätzte Entropiemenge erschöpft ist.
 
Wenn der Entropiepool erschöpft ist, blockieren Lesezugriffe auf <tt>/dev/random</tt>, bis zusätzliches Umgebungsrauschen erhalten wurde. <tt>/dev/random</tt> sollte ausreichend sein für Anwendungszwecke, die auf eine sehr hohe Qualität der Zufälligkeit angewiesen sind, wie etwa [http://de.wikipedia.org/wiki/Kryptografie Kryptografie] (beispielsweise [http://de.wikipedia.org/wiki/One-Time-Pad One-Time-Pads] oder [http://de.wikipedia.org/wiki/Public_Key Schlüsselerzeugung]).
 
Aus Performancegründen wird in der Praxis oft nur der Seed eines Pseudo-Zufallszahlengenerators von <tt>/dev/random</tt> gelesen (z.&nbsp;B.&nbsp;
* in [http://de.wikipedia.org/wiki/OpenSSL OpenSSL], [http://de.wikipedia.org/wiki/Pretty_Good_Privacy PGP] und [http://de.wikipedia.org/wiki/GnuPG GnuPG]).
 
Der aktuelle Füllstand des Entropiepools lässt sich unter [http://de.wikipedia.org/wiki/Linux_%28Kernel%29 Linux] aus der Datei <tt>/proc/sys/kernel/random/entropy_avail</tt> ermitteln.
 
Eine Ausgabe der Datei liefert die verfügbare Entropie in bit, wobei das Maximum von 4096 bit einem vollständig gefüllten Entropiepool entspricht.
 
======= /dev/urandom =======
Aus <tt>/dev/urandom</tt> (von engl.
* unlimited random(ness)) können wie aus <tt>/dev/random</tt> Zufallszahlen gelesen werden.
 
Im Gegensatz zu letzterem blockiert es jedoch nicht, wenn eine definierte Entropieschwelle unterschritten wird.
 
In diesem Fall ist es theoretisch möglich, dass die erzeugten [http://de.wikipedia.org/wiki/Pseudozufall Pseudozufallszahlen] im Nachhinein von einem Angreifer berechnet werden können.
* Im Zweifelsfall sollte bei hohen Anforderungen, z.&nbsp;B.&nbsp;
* bei One-Time-Pads, auf <tt>/dev/random</tt> zurückgegriffen werden.
 
======= Verbesserung der Entropie =======
Über Software, wie z.&nbsp;B.&nbsp; <tt>timer_entropyd</tt>, <tt>haveged</tt>, <tt>randomsound</tt>, lässt sich die Entropie verbessern sowie bzw.
* der Entropie-Pool vergrößern, sodass mehr Zufallszahlen zur Verfügung stehen.
 
Mit der [http://de.wikipedia.org/wiki/GNU GNU]-Software <tt>rng-tools</tt> lassen sich unter Linux und ähnlichen Betriebssystemen [http://de.wikipedia.org/wiki/Zufallszahlengenerator#Physikalischer_Zufallszahlengenerator physikalische Zufallszahlengeneratoren] einbinden.
 
===== Zusammenfassung: Gerätedateien =====
* Spezialdateien (special files)
* Geräte werden als Spezialdatei eingetragen
* Zugriff auf Gerät  Zugriff auf eine Datei
* Schutzmechanismus wie für normale Dateien
* Blockorientierte und zeichenorientierte Geräte
 
====== Named Pipes estellen (mkfifo) ======
mkfifo erstellt named pipes (FIFOs) mit dem übergebenen Namen.
 
'''mkfifo '''[''OPTION'']... ''NAME''...
 
======= Optionen =======
-'''m''', --'''mode'''<nowiki>=</nowiki>''MODE Setzt Zugriffsrechte mit Bitmaske (MODE)''
 
-'''Z''', --'''context'''<nowiki>=</nowiki>''CTX Setzt den ''SELinux security context für jeden NAME auf CTX
 
====== Gerätedateien erzeugen (mknod) ======
<tt>'''mknod'''</tt> erzeugt eine Spezialdatei
 
'''mknod''' ''[-m Modus] [-mode=Modus] Name {bcu} Major Minor''
'''mknod''' ''[-m Modus] [-mode=Modus] Pfad p''
 
<tt>'''mknod'''</tt> erzeugt ein FIFO, eine Gerätedatei für ein zeichenorientiertes Gerät (character device) oder für ein blockorientiertes Gerät (block-device) mit dem angegebenen ''Namen''.
 
Die Gerätedateien werden über die Major Device Nummern (Hauptgerätenummern) mit den entsprechenden Gerätetreibern im Kernel verbunden.
 
Mehrere Geräte der gleichen Art werden vom Gerätetreiber durch die Minor Device Nummern (Untergerätenummern) unterschieden.
 
Eine vollständige Liste aller Gerätenummern finden Sie bei den Kernelsourcen in der Datei <tt>./src/linux/Documentation/devices.txt</tt>.
* Die verbindliche Liste aller registrierten Hauptgerätenummern befindet sich in der Includedatei <tt><linux/major.h></tt>.
 
Die Zugriffsrechte auf die Datei werden aus der Bitdifferenz von 0666 und der aktuellen ''umask'' des aufrufenden Prozesses gebildet.
 
Der erste Buchstabe nach dem ''Namen'' gibt den Typ der Datei an:
 
{| class="wikitable sortable"
|-
| | <tt>'''p '''</tt>
| | (pipe) erzeugt eine FIFO Spezialdatei (wie [../../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node79.html#mkfifo mkfifo])
|-
| | <tt>'''b '''</tt>
| | (block) erzeugt eine Gerätedatei für ein (gepuffertes) blockorientiertes Gerät
|-
| | <tt>'''c '''</tt>
| | (character) erzeugt eine ungepufferte Gerätedatei für ein zeichenorientiertes Gerät
|-
| | <tt>'''u '''</tt>
| | (unbuffered) das Gleiche wie ''c''
 
|-
|}
======= Optionen =======
{| class="wikitable sortable"
|-
| | <tt>'''-m ''Modus'' '''</tt>
| | setzt die Rechte der Dateien auf ''Modus'' wie bei [../../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node29.html#chmod chmod]
 
|-
|}
 
====== Verwaltung der Gerätedateien mit udev ======
udev ersetzt seit dem Kernel 2.6 das früher genutzte [http://de.wikipedia.org/wiki/Devfs devfs]-Dateisystem, dessen Aufgaben es damit übernimmt.
 
Genauso wie devfs verwaltet udev das /dev-Verzeichnis, welches die speziellen [http://de.wikipedia.org/wiki/Gerätedatei Gerätedateien] enthält, um von Programmen aus auf die vom System zur Verfügung gestellten Geräte zuzugreifen.
 
Mit der Einführung von udev waren sowohl udev als auch devfs im Kernel enthalten.
* Seit Ende Juni 2006 ist nur noch udev enthalten, devfs wurde vollständig entfernt.
 
======= Arbeitsweise =======
'''udev''' überwacht und wertet [http://de.wikipedia.org/wiki/Hot-Plug hotplug]-Ereignisse aus.
 
Finden sich dort Informationen über ein neu angeschlossenes Gerät, werden zusätzliche zu diesem Gerät vorhandene Informationen dem [http://de.wikipedia.org/w/index.php?title=Sysfs&action=edit&redlink=1 sysfs]-Dateisystem entnommen und eine neue Gerätedatei im /dev-Verzeichnis erzeugt.
 
Dabei ist der für die spezielle Datei verwendete Name und die [http://de.wikipedia.org/wiki/Dateiberechtigung Zugriffsberechtigung] frei durch Regeln konfigurierbar.
 
======= Konfiguration =======
Installiert man udev, so findet man die Standardregeln unter <tt>/etc/udev/rules.d/50-udev.rules</tt>.
 
Um die eigenen Regeln anwenden zu können, sollte man diese Datei nicht verändern, sondern eine neuere mit kleinerer Nummer erzeugen, zum Beispiel <tt>/etc/udev/rules.d/10-udev.rules</tt>.
 
Somit ist gewährleistet, dass diese Regeln zuerst erkannt werden.
* Wurde eine Regel gefunden, so wird diese, und auch jede passende folgende, angewandt.
 
======= Vorteile =======
Im Unterschied zu devfs, welches im Linux-Kernel selbst integriert ist, arbeitet udev im [http://de.wikipedia.org/wiki/Userspace userspace], wird also als normales Programm gestartet.
 
Die Verwaltung und Namensgebung der angeschlossenen Geräte liegt dadurch nicht mehr beim Kernel und ist somit einfacher konfigurierbar.
 
Weitere Vorteile:* die Zuordnung von Geräten ist eindeutig – es entstehen keine Probleme mehr, wenn man z.&nbsp;B.&nbsp;
* die Reihenfolge von zwei angeschlossenen USB-Druckern ändert
* die Benennung der Geräte kann durch den Nutzer gewählt werden; sie bleibt beständig
* für die Ermittlung der Gerätenamen können beliebige Verfahren zur Anwendung kommen, neben statischen Listen und Regeln z.&nbsp;B.&nbsp;
* auch die Abfrage einer externen Datenbank, wodurch sich beispielsweise Geräte innerhalb eines Unternehmensnetzwerkes - durch ihre Seriennummer identifiziert - einheitlich verhalten
* die Benennung ist [http://de.wikipedia.org/wiki/Linux_Standard_Base Linux-Standard-Base]-konform
 
======= Nachteile =======
Ein beabsichtigter Nachteil von udev besteht darin, dass es im Gegensatz zu devfs beim Aufruf eines /dev-Knotens nicht automatisch die entsprechenden [http://de.wikipedia.org/wiki/Gerätetreiber Gerätetreiber] lädt.
 
Funktioniert beim Einstecken eines Gerätes HotPlug nicht richtig und laden die benötigten Treiber nicht, können diese nicht mit udev nachgeladen werden.
 
= TMP =
== Dateinamen bereinigen ==
{| class="wikitable sortable options"
|-
! Werkzeug !! Beschreibung
|-
| [[detox]] || benennt Dateien um, damit sie leichter zu handhaben sind
|-
| [[convmv]] || konvertiert den Zeichensatz von Dateinamen
|-
| [[fslint]] || Utility to Fix Problems with Filesystems Data
|-
| mv/sed || $ '''mv 'file' $(echo 'file' | sed -e 's/[^A-Za-z0-9._-]/_/g')'''
|-
| [[rename]] ||
rename 's/[^\x00-\x7F]//g' *
find . -exec rename 's/[^\x00-\x7F]//g' "{}" \;y
|-
| find/perl ||
find /path/to/files -type f -print0 | \
perl -n0e '$new = $_; if($new =~ s/[^[:ascii:]]/_/g) {
  print("Renaming $_ to $new\n"); rename($_, $new);
}'
|-
| [[bleachbit]] || Unnötige Dateien entfernen, Speicherplatz freigeben und die Privatsphäre wahren
|}
 
== Dateien mit führendem Bindestrich ==
Einige Linux-Tools erzeugen Dateien mit führendem Bindestrich oder Bindestrich (-) in Dateinamen. Oder Ihr handgeschriebenes Programm kann versehentlich Dateinamen erzeugen, die mit einem Minus beginnen. Wenn Sie versuchen, solche Dateien mit ls, rm, cp, mv oder chmod zu entfernen, zu kopieren, umzubenennen oder anderweitig darauf zuzugreifen, erhalten Sie die folgenden Fehlermeldungen.
[cmd]: Ungültige Option --
 
Das liegt daran, dass Ihr Linux-System das führende Minus im Dateinamen als Teil einer Befehlszeilenoption interpretiert und eine ungültige Option oder einen nicht existierenden Modusfehler ausgibt.
 
Um mit einem führenden Bindestrich im Dateinamen unter der Linux-Shell umzugehen, können Sie eine der beiden folgenden Methoden ausprobieren.
 
; Methode Eins
Da ein führendes Minuszeichen im Dateinamen zu Mehrdeutigkeiten bei der Erkennung des Dateinamens führt, müssen Sie diese Mehrdeutigkeit einfach beseitigen, indem Sie dem Dateinamen einen Pfadnamen voranstellen. Wenn Sie zum Beispiel eine Datei mit dem Namen -my.txt im aktuellen Verzeichnis haben, können Sie sie wie folgt aufrufen.
$ chmod 600 ./-mein.txt
$ rm ./-mein.txt


; Methode zwei
[[Kategorie:Linux/Datei/Name]]
Die zweite Methode, mit einem führenden Bindestrich umzugehen, besteht darin, ein spezielles Argument zu nutzen, das von getopt() als "Ende der Option" interpretiert wird. Die meisten Standard-Linux-Befehlszeilenprogramme verwenden getopt(), um Befehlszeilenargumente zu verarbeiten. Wenn getopt() auf -- stößt, stoppt es den Options-Scan-Prozess. Fügen Sie daher einfach -- vor dem Dateinamen ein, um deutlich zu machen, dass der Dateiname mit Bindestrich nicht Teil der Kommandozeilenargumente ist.
$ chmod -- 600 -meine.txt
$ rm -- -meine.txt


[[Kategorie:Linux/Datei/Dateinamen]]
</noinclude>
</noinclude>

Aktuelle Version vom 6. November 2024, 12:33 Uhr

Linux/Dateinamen - Beschreibung

Beschreibung

Was ist ein Dateiname?

Identifiziert eine Datei

Verzeichnis
  • Meist wird eine Datei zusätzlich durch einen Verzeichnisnamen charakterisiert
  • sodass ein vollständiger Pfadname entsteht

Eindeutigkeit Erst diese Kombination zu einem vollständigen Pfadnamen ist in der Regel eindeutig

Teile

Dateinamen können aus mehreren Teilen bestehen

Mime-Types
  • Einige Betriebssysteme machen die Behandlung der Dateien von der jeweiligen Dateinamenserweiterung abhängig, andere arbeiten ohne diese Konvention und erkennen den Dateityp anhand des Inhalts (beispielsweise anhand einer sogenannten magischen Zahl)
  • Auch auf diesen Systemen werden aber oft Dateien mit solchen Dateiendungen versehen, da es den Datenaustausch vereinfacht
Länge

Die maximale Länge eines Dateinamens wird sowohl durch das Betriebssystem als auch durch das Dateisystem des Datenträgers begrenzt

  • So können etwa auf einer CD-ROM bei Verwendung des Joliet-Dateisystems maximal 64 Zeichen genutzt werden
  • Eine indirekte Begrenzung kann zudem durch eine maximale Länge von Pfadnamen im Betriebssystem entstehen
  • Ein Unterschied zwischen MS-Windows und Linux/Unix besteht darin, dass Windows bei Dateinamen nicht zwischen Groß- und Kleinschreibung unterscheidet, während Unix dies tut (zum Beispiel bezeichnen dort Haustuer.txt und hausTuer.txt unterschiedliche Dateien)

Groß-/Kleinschreibung

Im Unterschied zu Windows wird bei Linux zwischen Groß- und Kleinschreibung unterschieden

  • Daher ist die Datei test nicht identisch mit der Datei Test
  • Was am Anfang bei Umsteigern womöglich zur Verwirrung beiträgt, erweist sich nach einer Einarbeitungszeit häufig als eine praktische Eigenschaft
  • Der folgende Einzeiler wandelt alle Dateinamen im aktuellen Verzeichnis in Kleinbuchstaben um:
for i in * ; do mv -i $i $(echo $i | tr [A-ZÄÖÜ] [a-zäöü]) ; done
  • Mit dem ß hat der Einzeiler noch Probleme. (Warum? Es gibt kein großes ß.)

Länge von Dateinamen

Ein Dateiname darf 255 Zeichen lang sein

  • Damit sollte es jedem gelingen, seine Dokumente aussagekräftig zu benennen
  • Wie die Erfahrung zeigt, sind Dateinamen in der Praxis selten auch nur annähernd so lang

Dateiendungen

Eine Datei muss unter Linux keine bestimmte Endung haben, wie dies bei Windows der Fall ist (beispiel.exe oder beispiel.txt)

  • Auch dies verwirrt am Anfang den Umsteiger, doch gewöhnt man sich auch daran

Die meisten Dateien haben aber eine Endung, nicht ungewöhnlich sind auch mehrere - durch Punkte getrennte - Endungen (beispiel.tar.bz2).Unix- und Unix-ähnliche Betriebssysteme wie zum Beispiel Solaris oder Linux betrachten Dateinamen als Ganzes

Eine Datei kann mehrere Namen haben und sich in mehreren Verzeichnissen befinden („hard links“ oder „bind mounts“)

  • Alle Zeichen außer dem Schrägstrich "/" und dem Nullzeichen sind erlaubt
  • Frühe Versionen hatten 1 bis 14 Zeichen lange Dateinamen
  • Die BSD-Varianten führten bis zu 255 Zeichen lange Namen ein

Ein relativer Dateipfad kann aus mehreren Segmenten bestehen und beginnt mit einem Segment

  • Jedes Segment unterliegt den Regeln des Dateinamens, kann also 14 bzw. 255 Zeichen lang sein
  • Die Segmente der Dateipfade werden durch das Zeichen "/" getrennt

Das letzte Segment kennzeichnet die eigentliche Datei

  • Die vorhergehenden Segmente sind entweder Verzeichnisnamen oder symbolische Verweise (englisch „symbolic links“) auf Verzeichnisnamen
  • Ein relativer Dateipfad geht vom aktuellen Arbeitsverzeichnis aus, das jeder Prozess individuell setzen kann

Ein absoluter Dateipfad beginnt hingegen bereits mit "/" und ist unabhängig vom aktuellen Arbeitsverzeichnis

  • Er geht vom Wurzelverzeichnis aus. Über das Wurzelverzeichnis sind alle Dateien eines Systems erreichbar

Beim Zugriff wird zwischen Groß- und Kleinschreibung unterschieden

Wichtige Dateiendungen
.zip.gz Mit dem ZIP Algorithmus komprimierte Datei
.so Shared Object - Entspricht in der Bedeutung in etwa einer DLL Datei unter Windows
.h Header Datei - Teil eines C Quellcodes
.c.cpp C bzw. 
  • C++ Quelltext
.o Object File - compilierter C (C++) Quellcode
.html Hypertext - Dieser Text ist in Hypertext geschrieben
.db Datenbankdatei im DBASE Format
.sh Shellscript (selten verwandtes Suffix), entspricht in etwa einer DOS .BAT Datei
.a siehe .so
.gif.jpg.tiff.png.xbm.xpm Verschiedene Bildformate
.au.wav.mp3.mod Verschiedene Audioformate
.rpm.tar.tgz.deb Verschiedene Packetformate
  • Packete werden verwendet, um Software zu installieren
.conf Konfigurationsdatei (selten verwendetes Suffix)
.ps Postscript - Eine Seitenbeschreibungssprache der Firma Adobe
.tex LaTeX Datei, LaTeX ist für UNIX, was Word für Windows ist
.dvi Device Independent - Übersetzte .tex Datei

Dateisysteme

Dateisystem typische Anwendung max. Anzahl Zeichen in einem Dateinamen Zeichensatz
FAT ohne VFAT (DOS) Festplatten, Speicherkarten (Foto) 8+3 OEM (meist Codepage 437)
ISO 9660 Level 2 CD, DVD 31 ASCII
Joliet CD, DVD 64 Unicode
ISO 9660:1999 CD, DVD 179 - 221 je nach sonstigen Attributen ASCII/unspezifiziert
FAT mit VFAT (Windows) Festplatten, USB-Sticks 255 Unicode
ext3 Festplatten 255 (1) Unicode (2)
HFS plus Festplatten 255 Unicode (UTF-16)
UDF CD, DVD 255 Unicode
NTFS Festplatten 256 (3) Unicode (UTF-16) (4)
ReFS Festplatten 32000 Unicode
Anmerkungen
  1. Bei Verwendung von UTF-8-Codierung und Benutzung von Nicht-ASCII-Zeichen stehen zwar 255 Byte, aber weniger als 255 Zeichen zur Verfügung
  2. Die Codierung ist nicht genormt; als Voreinstellung wird meist UTF-8 verwendet
  3. Bei Verwendung langer Unicode-Pfade sind lediglich 255 Zeichen möglich

Anwendung

Anhang

Siehe auch

Dokumentation

Man-Page
Info-Pages

Links

Projekt
Weblinks