Warum haben einige Datei- / Ordnernamen unter Windows einen Punkt vor sich?

34

In befinden sich beispielsweise My Documentsdie folgenden Ordner:

.ssh
.subversion

Ist das eine Art Namenskonvention, die ich nicht kenne?

Niko Bellic
quelle

Antworten:

94

Diese Namenskonvention stammt von Unix-ähnlichen Betriebssystemen (wie Linux oder OS X), wobei es sich um eine "versteckte" Datei oder ein "verstecktes" Verzeichnis handelt. Es funktioniert überall, wird jedoch hauptsächlich zum Verstecken von Konfigurationsdateien in Ihrem Home-Verzeichnis verwendet (z. B. ~/.cache/oder ~/.plan- sie werden häufig als "Punktdateien" bezeichnet).

Dotfiles könnten in gewisser Weise als das traditionelle Unix-Äquivalent zum "AppData" -Verzeichnis unter Windows bezeichnet werden. (Viele Linux-Programme werden so geändert, dass sie der XDG-Basisverzeichnisspezifikation folgen ~/.config/und ihre Konfiguration und andere Daten nach ~/.cache/& verschieben. ~/.local/share/Dadurch ähnelt sie AppData\Roamingund AppData\Local.)

Sie haben diese .sshund .subversionVerzeichnisse unter Windows, weil Sie einige Programme - insbesondere OpenSSH und Subversion - verwendet haben, die für die Verwendung von Windows-System-APIs anstelle von POSIX-APIs portiert wurden, aber nicht für andere Windows-Konventionen angepasst wurden.

Manchmal wird diese Anpassung absichtlich übersprungen, um Menschen, die Unix-ähnliche Umgebungen wie Cygwin auf ihren Windows-Systemen verwenden, das Leben zu erleichtern. Zum Beispiel installiert Cygwin den Standardsatz von Unix-ähnlichen Werkzeugen wie ls, die das "versteckte" Windows-Flag ignorieren und nur die .dotfileNamen berücksichtigen. Die Verwendung desselben Speicherorts (z. B. <home>/.ssh) erleichtert die Synchronisierung der Konfiguration zwischen Windows- und Linux- / BSD- / OSX-Computern.

Auch: In der Regel sind diese Dateien im Benutzer Home - Verzeichnis , zB unter Linux oder auf Windows 7+. Es kommt sehr selten vor, dass sie in die Unterverzeichnisse "Dokumente" oder "Eigene Dateien" gestellt werden./home/name/.sshC:\Users\name\.ssh


Wie Rob Pike auf Google+ schreibt , war dies ein zufälliges Feature:

Vor langer Zeit, als das Design des Unix-Dateisystems ausgearbeitet wurde, erschienen die Einträge .und .., um die Navigation zu vereinfachen. Ich bin nicht sicher, aber ich glaube, dass es ..während des Umschreibens von Version 2 dazu kam, als das Dateisystem hierarchisch wurde (es hatte von Anfang an eine ganz andere Struktur). Bei der Eingabe von ls wurden diese Dateien jedoch angezeigt, sodass Ken oder Dennis dem Programm einen einfachen Test hinzufügten. Es war damals in Assembler, aber der fragliche Code war ungefähr so:

if (name[0] == '.') continue;

Diese Aussage war etwas kürzer als das, was sie hätte sein sollen

if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;

aber hey, es war einfach.

Zwei Dinge ergaben sich.

Zunächst wurde ein schlechter Präzedenzfall geschaffen. Viele andere faule Programmierer haben Fehler eingeführt, indem sie die gleiche Vereinfachung vorgenommen haben. Tatsächliche Dateien, die mit Punkten beginnen, werden häufig übersprungen, wenn sie gezählt werden sollen.

Zweitens, und noch viel schlimmer, wurde die Idee einer "versteckten" oder "Punkt" -Datei geschaffen. In der Folge begannen faulere Programmierer, Dateien in das Home-Verzeichnis aller zu kopieren. Ich habe nicht so viel Zeug auf dem Computer installiert, mit dem ich das schreibe, aber mein Homeverzeichnis hat ungefähr hundert Punktedateien und ich weiß nicht einmal, was die meisten von ihnen sind oder ob sie noch gebraucht werden . Jede Dateinamenauswertung, die mein Homeverzeichnis durchläuft, wird durch diesen angesammelten Schlamm verlangsamt.

Grawity
quelle
Vielen Dank! Sehr ausführlich. In meinem Ordner "C: \ users \ <Benutzername> \" habe ich versucht, den Befehl "ls" in Windows PowerShell und erneut in Cygwin Terminal zu verwenden. PowerShell listet die Punktedateien auf und blendet AppData aus, während Cygwin Terminal genau das Gegenteil tut. Interessant! Cygwin verwendet die Unix-Konvention.
Niko Bellic
@NikoBellic: Die Unix / Cygwin lshat die -aMöglichkeit , alle Dateien aufzulisten.
Grawity
1
@ Ruslan: Zum Beispiel: VMS hatte überhaupt keine versteckten Dateien; Sie würden nur Dinge wie LOGIN.COModer DECW$MAIL.DAT in Ihrem Home-Verzeichnis landen . (Ich bin mir nicht sicher, welche anderen Systeme zu dieser Zeit populär waren.) Unix wurde erst kürzlich erstellt. Es gab überhaupt keine Konventionen.
Grawity
2
@grawity MS-DOS 1.0 war ein O / S im DEC-Stil, das von Digital Research erstellt und von Microsoft gekauft wurde, die damals im Unix-Geschäft tätig waren . MS-DOS 2.0 und höher fügte ein hierarchisches Dateisystem und einige der Unix-Konventionen hinzu, einschließlich ..für "up dir"; Microsoft hat tatsächlich für diese "erweiterten Unix-Funktionen" geworben.
Fred Foo
1
@grawity Ah richtig, es war Seattle Computer Products, das das CP / M von DRI klont. Es tut uns leid. Mein Punkt war jedoch, dass Microsoft zu Beginn der 80er Jahre ein Unix-Shop war und DEC-Systeme nicht der einzige Ausgangspunkt waren. (Ursprünglich lief Unix auf DEC-Hardware, aber ich glaube, es wurde mehr von CTSS und Multics beeinflusst als von DEC-Betriebssystemen.)
Fred Foo