Dari man touch
:
-f (ignored)
Tapi saya tidak mengerti apa yang dimaksud dengan diabaikan .
Saya sudah mencoba mengikuti:
$ 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
Dan perhatikan bahwa itu mengubah cap waktu meskipun -f
.
Jadi, saya ingin tahu apa -f
artinya, atau apa fungsinya.
-f
sebagai opsi hanya diabaikan. Mungkin hancur melalui argumen parser dan hanya itu.Jawaban:
Untuk utilitas GNU, dokumentasi lengkap ada di
info
halaman, tempat Anda dapat membaca:Lihat halaman manual BSD bersejarah untuk disentuh , di mana
-f
harus memaksa sentuhan.Jika Anda melihat sumber BSD lama itu, tidak ada
utimes()
panggilan sistem, jaditouch
akan membuka file dalam mode baca + tulis, baca satu byte, cari kembali dan tulis lagi untuk memperbarui akses terakhir dan waktu modifikasi terakhir .Jelas, Anda memerlukan izin baca dan tulis (
touch
akan menghindari mencoba melakukan itu jikaaccess(W_OK|R_OK)
dikembalikan salah ).-f
mencoba mengatasinya dengan mengubah sementara izin untuk sementara ke 0666 !0666 berarti membaca dan menulis izin untuk semua orang. Pasti seperti itu (seperti dengan izin yang lebih ketat seperti 0600 yang masih mengizinkan sentuhan ) yang dapat berarti selama jendela pendek itu, proses yang seharusnya memiliki izin baca atau tulis ke file tidak bisa lagi , melanggar fungsionalitas .
Namun itu berarti bahwa proses yang seharusnya tidak memiliki akses ke file sekarang memiliki peluang pendek untuk membukanya, melanggar keamanan .
Itu bukan hal yang sangat masuk akal untuk dilakukan.
touch
Implementasi modern tidak melakukan itu. Sejak itu,utime()
system call telah diperkenalkan, memungkinkan perubahan modifikasi dan waktu akses secara terpisah tanpa harus berbaur dengan konten file (yang berarti juga berfungsi dengan file non-reguler) dan hanya perlu akses tulis untuk itu.GNU
touch
masih tidak gagal jika melewati-f
opsi, tetapi mengabaikan bendera. Dengan begitu, skrip yang ditulis untuk versi BSD lama itu tidak gagal saat diporting ke sistem GNU. Tidak banyak yang relevan saat ini.sumber
-f
masih berfungsi di Mac OS X. (Tapi tidak diragukan lagi ada setidaknya 57 cara berbeda untuk melakukan fungsi yang sama "lebih baik," menggunakan GUI! )-f
tidak melakukan apa-apa. Itu disimpan untuk kompatibilitas historis (dengan BSDtouch
menurutinfo touch
), sehingga aplikasi yang mengharapkannya tidak lulus dan kembali pesan kesalahan mengatakan itu tidak ada. Dengan asumsi bahwa ini adalah GNU coreutils, Anda dapat melihat di sumbernya bahwa ini hanya melakukanbreak
keluar dari saklar pemrosesan opsi tanpa melakukan apa pun.Sebagai opsi yang diabaikan,
-f
hadir dari versi pertama daritouch
perintah GNU yang ditambahkan pada tahun 1992 ( lihat perbedaan ). Tampaknya, setidaknya di FreeBSD v9,-f
"upaya [untuk] memaksa pembaruan, bahkan jika izin file saat ini tidak mengizinkannya" (seperti yang ditemukan oleh Sukminder, terima kasih).sumber
info
halaman mengatakan Diabaikan; untuk kompatibilitas dengan versi BSD `touch '.-f
adalah / digunakan untuk mencoba memaksa pembaruan bahkan jika izin file tidak mengizinkannya pada BSD. Bukan di V10, tetapi v9: freebsd.org/cgi/… (setidaknya dari FreeBSD).Setiap kali Anda melihat "opsi X diabaikan" di --help output atau manpage, itu berarti: program menerima opsi X - Anda tidak mendapatkan kesalahan sintaks - tetapi tidak memiliki efek apa pun. Program ini melakukan hal yang sama seperti yang dilakukan jika tidak ada pilihan.
Seperti yang ditunjukkan oleh jawaban lain, ini dilakukan untuk kompatibilitas ke belakang. Opsi yang digunakan memiliki efek, apa pun yang dilakukannya tidak lagi berguna, dan melakukan hal yang sama terlepas dari pilihannya adalah perilaku kompatibilitas yang tepat.
sumber
Saat melihat komentar di kode sumber historis , baris 22:
opsi -f dimaksudkan untuk diabaikan sejak rilis awal oleh Jim Meyering.
Dan pernyataan beralih untuk menangani opsi memiliki kasus eksplisit (baris 150/151) untuk tidak melakukan apa pun:
Sungguh luar biasa apa yang memotivasi penulis berikut sejak 1992 untuk membiarkan opsi ini diabaikan. Mungkin ada skenario penggunaan yang membutuhkan opsi -f dan jika tidak istirahat?
sumber