# Versteckte Datei

Eine versteckte Datei ist eine Datei, die in einem Betriebssystem bei bestimmten Anwendungen ausgeblendet wird. Dies dient im Allgemeinen der Erhöhung der Übersichtlichkeit oder dem Schutz vor versehentlichem Löschen betriebssystemeigener Komponenten.
Auf Verzeichnisse trifft dies analog zu. Je nach Terminus heißt es verstecktes Verzeichnis und verstecktes Unterverzeichnis oder versteckter Ordner und versteckter Unterordner.

## Geschichte

Unter Unix sind versteckte Dateien eher zufällig aus einem Hack heraus entstanden. Bei der Entwicklung des Unix-Dateisystems wurden zur Navigation innerhalb des Verzeichnisbaums die reservierten Dateinamen . als Referenz auf das aktuelle Verzeichnis und .. auf das übergeordnete Verzeichnis geschaffen. Da Unix der Philosophie Everything is a file („Alles ist eine Datei“) folgt, ist auch . und .. für das System und alle Programme gleich wie jede andere reguläre Datei, denn auch Verzeichnisse sind unter Unix im Regelfall Dateien. Damit funktioniert beispielsweise ein cd . oder cd .. wie bei jedem anderen (Unter-)Verzeichnis auch. Allerdings, und das war das Problem, würde es somit auch von allen anderen Unix-Kommandos als Verzeichnis behandelt, u. a. bei der Auflistung des Verzeichnisinhaltes mit ls gelistet. Auch bei allen anderen Kommandos, etwa cp oder rm, würden diese scheinbaren Verzeichnisse von der Angabe des Wildcards * erfasst. Um also . und .. dort, wo es nicht sinnvoll war, wieder zu entfernen, wurde es in allen Kommandos und in den Wildcards kurzerhand herausgefiltert – also ausgeblendet. Um dies ressourcenschonend umzusetzen, wurde dies als Programmiertrick („Hack“) mit der einfachen Prüfung, ob der Dateiname mit einem Punkt beginnt, ausgeführt.
Diese vereinfachte Programmierung ermöglichte nun jedoch auch, andere Dateien vor allen Unix-Kommandos zu „verstecken“. Dazu ist es lediglich notwendig, die vereinfachte Prüfung zu bestehen, was auf jeden Dateinamen zutrifft, der mit einem Punkt beginnt.
Spätere Betriebssysteme, beispielsweise MS-DOS und klassisches Mac OS, fügten Dateien Attribute hinzu, wovon eines eine Datei oder ein Verzeichnis in gleicher Art und Weise wie unter Unix „versteckt“.

## Technische Umsetzung

