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 *?