Anlayabildiğim kadarıyla, bu standart yardımcı programlara kodlanmıştır. Ben strace
hem d touch
yeni bir dosya oluşturmak ve bir mkdir
yeni bir dizin oluşturma.
touch
İzlemesi, bu üretilen:
open("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
ise mkdir
iz bu üretilen:
mkdir("newdir", 0777) = 0
C dosya / dizin oluşturma işlemi kodlama kısa, varsayılan izinleri değiştirmek için bir yol görmüyorum. Ancak bana öyle geliyor ki, dosyaları varsayılan olarak yürütülebilir hale getirmemek mantıklıdır: rastgele herhangi bir metnin yanlışlıkla kabuk komutları olarak yanlış yorumlanmasını istemezsiniz.
Güncelleme
İzin bitlerinin standart yardımcı programlara nasıl sabit kodlandığına dair bir örnek vermek için. Aşağıda, coreutils
pakette, her ikisi için touch(1)
ve mkdir(1)
diğerlerinin yanı sıra kaynak kodunu içeren iki dosyadan bazı ilgili satırlar verilmiştir :
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;
}
Başka bir deyişle, mod belirtilmezse, mod S_IRWXUGO
tarafından değiştirilen (okuma: 0777) olarak ayarlayın umask_value
.
touch.c
daha da net:
int default_permissions =
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
Yani, umask
elbette dosya oluşturma işlemiyle değiştirilecek olan herkese okuma ve yazma izinleri verin (read: 0666) .
Bu programla yalnızca programlı bir şekilde dolaşabilirsiniz: örneğin, sistem çağrılarını doğrudan yaptığınız veya düşük düzeyli bir sistem araması yapmanızı sağlayan bir dilin içinden bir C programı içinden dosya oluştururken (bkz. Örneğin Perl sysopen
, perldoc -f sysopen
).
umask
Tanıştığım tek şey her zaman 0022, varsayılan izin 644 oluşturmaktı.