Es gibt unterschiedliche Konzepte, wie versteckte Dateien vom Betriebssystem gekennzeichnet werden. Die von Unix und Unix-artigen Betriebssystemen verwendete ist, geschichtlich vorgegeben, die Kennzeichnung durch den Dateinamen selbst. Durch sogenannte „Punkt-Dateien“ (englisch dot-files) wird dabei angezeigt, dass es sich um eine versteckte Datei handelt. Im Umkehrschluss ist damit aber auch eine versteckte Datei unmöglich, deren Name nicht mit einem Punkt beginnt. Da diese Logik in wichtige Teile des Betriebssystems selbst integriert ist, funktioniert sie auf allen eingebundenen Volumes, unabhängig von deren Format (wie etwa deren Dateisystem).
Eine weitere Möglichkeit sind Metadaten im Dateisystem, die vom Betriebssystem (oder vom Dateisystemtreiber) ausgewertet werden. Dabei werden jeder Datei Attribute zugeordnet und zusätzlich zum Dateinamen abgespeichert. Dies bedingt jedoch einerseits, dass für das jeweilige Betriebssystem entsprechend erweiterte Schnittstellen und somit Anforderungen an entsprechende Dateisysteme gestellt sind, zum anderen müssen zwingend Betriebssystem-seitige Dienstprogramme und Funktionen vorhanden sein, die diese Metadaten verwalten können. Da fast jedes Betriebssystem sein eigenes Dateisystem hervorgebracht hat, sind diese zur Verwaltung der Metadaten ineinander verwoben und voneinander abhängig.
Beim Macintosh von Apple beispielsweise gab es unter dem klassischen Mac OS die Dateisysteme HFS und HFS+. In beiden Dateisystemen besteht jede Datei aus einer data fork und einer resource fork. Während in der data fork der eigentliche Inhalt der Datei gespeichert wird, finden sich in der resource fork Metadaten, aber auch Ressourcen, die von einem Programm in der data fork verwendet werden können (z. B. Icons, Bilder oder andere Daten). Zusätzlich verwaltet aber auch das Betriebssystem selbst Metadaten in der resource fork, wie etwa das invisible-Flag der Datei. Diese Information wird dann von geeigneten Programmen, vorrangig dem Finder und systemnahen Dienstprogrammen, verwaltet. Eine mit diesem Flag versehene Datei wird von nahezu allen Anwendungsprogrammen als „unsichtbar“ (englisch invisible) behandelt und standardmäßig nicht dargestellt.
PC-kompatibles DOS wie MS-DOS verwendet das von Microsoft entwickelte FAT-Dateisystem, das zum Dateinamen zusätzlich eine Reihe von einfachen Attributen speichert. Eines davon ist das hidden-Attribut, das in gleicher Weise dem Betriebssystem zu erkennen gibt, dass die Datei „versteckt“ (englisch hidden) sein soll. Die meisten Programme zeigen als versteckt gekennzeichnete Dateien generell nicht an.
Die designierten Nachfolger von PC DOS und MS-DOS waren in den 1990er Jahren OS/2 von IBM (und anfangs auch Microsoft) sowie Windows von Microsoft. Beide Systeme verwendeten anfangs zwar auch FAT, brachten aufgrund diverser Limitierungen von FAT aber auch eigene Dateisysteme hervor: HPFS von OS/2 und NTFS von Windows NT. Die Dateiattribute von FAT wurden dabei übernommen und erweitert, sodass es das „Versteckt“-Attribut auch in diesen Dateisystemen weiterhin gibt. In NTFS ist mit ADS (für englisch Alternate Data Streams) die Funktion eines alternativen Datenstroms enthalten, die den Forks des Macintosh entspricht. Für versteckte Dateien werden Streams jedoch nicht verwendet.

## Darstellung

Aus der jeweiligen technischen Umsetzung ergeben sich die Konventionen, wie in einem Betriebssystem mit versteckten Dateien umgegangen wird. Diese werden mitunter von den Anwendungsprogrammen übernommen, jedoch nicht zwingend. Bei Systemprogrammen, in erster Linie jenen, die vom Betriebssystem mitgeliefert werden, sind diese Konventionen jedoch die Standardeinstellung. Ein Beispiel dafür sind Dateimanager, die in der Voreinstellung versteckte Dateien und Verzeichnisse ausblenden. Meist existiert jedoch eine Option in den Einstellungen, die es dem Benutzer erlaubt, versteckte Dateien dennoch anzuzeigen. Bei der Darstellung werden versteckte Dateien meist gekennzeichnet, etwa durch erhöhte Transparenz des Symbols, oder farblich anders dargestellt, etwa den Dateinamen in grau statt in schwarz.
Unter einem Kommandozeileninterpreter werden bei dem Kommando zur Auflistung der Dateien ebenfalls standardmäßig versteckte Dateien und Verzeichnisse nicht gelistet. Dies ist z. B. bei ls von Unix und Unix-artigen Betriebssystemen der Fall. Auch das Kommando dir unter DOS verhält sich so. Durch die Angabe eines Kommandozeilenparameters ist es möglich, versteckte Dateien und Verzeichnisse in die Auflistung mit aufzunehmen, beispielsweise mit ls -a oder dir /a.

## Anwendungen

