Повна утиліта GNU знаходиться на infoсторінці, де ви можете прочитати:
-f
Проігноровано; для сумісності з BSD версіями `touch '.
Див історичних сторінок BSD людини за дотик , де повинні -fбуло змусити дотик.
Якщо ви подивитесь на джерело цих старих BSD, utimes()системного виклику не було, тому touchвідкриєте файл у режимі читання + запису, прочитайте один байт, шукайте назад і записуйте його ще раз, щоб оновити останній час доступу та останнього часу модифікації .
Очевидно, що вам потрібні були і права на читання, і на запис ( touchуникнути спроб зробити це, якщо access(W_OK|R_OK)повернеться неправдивим ). -fспробував обійти це, тимчасово змінивши дозволи на 0666 !
0666 означає дозвіл на читання та запис усім. Це повинно бути так, як інакше (як, наприклад, з більш обмежувальним дозволом, таким як 0600, який все-таки дозволив би дотик ), що могло означати під час цього короткого вікна, процеси, які в іншому випадку могли б прочитати чи записати дозвіл у файл, вже не могли , порушуючи функціональність .
Це означає, однак, що процеси, які б інакше не мали доступу до файлу, мають коротку можливість відкрити його, порушуючи безпеку .
Це не дуже розумна справа. Сучасні touchреалізації цього не роблять. З цього часу utime()системний виклик був введений, що дозволяє змінювати модифікації та час доступу окремо, не змішуючись із вмістом файлів (це означає, що він також працює з нестандартними файлами) і для цього потрібен лише доступ для запису.
GNU touchяк і раніше не виходить з ладу, якщо передає -fпараметр, а просто ігнорує прапор. Таким чином, сценарії, написані для тих старих версій BSD, не виходять з ладу при перенесенні в системи GNU. На сьогоднішній день не так вже й актуально.
-fяк варіант просто ігнорується. Можливо, проаналізували аналізатор аргументів, і все.