Повна утиліта 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
як варіант просто ігнорується. Можливо, проаналізували аналізатор аргументів, і все.