私の質問は、コンピュータサイエンスに関する質問ではなく、語源に関する質問です。
このコマンドはtouch
ファイルアクセスと変更時間を変更します。
「タッチする」とはどういう意味ですか?
答え1
しかし、実際にはそうではありません。代表する略語や頭字語ではありません。これは動詞です。
ファイルを作成すると、touch
「ファイルに新しいフィンガープリントを追加」し、最後の変更日を更新します(まだ存在しない場合は作成します)。
答え2
DopeGhotiが言ったように、タイムスタンプを現在の時刻に更新することは、英語の単語の意味と非常に一致しています。人々が一般的にメモリ内のデータを「接触」するとは、そのデータにアクセスすることを意味します(たとえば、「この機能は2GBのデータに接触してCPUキャッシュを破損させました」)。このtouch(1)
コマンドはメタデータに影響を与え、他の効果はない方法でファイルをタッチするために存在します。
また、時刻/日付メタデータを現在の時刻以外のものに設定するオプションもあります。この場合、セマンティックな意味はもはや実際には適用されません。 (たとえば、touch -r reference_file /tmp/foo
mtimeとatimeを参照と同じに設定します。)
やや関連:
質問がある場合、GNU coreutilstouch(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
withは、O_CREAT
欠落している場合に生成アクションを実装します。省略すると、O_TRUNC
既存のコンテンツはそのまま保存されます>> /tmp/foo
。 dup2
3 つの mtime、atime、ctime をすべて現在時刻に更新します。 (open()
/のみclose()
タイムスタンプには影響しません)。
時間を「今」以外の時間に設定するには、同じ順序を実行してから次のようにします。utimensat(0, NULL, ...)
stdoutが参照するファイルの時間を設定します(ファイルのfdをfd0にコピーするため)。