Bei diversen Funktionen im Betriebssystem werden versteckte Dateien normalerweise nicht erfasst, wie beispielsweise bei Kopier- und Verschiebeaktionen. Dies betrifft die Kommandozeile ebenso (z. B. cp, mv, rsync etc. unter Unix-Betriebssystemen), wo eine Verwendung von * als Wildcard für alle Dateien und Verzeichnisse in einem Quellverzeichnis die mit einem Punkt beginnenden versteckten Dateien und Verzeichnisse nicht umfasst, wie auch die grafische Benutzeroberfläche, wo nur sichtbare Elemente markiert werden können. Versteckte Dateien werden somit (in der Standardeinstellung) nicht erfasst und daher, z. B. beim Ziehen und Ablegen, nicht mitkopiert oder verschoben.
Bei der Auswahl eines Verzeichnisses, das rekursiv kopiert oder verschoben wird, werden hingegen auch die versteckten Dateien darin mit übertragen.
Versteckte Dateien werden für unterschiedliche Zwecke verwendet und dies ist im Allgemeinen eine Entscheidung des Entwicklers von Software. So finden sich zahlreiche unterschiedliche Beispiele:
* Systemdateien: Bei manchen Betriebssystemen werden Dateien, die vom System verwaltet werden und die vom Anwender nicht direkt genutzt werden sollen, versteckt. Ein Beispiel sind die Startdateien von PC DOS oder MS-DOS, IBMBIO.COM bzw. IO.SYS sowie IBMDOS.COM/MSDOS.SYS und COMMAND.COM. Auf Startdisketten finden sich jeweils diese drei Startdateien, die normalerweise jedoch nicht mitkopiert werden. Will man hingegen eine Diskette startfähig machen, so gibt es dafür das Kommando SYS, das dann nicht nur diese drei Dateien kopiert und die entsprechenden Dateiattribute setzt, sondern auch den Bootsektor (bei FAT: VBR) schreibt.
* Temporäre Dateien und Verzeichnisse: Einige Programme und Betriebssysteme generieren Daten aus vorhandenen Dateien und erstellen daraus Dateien für eine Art Zwischenspeicher, was u. a. der Beschleunigung dient. Damit diese temporären Dateien nicht im Dateimanager auftauchen, werden sie oft versteckt. Man kann sie in vielen Fällen gefahrlos löschen, da die Daten jederzeit wieder generiert werden können, jedoch verwalten viele Programme temporäre Dateien selbständig und bieten oft Konfigurationsoptionen zum Löschen oder Begrenzen dieser Dateien an.
* Im Betriebssystem integrierte Systemfunktionen nutzen oft versteckte (und geschützte) Dateien und Verzeichnisse. Ein Beispiel ist der Papierkorb von Windows, dessen Dateien im versteckten (und geschützten) Ordner $RECYCLE.BIN vorgehalten werden. Bei macOS heißt der Ordner für den Papierkorb .Trashes, während etwa die Indizes für die Spotlight-Suchfunktion im versteckten Ordner .Spotlight zwischengespeichert werden (temporäre Dateien).
* Konfigurationsdateien: Unter Unix und Unix-artigen Betriebssystemen sind Konfigurationsdateien des lokalen Benutzers fast immer Punkt-Dateien. Dadurch wirkt das Benutzerverzeichnis, $HOME bzw. ~ und meist /home/Benutzername, aufgeräumter. Wer jedoch diese Dateien löscht, verliert wichtige Einstellungen der entsprechenden Programme.

### Beispiele

Unter Unix-Systemen wird eine Datei durch einfaches Umbenennen versteckt. Um eine versteckte Datei zu erstellen, kann z. B. folgendes Kommando herangezogen werden:
Die Datei .versteckte_Datei.txt kann wie jede andere Datei verwendet, so etwa auch in einem Texteditor bearbeitet werden:
In der Auflistung wird die Datei normalerweise jedoch nicht angezeigt, außer mit dem Parameter -a (kleines a).
Um mit ls alle versteckten Dateien anzuzeigen, jedoch weiterhin die reservierten Dateinamen . und .. auszublenden, gibt es bei modernen ls-Implementierungen den Parameter -A (großgeschriebenes A).
Werden nun alle Dateien aus dem aktuellen Verzeichnis mit dem Wildcard *.* kopiert, so wird die Datei .versteckte_Datei.txt und alle anderen versteckten Dateien (und Verzeichnisse) nicht mitkopiert:
Dies betrifft auch die Einschränkung auf Dateinamenserweiterungen, etwa nur Textdateien mit dem Wildcard *.txt.
Unter PC-kompatiblem DOS wie MS-DOS kann das Kommando ATTRIB die Dateiattribute, darunter „versteckt“, anzeigen, setzen oder löschen.
Auch unter DOS sind versteckte Dateien nicht im Wildcard *.* enthalten. Um versteckte Dateien dennoch kopieren zu können, kann es daher nötig sein, das entsprechende Flag vor dem Kopiervorgang zu löschen:
Nach dem Kopiervorgang sollte das englisch hidden flag, je nach Vorhaben auch bei der Zieldatei, wieder gesetzt werden:
Alternativ gibt es Kommandos bzw. Kommandozeilenparameter oder Programme, die auch versteckte Dateien inkludieren können. Dies ist vor allem bei der Datensicherung essentiell. Ein Beispiel dafür ist das Backup-Dienstprogramm rsync, oder unter DOS beispielsweise xcopy.
In grafischen Dateimanagern – wie beispielsweise dem Explorer von Windows, dem Finder von macOS, Dolphin von Plasma (KDE, bis Version 3 noch Konqueror) oder Nautilus von Gnome – gibt es hierfür eine Ansichtsoption, die die Anzeige von versteckten Dateien allgemein (global) aktiviert. Je nach spezieller Umgebung, beispielsweise in Nautilus, kann auch eine bestimmte Tastenkombination die Anzeige freischalten, welche nur das aktuelle Fenster betrifft, es gibt jedoch auch Einstellungen, die die Anzeige versteckter Dateien Betriebssystem-weit umschalten, beispielsweise beim Windows-Explorer oder beim Finder von macOS. Damit werden dann auch auf dem Desktop versteckte Dateien angezeigt.
Im Finder wird unter klassischem Mac OS, das ist Mac OS bis Version 9, das in der resource fork gespeicherte Attribut ausgewertet. Da dieses im Dateisystem gespeichert ist, wird dieser alternative Datenstrom auch unter Mac OS X, das eigentlich ein auf BSD basierendes Unix-Betriebssystem ist, berücksichtigt.

