Наскільки я можу сказати, це важко закодовано у стандартні утиліти. Я straced одночасно touchстворити новий файл і mkdirстворити новий каталог.
touchСліду проводиться таким чином :
open("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
в той час як цей mkdirслід дав це:
mkdir("newdir", 0777) = 0
Окрім кодування процесу створення файлів / каталогів на C, я не бачу способу зміни дозволів за замовчуванням. Мені здається, що не робити файли виконуваними за замовчуванням має сенс: ви не хочете, щоб якийсь випадковий текст був випадково неправильно трактований як команди оболонки.
Оновлення
Щоб навести приклад того, як біти дозволів жорстко кодуються до стандартних утиліт. Ось кілька відповідних рядків із двох файлів у coreutilsпакеті, що містить вихідний код для обох, touch(1)і mkdir(1)серед інших:
mkdir.c:
if (specified_mode)
{
struct mode_change *change = mode_compile (specified_mode);
if (!change)
error (EXIT_FAILURE, 0, _("invalid mode %s"),
quote (specified_mode));
options.mode = mode_adjust (S_IRWXUGO, true, umask_value, change,
&options.mode_bits);
free (change);
}
else
options.mode = S_IRWXUGO & ~umask_value;
}
Іншими словами, якщо режим не вказаний, встановіть його S_IRWXUGO(читайте: 0777), зміненого на umask_value.
touch.c ще зрозуміліше:
int default_permissions =
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
Тобто, надайте всім права на читання та запис (читайте: 0666), які будуть змінені процесом umaskстворення файлів, звичайно.
Ви можете бути в змозі обійти це програмно тільки: тобто при створенні файлів з будь-якої програми C, де ви робите системні виклики безпосередньо або з мови , що дозволяє зробити низькорівневий системний виклик (дивіться, наприклад , в Perl sysopenUnder Подивитись профіль perldoc -f sysopen).
umaskя зустрічався, завжди був 0022, створюючи дозвіл за замовчуванням 644.