On Sat, Apr 27, 2019 at 8:26 AM Anthony Martin <ality(a)pbrane.org> wrote:
From at least V2 to V6, the ls(1) command would not
show directory entries whose names began with a '.'
unless the -a flag was supplied.
This was changed in V7: only the directory entries
for "." and ".." would be skipped by default.
gnu ls does not follow this convention. The system V sources one can find
on the internet have the curious code:
#define DOTSUP 1
...
if (aflg==0 && dentry->d_name[0]=='.'
# ifndef DOTSUP
&& (dentry->d_name[1]=='\0' ||
dentry->d_name[1]=='.'
&& dentry->d_name[2]=='\0')
# endif
) /* check for directory items '.',
'..',
* and items without valid inode-number;
*/
continue;
which is the V7 behavior ifdef'd out.
All further versions of Research Unix retain the
convention of V7 and Plan 9 ultimately made it
unnecessary. However, BSD and its descendants did
not follow suit. Instead, they continued behaving
like V6 with an additional -A flag to emulate V7.
This has been the BSD convention since at least 4BSD :)
But I find this interesting, since the 8th edition was based on BSD 4.1c I
thought....
And system III and later all have the above code.
Was the initial behavior intentional or just a
matter of expediency?
Who made the change and what was their motivation?
Was it a reaction to the intentional hiding of what
came to be known as "dot files"?
It looks like, from the source, to be a blip in V7.
Warner