When errno is EACCESS, it's sometimes unclear what the problem is when the mode itself is OK. A file with mode 777 may be unreadable if there is one directory in the pathname that prevents access to it.
I propose a new utility, shmod, to show the mode of the path to a file and report problems. The script below is simple version: correct, but not robust to weird filenames. If others agree shmod deserves consideration for /usr/bin, I would rewrite it in C to 1. make it impervious to weird filenames 2. support mulitple filenames 3. quiet default: if no error, print nothing and exec /bin/ls on the filename(s), else exec ls on first problem directory 4. -q option to print nothing if no error 5. -v option to print mode of each pathname component (as below) --jkl Example output: $ shmod a/E drwxrwxr-x 3 jklowden wheel 512 Mar 15 15:44 a lrwxrwxr-x 1 jklowden wheel 7 Mar 15 15:44 a/E -> b/c/d/e drwx---r-x 3 nobody nobody 512 Mar 15 15:42 b dr-x------ 3 jklowden wheel 512 Mar 15 13:39 b/c drwxrwxr-x 2 jklowden wheel 512 Mar 15 13:40 b/c/d -rw-rw-r-- 1 jklowden wheel 4 Mar 15 13:40 b/c/d/e [snip] #! /bin/sh set -e test "$1" || { echo syntax: shmod pathname >&2; exit 1; } shmod() { TOP=$(echo $1 | awk -F/ '{print $1}') if [ ! "${TOP}" ] then TOP=/ else unset TOP fi PATHNAME="" for D in $(echo "$1" | awk -v TOP=${TOP} \ '{gsub("/", " "); print TOP, $0}') do PATHNAME="${PATHNAME}$D" ls -ld "${PATHNAME}" if [ -h "${PATHNAME}" ] then cd "${PATHNAME%/*}" shmod "$(readlink "$D")" elif [ -d "${PATHNAME}" ] then (cd "${PATHNAME}") PATHNAME="${PATHNAME}"/ else exec 3< "${PATHNAME}" fi done } shmod "$1" [pins]