タッチすると、なぜ新しいファイルが作成されますか?

タッチすると、なぜ新しいファイルが作成されますか?

私はこのtouchコマンドがファイルの最後の変更日を更新するために使用されることを知っています。要求されたファイルがファイルシステムに存在しない場合は、新しいファイルを生成するためにも使用されます。

タッチ(名前が示すように)は最後の変更日のみを更新する必要がありますが、なぜ新しいファイルを生成しようとしますか?

タッチコードにチェックだけ書かれたのか、それともファイルが生成される他の原因があるのでしょうか?

ベストアンサー1

touchファイルが存在しない場合、新しい空のファイルが生成されます。ユーティリティには、特にこの状況を処理するためのコードが含まれている必要があります。このユーティリティは次の場所に表示されます。Unix V7;それは手動だから説明:

touch — ファイルが最後に変更された更新日

touchそれぞれに変更された日付を設定してみてください。文書。これは、ファイルから文字を読み書きする方法で行われます。ファイルが存在しない場合-cこのオプションを指定しないと、ファイルを生成しようとします。

touch(ファイルが空の場合はどうなるかわかりません。低レベルのシステムコール後で来ました。 )

なぜそのファイルが存在したいのかよくわかりませんが、touchおそらくそうです。make。ファイルの変更時刻を現在時刻に設定したいのはなぜですか?場合によっては、修正時間を特定の時間に設定すると便利ですが、この機能は後で表示され、元のバージョンではtouch修正時間を現在の時間にのみ設定できました。その理由は、makeこのファイルに依存するルールを再実行するためです。

fooつまり、ビルドコマンドを宣言するファイルとbarmakefileがあるとしますfoo。入力すると、make barコマンドが実行され生成されます。存在し、より最新の場合、bar仮定はすでに行われているため、何もしません。ただし、makeより古い場合は、makeは最新ではないと見なして再構築する必要があります。barfoomake barmakebarbarfoobar

しかし、生成されたルールがbar変更された場合はどうなりますか?次に、2つのオプションがあります。

  • rm bar; make bar
  • touch foo; make bar

foo作成するには存在する必要がありますbar。それ以外の場合、通常はコマンドは機能しません。

「タッチ」という用語は、次にも表示されます。makeユーティリティ:make -t barコマンドを実行するふりをするだけです。つまり、bar生成されるコマンドを実際に実行せずに変更時間を現在の時間に設定します(bar変更が影響を及ぼすべきではないと思う場合はfooこれを行うことができますbar)。したがって、このtouchユーティリティはこの機能のスタンドアロンバージョンですmake -t

おすすめ記事