Historically, one of the big design decisions in Unix was to consider everything as a file.¹ This transpires in early ls
and stat
manpages; for example, in V3 (February 1973), the stat
manpage (which describes the mode used by ls
) says that
The mode is a six-character string whose characters mean the
following:
s
: file is small (smaller than 4096 bytes)
l
: file is large
d
: file is a directory
x
: file is executable
u
: set user ID on execution
-
: none of the above
etc.
In V4 (October 1973) the mode starts to resemble what we have today; the ls
manpage says
The mode printed under the -l
option contains 10 characters which are interpreted as follows:
the first character is
d
if the entry is a directory;
b
if the entry is a block-type special file;
c
if the entry is a character-type special file;
-
if the entry is a plain file.
The next 9 characters are interpreted
as three sets of three bits each.
So it seems the creators of Unix really thought that a plain file is “just” the default, nothing special, so it doesn’t deserve a character — everything is a file, and only files which aren’t plain files need additional description. One could think of -
as signaling the absence of “specialness”.
¹ Strictly speaking, the design decision was to make everything accessible through the file system, not to consider everything as a file; but as a result, everything had to be made available as some sort of file, and this required being able to distinguish different types of files. See section 3 of The UNIX Time-Sharing System.
-
makes the rarer file types (everything else) stand out. – Sep 22 '18 at 19:57