Para utilitários GNU, a documentação completa está na info
página, onde você pode ler:
-f
Ignorado; para compatibilidade com versões BSD do `touch '.
Veja as páginas de manual históricas do BSD sobre toque , onde -f
foi forçar o toque.
Se você olhar para a fonte desses BSDs antigos, não houve utimes()
chamada do sistema, touch
abriria o arquivo no modo de leitura + gravação, leria um byte, procuraria novamente e escreveria novamente para atualizar o último acesso e a hora da última modificação .
Obviamente, você precisava de permissões de leitura e gravação ( touch
evitaria tentar fazer isso se access(W_OK|R_OK)
retornasse falso ). -f
tentou contornar isso alterando temporariamente as permissões temporariamente para 0666 !
0666 significa permissão de leitura e gravação para todos. Tinha que ser de outra maneira (como com uma permissão mais restritiva como 0600 que ainda teria permitido o toque ) que poderia significar durante aquela janela curta, processos que de outra forma teriam permissão de leitura ou gravação no arquivo não poderiam mais , quebrando funcionalidade .
Isso significa, no entanto, que os processos que de outra forma não teriam acesso ao arquivo agora têm uma curta oportunidade de abri-lo, quebrando a segurança .
Isso não é uma coisa muito sensata a se fazer. touch
Implementações modernas não fazem isso. Desde então, a utime()
chamada do sistema foi introduzida, permitindo alterar as modificações e o tempo de acesso separadamente, sem ter que se misturar com o conteúdo dos arquivos (o que significa que também funciona com arquivos não regulares) e só precisa de acesso de gravação para isso.
O GNU touch
ainda não falha se for aprovada a -f
opção, mas apenas ignora a flag. Dessa forma, os scripts escritos para essas versões antigas do BSD não falham quando transportados para os sistemas GNU. Não é muito relevante hoje em dia.
-f
como opção, é apenas ignorado. Talvez mutilado através do analisador de argumentos e é isso.