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 („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“ () 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 , 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 und einer . Während in der der eigentliche Inhalt der Datei gespeichert wird, finden sich in der Metadaten, aber auch Ressourcen, die von einem Programm in der verwendet werden können (z. B. Icons, Bilder oder andere Daten). Zusätzlich verwaltet aber auch das Betriebssystem selbst Metadaten in der , 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“ () 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“ () 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 ) die Funktion eines alternativen Datenstroms enthalten, die den Forks des Macintosh entspricht. Für versteckte Dateien werden jedoch nicht verwendet.
Darstellung mini|Beispiel für Ansicht mit versteckten Dateien. mini|Beispiel für die Option zum Anzeigen von versteckten Dateien in einem Menü. 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: % touch .versteckte_Datei.txt
Die Datei .versteckte_Datei.txt kann wie jede andere Datei verwendet, so etwa auch in einem Texteditor bearbeitet werden: % nano .versteckte_Datei.txt
In der Auflistung wird die Datei normalerweise jedoch nicht angezeigt, außer mit dem Parameter -a (kleines a). % ls -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: % cp *.* /Pfad/zum/Ziel
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.
C:\>attrib Datei.Ext
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: C:\>attrib -h Datei.Ext
Nach dem Kopiervorgang sollte das , je nach Vorhaben auch bei der Zieldatei, wieder gesetzt werden: C:\>attrib +h Datei.Ext C:\>cd \Pfad\zum\Ziel\des\Kopierens\ C:\Pfad\zum\Ziel\des\Kopierens>attrib +h Datei.Ext
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.