Existe algum mérito técnico / necessidade para numerosos comandos * nix ( mkdir
, mkfifo
, mknod
) tendo uma opção -m
( --mode
)?
Pergunto isso porque, por mais que eu saiba, umask
(o comando shell e o syscall) fornecem tudo que você precisa para controlar as permissões de um arquivo:
Por exemplo, posso fazer isso:
mkdir -m 700 "$my_dir"
.. mas também posso fazer com facilidade:
old_umask='umask' \
&& umask 0077 \
&& mkdir "$my_dir"
umask "$old_umask"
Para ser claro, eu posso ver que o primeiro é muito mais amigável e conveniente (especialmente para o uso da linha de comando), mas eu realmente não vejo uma vantagem técnica do antigo sobre o último.
Note também que eu entendo os méritos dessa flexibilidade no nível de syscall subjacente: se eu quiser chamar open
ou sem_open
ou o que você tem com no máximo 600 permissões, faz sentido que eu passe apenas S_IRUSR | S_IWUSR
ao syscall aberto, nunca se preocupe com o umask
syscall, salvando um roundtrip do syscall (ou dois, se eu quiser redefinir o umask desde que a chamada umask
modifique o umask atual) e meu código seja mais simples /limpador. Isso não se aplica no exemplo de linha de comando porque a opção -m
/ --mode
de tal comando terá para chamar umask
para zerar o umask do processo desse comando, para garantir os bits mode / permission que devem ser configurados no novo arquivo / o que estiver definido. (Por exemplo, se ask de meu shell for 022
, então mkdir -m 777 /tmp/foo
só funcionará como esperado se estiver chamando umask
internamente para zerar o umask herdado do shell.)
Então, o que eu quero ter certeza de que eu não perdi na minha consideração do problema é, existe algo que você não poderia realizar apenas com o comando umask
, sem confiar nas opções -m
/ --mode
dos comandos mk *?