History
“觸摸”代表什麼?
我的問題與其說是電腦科學問題,不如說是詞源問題。
該命令
touch
更改文件訪問和修改時間。“觸摸”代表什麼?
它不代表任何東西。它不是縮寫或縮寫。這是一個動詞。
當您
touch
創建一個文件時,您是在“在其上添加新的指紋”,更新其最後修改日期(或者如果它尚不存在則創建它)。
正如 DopeGhoti 所說,將時間戳更新為目前時間非常符合英語單詞的語義。談論“接觸”記憶體中的數據意味著訪問它是很常見的(例如“這個函式接觸了 2GB 的數據,所以它破壞了 CPU 的記憶體”)。該
touch(1)
命令的存在是為了以一種對元數據產生影響的方式接觸文件,而不會產生其他影響。它還具有將時間/日期元數據設置為目前時間以外的選項的選項,在這種情況下,語義含義不再適用。(例如
touch -r reference_file /tmp/foo
,將 mtime 和 atime 設置為與參考相同)。有點相關:
如果您好奇,GNU coreutils
touch(1)
實現使用以下系統呼叫序列將時間戳更新為目前時間:$ strace touch /tmp/foo ... open("/tmp/foo", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3 dup2(3, 0) = 0 close(3) = 0
open
withO_CREAT
實現了 create-if-missing 行為。省略會O_TRUNC
保留現有內容,就像>> /tmp/foo
會一樣。dup2
將 mtime、atime 和 ctime 三個都更新為目前時間。(僅open()
/close()
單獨不會影響時間戳)。要將時間設置為“現在”以外的時間,它會執行相同的序列,然後用於
utimensat(0, NULL, ...)
設置 stdout 引用的文件的時間(因為它將該文件的 fd 複製到 fd0)。