### Kompatibilität

Im Grundsatz sind die verschiedenen technischen Umsetzungen der jeweiligen Betriebssysteme nicht zueinander kompatibel. Das zeigt sich in der Praxis immer dann, wenn Daten zwischen unterschiedlichen Systemen ausgetauscht werden sollen bzw. wenn System-fremde Dateisysteme verwendet werden.
Es ist z. B. auf FAT-Dateisystemen, die keine langen Dateinamen unterstützen, unmöglich, dass eine Datei mit einem Punkt beginnt: Im ursprünglichen File Allocation Table (FAT) müssen alle Dateien der 8.3-Konvention folgen (retronym auch kurze Dateinamen genannt), die den Punkt automatisch nach den maximal 8 Zeichen des Dateinamens vorsieht, gefolgt von der Dateinamenserweiterung, die nur 3 Zeichen lang sein kann (daher 8.3). Der Punkt zur Trennung ist daher nicht Teil des Dateinamens, sondern Teil der Konvention selbst; Dateinamen werden im File Allocation Table folglich ohne Punkt gespeichert und im Dateinamens selbst werden keine (weiteren) Punkte unterstützt.
Wenn also Unix auf einem FAT-Dateisystem eine versteckte Datei anlegen will, scheitert es, weil dieses nicht kompatibel ist. Kompatibilitätsschichten wie UMSDOS konnten zwar Abhilfe schaffen, waren jedoch vom Betriebssystem abhängig, das UMSDOS implementierte (nur Linux, nicht jedes Unix).
Auf moderneren Dateisystemen, aber auch FAT mit der Erweiterung VFAT sowie auf dem Nachfolger exFAT, können Punkt-Dateien jedoch ohne Probleme erstellt werden und sind daraufhin auf allen Unix-artigen Betriebssystem automatisch versteckt. Wird allerdings vom Dateisystemtreiber nicht gleichzeitig das Attribut „versteckt“ oder „unsichtbar“ gesetzt, so ist dieselbe Datei auf Betriebssystemen ohne die Unix-Konvention dann plötzlich sichtbar, was folgendes Beispiel veranschaulicht: Erstellt man auf einer FAT12-Diskette mit VFAT-Erweiterung (lange Dateinamen) unter MS-DOS die Datei HIDDEN.TXT und versteckt diese, so wird sie dennoch unter Linux gelistet (ist also nicht versteckt):
Die eigentlich versteckte Datei mit dem FAT-Attrib „hidden“, HIDDEN.TXT, wird unter Linux angezeigt, weil sie keine Punkt-Datei ist. Die Punkt-Datei hingegen ist versteckt, obwohl ihr das FAT-Attribut fehlt.
Unter DOS mit LFN wird die Datei .hidden.txt als sichtbar gelistet, weil Punkt-Dateien in DOS nicht automatisch versteckt sind; Nur das „hidden“-Attribut ist ausschlaggebend, nicht der Dateiname.
Ähnliche Schwierigkeiten gibt es zumeist auf Netzlaufwerken.