Per le utility GNU, la documentazione completa si trova nella info
pagina, dove è possibile leggere:
-f
ignorato; per compatibilità con le versioni BSD di `touch '.
Vedi le pagine man storiche di BSD per il tocco , dove -f
doveva forzare il tocco.
Se si guarda alla fonte di quei vecchi BSD, non c'era nessuna utimes()
chiamata di sistema, quindi touch
si apriva il file in modalità lettura + scrittura, si leggeva un byte, si cercava di nuovo e si riscriveva in modo da aggiornare l'ultimo accesso e l'ora dell'ultima modifica .
Ovviamente, avevi bisogno delle autorizzazioni di lettura e scrittura ( touch
eviterei di provare a farlo se access(W_OK|R_OK)
restituito falso ). -f
ha cercato di aggirare il problema modificando temporaneamente le autorizzazioni temporaneamente su 0666 !
0666 significa permesso di leggere e scrivere a tutti. Doveva essere altrimenti (come con un'autorizzazione più restrittiva come 0600 che avrebbe comunque permesso il tocco ) che poteva significare durante quella breve finestra, i processi che altrimenti avrebbero letto o scritto l'autorizzazione al file non potevano più , funzionalità di rottura .
Ciò significa tuttavia che i processi che altrimenti non avrebbero accesso al file ora hanno una breve opportunità per aprirlo, rompendo la sicurezza .
Non è una cosa molto ragionevole da fare. Le touch
implementazioni moderne non lo fanno. Da allora è stata introdotta la utime()
chiamata di sistema , che consente di modificare le modifiche e il tempo di accesso separatamente senza dover mescolarsi con il contenuto dei file (il che significa che funziona anche con file non regolari) e necessita solo dell'accesso in scrittura per quello.
GNU touch
continua a non fallire se viene passata l' -f
opzione, ma ignora semplicemente la bandiera. In questo modo, gli script scritti per quelle vecchie versioni di BSD non falliscono quando vengono portati su sistemi GNU. Al giorno d'oggi non molto rilevante.
-f
l'opzione sia appena ignorata. Forse ha rovinato l'argomento parser e basta.