Para os utilitários GNU, a documentação completa está na página info , onde você pode ler:
-f
Ignored; for compatibility with BSD versions of 'touch'.
Veja histórico de man pages do BSD para touch , onde -f foi forçar o toque.
Se você olhar para a origem desses BSDs antigos, não houve nenhuma chamada de sistema utimes() , então touch abriria o arquivo no modo leitura + escrita, leria um byte, procuraria e escreveria novamente para atualizar o último acesso e a última modificação. .
Obviamente, você precisava das permissões read e write ( touch evitaria tentar fazer isso se access(W_OK|R_OK) retornasse falso ). -f tentou contornar isso por temporariamente alterando temporariamente as permissões para 0666 !
0666 significa permissão de leitura e gravação para todos. Tinha que ser assim (como com uma permissão mais restritiva como 0600 que ainda teria permitido o touch ) que poderia significar durante aquela janela curta, processos que teriam permissão de ler ou escrever para o arquivo não podia mais, quebrando a funcionalidade .
Isso significa, no entanto, que processos que não teriam acesso ao arquivo agora têm uma pequena oportunidade de abri-lo, quebrando segurança .
Isso não é uma coisa muito sensata a fazer. Implementações% touch modernas não fazem isso. Desde então, foi introduzida a utime() chamada do sistema , que permite alterar a modificação 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 precisa apenas de acesso de gravação para isso.
O GNU touch ainda não falha se passar a opção -f , mas apenas ignora o sinalizador. Dessa forma, scripts escritos para essas versões antigas do BSD não falham quando portados para sistemas GNU. Não é muito relevante hoje em dia.