GNU yardımcı programları için, tam belge info
okuyabileceğiniz sayfadadır:
-f
Yok Sayılan; 'dokunma' BSD sürümleri ile uyumluluk için.
Bkz dokunuş için tarihi BSD man sayfalarını , -f
oldu zorlamak dokunuş.
Bu eski BSD'lerin kaynağına bakarsanız, utimes()
sistem çağrısı yapılmazdı , bu nedenle touch
dosyayı okuma + yazma modunda açar, bir bayt okur, geriye doğru arar ve son erişimi ve son değişiklik zamanını güncellemek için tekrar yazar .
Açıkçası, hem gerekli okuma ve yazma izinleri ( touch
yapmaya çalışıyor ki eğer önleyeceğini access(W_OK|R_OK)
iade YANLıŞ ). geçici olarak izinleri geçici olarak değiştirerek 0666'ya-f
çalışmayı denedim !
0666 herkese okuma ve yazma izni anlamına gelir. Aksi takdirde ( kısa bir süre zarfında dokunmaya izin vermiş olan 0600 gibi daha kısıtlayıcı bir izinle olduğu gibi ), bu kısa pencerede anlamına gelebilecek, aksi takdirde dosyaya okuma ya da yazma izni verebilecek olan süreçlerin artık çözülemeyeceği şekilde olmalıydı. işlevsellik kırma .
Ancak bu, başka bir şekilde dosyaya erişimi olmayacak olan işlemlerin şimdi açmak için kısa bir fırsata sahip olduğu ve güvenliği bozduğu anlamına gelir .
Bu yapılacak çok mantıklı bir şey değil. Modern touch
uygulamalar bunu yapmaz. O zamandan bu yana, utime()
sistem çağrısı tanıtıldı, dosyaların içeriğine karışmak zorunda kalmadan değişiklik yapma ve erişim zamanını ayrı ayrı değiştirmeye izin verdi (bu, normal olmayan dosyalarla de çalışır) ve yalnızca bunun için yazma erişimine ihtiyaç duyuyor.
GNU seçeneği touch
geçerse hala başarısız olmaz -f
, ancak sadece bayrağı görmezden gelir. Bu şekilde, BSD'nin eski sürümleri için yazılmış komut dosyaları, GNU sistemlerine aktarıldığında başarısız olmaz. Bugünlerde pek alakalı değil.
-f
seçenek olarak görmezden gelinir. Belki argüman ayrıştırıcı ile karışmış ve o kadar.