Скажем, у Вас есть эта структура:
+ directory
-- file1
-- file2
-- file3 -> /tmp/file3
file3
ссылка на другого file3
где-то в другом месте в системе.
Теперь скажем, я chmod 777
каталог и все содержание в нем. Делает мой file3
в /tmp
получить те полномочия? Кроме того, скажем, у нас есть та же ситуация, но инвертированный.
/tmp/file3 -> /directory/file3
Если я применяю полномочия на файл, связываемый с, как это производит ссылку?
Это зависит от того, как вы вызываете chmod
и от платформы, на которой вы работаете.
Например, в системе Linux, man chmod
говорит следующее:
chmod
никогда не меняет разрешения символических линков;chmod
системный вызов не может изменить свои разрешения. Это не проблема так как разрешения на символические ссылки никогда не используются. Однако, для каждой символической ссылки, перечисленной в командной строке,chmod
изменяет значение параметра разрешения на указанный файл. Напротив,chmod
игнорирует символические ссылки, встречающиеся при рекурсивном обратном пути в каталогах.
-h Если файл является символической ссылкой, измените режим ссылки сам, а не файл, на который указывает ссылка.
Для примера предположим, что вы находитесь на машине с Linux до конца этого ответа.
Если в первом случае вы запустите каталог chmod -R 777
для рекурсивного изменения разрешений, цель ссылки не будет затронута, но если вы сделаете каталог/*
, то она будет затронута.
Если вы напрямую измените разрешения на целевой каталог ссылок, эти разрешения пройдут (поскольку, как говорят man-страница и baraboom, фактические разрешения на ссылку ни для чего не используются).
Тест-журнал для иллюстрации:
$ mkdir dir && touch dir/file{1,2} /tmp/file3 && ln -s {/tmp,dir}/file3
$ ls -l dir/* /tmp/file3
-rw-r--r-- 1 user group 0 2011-06-27 22:02 /tmp/file3
-rw-r--r-- 1 user group 0 2011-06-27 22:02 dir/file1
-rw-r--r-- 1 user group 0 2011-06-27 22:02 dir/file2
lrwxrwxrwx 1 user group 10 2011-06-27 22:02 dir/file3 -> /tmp/file3
$ chmod -R 777 dir && ls -l dir/* /tmp/file3
-rw-r--r-- 1 user group 0 2011-06-27 22:02 /tmp/file3
-rwxrwxrwx 1 user group 0 2011-06-27 22:02 dir/file1
-rwxrwxrwx 1 user group 0 2011-06-27 22:02 dir/file2
lrwxrwxrwx 1 user group 10 2011-06-27 22:02 dir/file3 -> /tmp/file3
$ chmod 700 dir/* && ls -l dir/* /tmp/file3
-rwx------ 1 user group 0 2011-06-27 22:02 /tmp/file3
-rwx------ 1 user group 0 2011-06-27 22:02 dir/file1
-rwx------ 1 user group 0 2011-06-27 22:02 dir/file2
lrwxrwxrwx 1 user group 10 2011-06-27 22:02 dir/file3 -> /tmp/file3