Para utilitários GNU, a documentação completa está na infopá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 -ffoi forçar o toque.
Se você olhar para a fonte desses BSDs antigos, não houve utimes()chamada do sistema, touchabriria 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 ( touchevitaria tentar fazer isso se access(W_OK|R_OK)retornasse falso ). -ftentou 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. touchImplementaçõ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 touchainda não falha se for aprovada a -fopçã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.
-fcomo opção, é apenas ignorado. Talvez mutilado através do analisador de argumentos e é isso.