から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
、それが何を意味するのか、どのような役割を果たすのか疑問に思います。
ベストアンサー1
GNUユーティリティの場合、ドキュメント全体はinfo
次のページにあります。
-f
無視されます。 「タッチ」のBSDバージョンと互換性があります。
バラより歴史的なBSDタッチマニュアルページ、-f
どこへ行くか力触れる。
その昔のBSDのソースコードを見るとutimes()
システムコールがないのでtouch
読み取り+書き込みモードでファイルを開き、1バイトを読み取り、逆追跡して書き換えることで、最後のアクセスと最後の修正時間を更新します。。
明らかに両方が必要です。読むそして書く権限(touch
access(W_OK|R_OK)
falseを返すと、これを行う必要はありません。)。-f
この問題を解決しよう一時的に権限を0666に変更します。!
0666 は、誰もが読み取りおよび書き込み権限を持っていることを意味します。そうでなければ(0600のようなより制限的な権限を使用するように依然として許可されます)触れる)これは、この短期間でファイルへの読み取りまたは書き込みアクセス権を持つプロセスがアクセスできなくなり、破損する可能性があることを意味します。特徴。
ただし、これはファイルにアクセスできなかったプロセスがファイルを開くチャンスが短くなり、ファイルを破棄することを意味します。安全。
これはあまり賢いことではありません。現代touch
の実装ではこれを行いません。その時から、utime()
システムコールファイルの内容と混ざらず(非正規ファイルでも機能することを意味する)、変更とアクセス時間を独立して変更できるようにするために導入されており、書き込みアクセスのみが必要です。
このオプションが渡されると、GNUはtouch
まだ失敗せずに-f
フラグを無視します。これにより、以前のバージョンのBSD用に作成されたスクリプトをGNUシステムに移植する際に失敗しません。最近はあまり関連性がありません。