Suppose the directory permission is
700, and the file under the directory is
Then the effective permission of the file is
Is there such a command that lists the effective permission by recursively checking parent permissions?
migrated from stackoverflow.com Dec 13 '12 at 18:08
This question came from our site for professional and enthusiast programmers.
This is not so very easy to solve. Especially, the "effective" file permissions (a concept which is in this context unknown to me) is not so easy to determine.
You can access a file if all the directories leading to it are "executable". If you know the file's names, you do not need read access.
(E. g., sometimes, I make home directories
If the question is about accessing an existing file, the answer is different from creating or removing a file. In the latter case, the parent directory of the file(-to-be) bust be writable.
OTOH, if I do not have the
But if you want so, you take the mask of each directory, do
For creating and removing, you determine the parent directory's effective permission and look if it is writable and executable.
So in a
There is no such command and no simple way to do it, especially as both the file and the directories might have ACLs set in addition to the traditional permissions making the effective file permissions more complex to compute and display. Moreover, your question assumes there is a single path to the file but symbolic links potentially presents in the path should be first resolved as their permissions do not matter, the file might also have multiple hard-links so might be reachable from another directory. The user might also be able to access it through a different path if either loopback/bind mounts are in place or the user is running in a chrooted environment.
In any case, what you can do is to impersonate a user and check if the file while accessed through a given path is readable, writable and/or executable by him/her.
This will show the effective rights for the user on that particular file using the traditional rwx syntax. Note that this script might give false negative results if the user launching has not root privileges (or equivalent) and has no read access on the target directory.
The other answers are correct. However you can use a bash one-liner to list the permissions of the directory hierarchy. First change to the directory in question, and then run: