Coreutils

touch 的 -f 選項有什麼用?

  • April 1, 2016

來自man touch

-f     (ignored)

但我不明白被忽略的意思。

我試過以下:

$ ls -l file
-rw-rw-r-- 1 pandya pandya 0 Mar 20 16:17 file
$ touch -f file
$ ls -l file
-rw-rw-r-- 1 pandya pandya 0 Mar 20 16:18 file

並註意到它會更改時間戳,儘管 -f.

所以,我想知道-f它代表什麼,或者它做了什麼。

對於 GNU 實用程序,完整的文件在info頁面中,您可以在其中閱讀:

-f
忽略;為了與 BSD 版本的 `touch’ 兼容。

請參閱歷史 BSD 手冊頁以了解 touch ,強制觸摸-f的位置。

If you look at the source of those old BSDs, there was no utimes() system call, so touch would open the file in read+write mode, read one byte, seek back and write it again so as to update the last access and last modification time.

Obviously, you needed both read and write permissions (touch would avoid trying to do that if access(W_OK|R_OK) returned false). -f tried to work around that by temporarily changing the permissions temporarily to 0666!

0666 表示每個人的讀寫權限。必須是這樣(例如使用更嚴格的權限,例如 0600 仍然允許touch),這可能意味著在那個短視窗期間,本來對文件具有讀取或寫入權限的程序不能再,破功能

然而,這意味著原本無法訪問該文件的程序現在有很短的機會打開它,從而破壞了安全性

這不是一件很明智的事情。現代touch實現不這樣做。從那時起,utime()系統呼叫被引入,允許單獨更改修改和訪問時間,而不必與文件的內容混合(這意味著它也適用於非正常文件)並且只需要寫訪問權限。

如果通過該選項, GNUtouch仍然不會失敗-f,只是忽略該標誌。這樣,為那些舊版本的 BSD 編寫的腳本在移植到 GNU 系統時不會失敗。現在沒有太大意義。

引用自:https://unix.stackexchange.com/questions/271013