Why will chmod not change the permissions on symlinks?

Symlinks do not have permissions, and by default, chmod(1) will not follow symlinks to change the permissions on the target file. So if you have a file, foo, and a symlink to that file, bar, then this command will always succeed.

    % chmod g-w bar

However, the permissions on foo will not have changed.

You have to use either -H or -L together with the -R option to make this work. See the chmod(1) and symlink(7) man pages for more info.

Warning: The -R option does a RECURSIVE chmod(1). Be careful about specifying directories or symlinks to directories to chmod(1). If you want to change the permissions of a directory referenced by a symlink, use chmod(1) without any options and follow the symlink with a trailing slash (/). For example, if foo is a symlink to directory bar, and you want to change the permissions of foo (actually bar), you would do something like:

    % chmod 555 foo/

With the trailing slash, chmod(1) will follow the symlink, foo, to change the permissions of the directory, bar.

Suggest a Site