Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

For example, in My Documents, there are the following folders:

.ssh
.subversion

Is this some sort of naming convention that I am unaware of?

share|improve this question

1 Answer 1

up vote 81 down vote accepted

This naming convention comes from Unix-like operating systems, where it means a "hidden" file or directory. It works anywhere, but its primary use is to hide configuration files in your home directory (e.g. ~/.cache/ or ~/.plan – they're frequently called "dotfiles").

Dotfiles could, in a way, be called the traditional Unix equivalent to the "AppData" directory on Windows. (Meanwhile, many Linux programs are being changed to follow the XDG base directory specification, moving their configuration to ~/.config/ and other data to ~/.cache/ & ~/.local/share/ – this makes it a little more similar to AppData\Roaming and AppData\Local.)

You have these .ssh and .subversion directories on Windows, because you've used some programs – specifically, OpenSSH and Subversion – that have been ported to use Windows system APIs rather than POSIX ones, but haven't been adjusted for some other Windows conventions.

Sometimes this adaptation is skipped intentionally, to make life easier for people who use Unix-like environments such as Cygwin on their Windows systems. For example, Cygwin installs the standard set of Unix-like tools like ls, which ignores the Windows "hidden" flag, and only honors the .dotfile names. Also, it is easier to synchronize configuration between one's Windows and Linux/BSD/OSX computers if it is shared in the same location.

Also: Typically these files are in the user's home directory, e.g. /home/name/.ssh on Linux, or C:\Users\name\.ssh on Windows 7+. It is quite rare for them to be put in the "Documents" or "My Documents" subdirectories... they do not contain documents after all.


As Rob Pike writes on Google+, this was an accidental feature:

Long ago, as the design of the Unix file system was being worked out, the entries . and .. appeared, to make navigation easier. I'm not sure but I believe .. went in during the Version 2 rewrite, when the file system became hierarchical (it had a very different structure early on). When one typed ls, however, these files appeared, so either Ken or Dennis added a simple test to the program. It was in assembler then, but the code in question was equivalent to something like this:

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

This statement was a little shorter than what it should have been, which is

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

but hey, it was easy.

Two things resulted.

First, a bad precedent was set. A lot of other lazy programmers introduced bugs by making the same simplification. Actual files beginning with periods are often skipped when they should be counted.

Second, and much worse, the idea of a "hidden" or "dot" file was created. As a consequence, more lazy programmers started dropping files into everyone's home directory. I don't have all that much stuff installed on the machine I'm using to type this, but my home directory has about a hundred dot files and I don't even know what most of them are or whether they're still needed. Every file name evaluation that goes through my home directory is slowed down by this accumulated sludge.

share|improve this answer
4  
+1 for the history lesson! –  mgarciaisaia May 23 at 4:00
1  
@Ruslan: For example: VMS did not have hidden files at all; you'd just end up with things like LOGIN.COM or DECW$MAIL.DAT in your home directory. (I'm not sure which other systems were popular at that time.) Unix had just recently been created; it did not have any conventions at all. –  grawity May 23 at 13:56
1  
@Ruslan: It wasn't uncommon at that time. The MS-DOS/PC-DOS interface is rougly based on Digital Research CP/M, which again was based on various DEC operating systems like RT-11, DEC PDP-8, and OpenVMS. (Incidentally, one of OpenVMS developers later built Windows NT.) –  grawity May 23 at 14:23
1  
@JamesSneeringer: I know they're not related -- much like Microsoft was not related to Digital Research either, and yet they made operating systems with similar interfaces... (If I remember correctly what I've read, the CP/M author worked closely with RT-11.) –  grawity May 23 at 16:12
2  
@grawity MS-DOS 1.0 was a DEC-style O/S done by Digital Research and bought by Microsoft, who were in the Unix business back then. MS-DOS 2.0 and later added a hierarchical filesystem and some of the Unix conventions including .. for "up dir"; Microsoft actually advertised these "advanced Unix features". –  larsmans May 23 at 22:04

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.