Historically, one of the big design decisions in Unix was to consider everything as a file.¹ This transpires in early
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
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
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.