Символические ссылки с относительными путями, поскольку их содержимое относится к каталогу, в котором находится символическая ссылка, а не относительно cwd
процесса, разрешающего символическую ссылку. Не следует ожидать, что трюк, которого вы пытаетесь достичь, сработает.
Маска — большая часть головоломки. У рута другой umask. Это довольно типично.
Часть головоломки, которую вы упускаете из виду, заключается в том, что umask — это маска. Когда приложение создает файл, оно указывает некоторые разрешения; umask — это фильтр для этих разрешений, который удаляет некоторые биты разрешений. В файле есть только биты разрешений, включенные приложением. Например, приложение, которое намеревается создать неисполняемый файл (такой как touch
), передает биты разрешения 666 (в восьмеричном формате); с umask 002 это приводит к разрешениям 664, то есть rw-rw-r--: umask удалил бит записи-другого. При создании каталога приложение (например, mkdir
) обычно разрешает выполнение и поэтому указывает 777 в качестве разрешений; umask 002 приводит к разрешениям 775 на каталог, то есть rwxrwxr-x.
Вы можете увидеть, какие разрешения использует приложение, наблюдая за системными вызовами, которые оно делает. Например:
$ strace -e open,mkdir touch foo
… skipping opening of dynamically linked libraries etc. …
open("foo", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
+++ exited with 0 +++
$ strace -e open,mkdir mkdir goo
… skipping opening of dynamically linked libraries etc. …
mkdir("goo", 0777) = 0
+++ exited with 0 +++
Каталогу нужны разрешения на выполнение, чтобы перейти в него или получить листинг, поэтому, когда каталог создается, он автоматически устанавливает биты +x.
Файлам, однако, требуется только установить бит выполнения (s ), если они являются скомпилированными двоичными файлами (c/c++/etc )или интерпретируемым -скриптом (sh/bash/ php/perl/etc ), а также не делать вещи исполняемыми по умолчанию из соображений безопасности.