touch
的 -f 選項有什麼用?
來自
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, sotouch
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 ifaccess(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()
系統呼叫被引入,允許單獨更改修改和訪問時間,而不必與文件的內容混合(這意味著它也適用於非正常文件)並且只需要寫訪問權限。如果通過該選項, GNU
touch
仍然不會失敗-f
,只是忽略該標誌。這樣,為那些舊版本的 BSD 編寫的腳本在移植到 GNU 系統時不會失敗。現在沒有太大意義。