Saya sadar bahwa touch
perintah itu digunakan untuk memperbarui tanggal modifikasi terakhir pada file. Ini juga digunakan untuk membuat file baru jika file yang diminta tidak ada pada sistem file.
Karena sentuh (sesuai namanya), haruskah hanya memperbarui tanggal mod terakhir, mengapa juga mencoba membuat file baru?
Apakah ini hanya cek yang ditulis dalam kode sentuhan, atau apakah itu sesuatu yang menyebabkan file dibuat?
touch /forcefsck
untuk membuat file kosong yang dipanggil/forcefsck
untuk memaksa sistem file untuk diperiksa kesalahan pada reboot berikutnya. File itu sendiri tidak perlu mengandung apa pun, hanya perlu ada. Tanpatouch
, saya harus menggunakanvi
ataunano
menyimpan file kosong. Jauh lebih cepat digunakantouch
.>/forcefsck
atauprintf '' >>/forcefsck
(yang terakhir akan mempertahankan konten yang ada) Apa yang Anda gambarkan adalah cara untuk menggunakan utilitas yang bekerja dengan cara tertentu, tetapi itu tidak memiliki pengaruh nyata mengapa itu ditulis untuk bekerja seperti itu.touch
daripada bagaimana cara kerjanya, saya pikirtouch
melanggar Prinsip Tanggung Jawab Tunggal dengan efek samping pembuatan file. Oleh karena itu, "mengapa" hanya karena pilihan desain awal yang macet karena popularitas dan prevalensi / kemudahan penggunaan.Jawaban:
Menggunakan
strace touch t
hasil:Ini dalam
touch
kode dan saya tidak akan menyebutnya cek sekalipun. Cap waktu diperbarui dengan membuka file untuk ditulis dan kemudian menutupnya.sumber
touch
membuat file kosong baru jika file itu tidak ada karena itu yang dirancang untuk dilakukan. Utilitas harus berisi kode untuk menangani kasus itu secara khusus. Utilitas muncul di Unix V7 ; -nya pengguna menggambarkannya demikian:(Saya tidak tahu apa yang
touch
terjadi jika file itu kosong. Panggilan sistem yang mendasarinya datang kemudian.)Saya tidak tahu pasti mengapa
touch
dirancang untuk membuat file itu ada, tetapi saya menduga itu karenamake
. Mengapa Anda ingin mengatur waktu modifikasi file ke waktu saat ini? Ada kasus di mana itu bisa berguna untuk mengatur waktu modifikasi ke waktu tertentu, tetapi kemampuan itu datang kemudian, yang aslitouch
hanya bisa mengatur waktu modifikasi ke waktu saat ini. Alasan untuk melakukan itu adalah untuk menjalankan kembali amake
aturan yang bergantung pada file.Artinya, misalkan Anda memiliki file
foo
, dan makefile yang menyatakan perintah untuk menghasilkanbar
darifoo
. Saat Anda mengetikmake bar
, perintah dijalankan danbar
dibuat. Jikabar
ada dan lebih baru daripadafoo
,make bar
tidak melakukan apa-apa, karenamake
menganggap bahwabar
sudah dibuat. Namun, jikabar
lebih tua darifoo
, buat berpikir itubar
tidak mutakhir dan perlu diperbarui.Tetapi bagaimana jika aturan untuk menghasilkan
bar
telah berubah? Maka Anda memiliki dua opsi:rm bar; make bar
touch foo; make bar
Anda harus
foo
ada untuk menghasilkanbar
, jika tidak perintah biasanya tidak akan berfungsi.Terminologi "sentuh" juga ada dalam
make
utilitas:make -t bar
hanya akan berpura-pura menjalankan perintah, yaitu, itu akan mengatur waktu modifikasibar
ke waktu saat ini tanpa benar-benar menjalankan perintah untuk menghasilkanbar
(Anda akan melakukan ini jika Anda berpikir bahwa perubahan yangfoo
seharusnya tidak mempengaruhibar
). Thetouch
utilitas karena itu versi standalone darimake -t
fitur.sumber