In my post from earlier this week on removing the color output from the
ls command I mentioned that in some circumstances the color-coded output can cause permissions errors. Cloned Milkmen asked that I explain why this would be.
I was hoping someone would ask that. In Linux and UNIX if the execute flag is not set on a directory, as in the example below, the
ls --color=tty command will return
$ ls -ld ls_test/
dr-------- 4 jonemmons pg222211 4096 Nov 12 20:07 ls_test/
$ ls ----color=tty ls_test/
ls: ls_test/test1: Permission denied
ls: ls_test/test2: Permission denied
ls: ls_test/test3: Permission denied
$ ls ls_test/
dir1 dir2 test1 test2 test3
The execute flag is funny on directories. The main effect is that it will inhibit a user’s ability to
cd into a directory, but it will also keep you from being able to get information out of the file’s inode (the inode contains information about when a file was created, modified, accessed etc.) Since
ls requires information from the inode to properly color-code files in a directory it will fail if the execute bit is not set. An
ls -l will fail for the same reason.