私の知る限り、これは標準ユーティリティにハードコードされています。私はstrace
両方のAは、D touch
新しいファイルを作成し、mkdir
新しいディレクトリを作成します。
touch
トレースは、これを作成しました:
open("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
一方、mkdir
トレースはこれを生成しました:
mkdir("newdir", 0777) = 0
Cでファイル/ディレクトリ作成プロセスをコーディングする以外には、デフォルトのパーミッションを変更する方法がありません。ただし、デフォルトではファイルを実行可能にしないことは理にかなっているようです。ランダムなテキストをシェルコマンドと誤って解釈することは望ましくありません。
更新
許可ビットを標準ユーティリティにハードコードする方法の例を示します。次にcoreutils
、touch(1)
との両方のソースコードを含むパッケージ内の2つのファイルの関連行を示します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
によって(read:0777)に変更されますumask_value
。
touch.c
さらに明確です:
int default_permissions =
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
つまり、すべてのユーザーに読み取りおよび書き込みのアクセス許可(読み取り:0666)を付与します。これは、umask
もちろんファイル作成のプロセスによって変更されます。
あなたは周りを取得することができるかもしれこのプログラムでのみ:あなたが直接、またはあなたは、低レベルのシステムコールを行うことができます言語の中から、システムの呼び出しを行うのいずれかのCプログラム内からファイルを作成中(たとえばPerlのために参照すなわちsysopen
下perldoc -f sysopen
)。
umask
出会ったのは常に0022 だけで、デフォルトの許可644が作成されました