chraebsli@programming.dev to Programmer Humor@programming.dev · 9 months agoTouch a file in Linuxprogramming.devimagemessage-square94fedilinkarrow-up11.2K
arrow-up11.2KimageTouch a file in Linuxprogramming.devchraebsli@programming.dev to Programmer Humor@programming.dev · 9 months agomessage-square94fedilink
minus-square4am@lemm.eelinkfedilinkarrow-up21·9 months ago“Do one thing and do it very well” is the UNIX philosophy after all; if you’re 99% likely to just create that missing file after you get a file not found error, why should touch waste your time?
minus-squareTrailblazing Braille Taser@lemmy.dbzer0.comlinkfedilinkarrow-up35·9 months agoBecause now touch does two things. Without touch, we could “just” use the shell to create files. : > foo.txt
minus-squaredeegeese@sopuli.xyzlinkfedilinkarrow-up21·9 months agoTouch does one thing from a “contract” perspective: Ensure the timestamp of <file> is <now>
minus-squaredan@upvote.aulinkfedilinkarrow-up15·9 months agoSystemd also does one thing from a contract perspective: run your system
minus-squarestebo@lemmy.dbzer0.comlinkfedilinkarrow-up20·9 months agowith this logic, any command that moves, copies or opens a file should just create a new file if it doesn’t exist and now you’re just creating new files without realising just because of a typo
minus-squareKusimulkku@lemm.eelinkfedilinkarrow-up9·9 months agoBut this directly goes against that philosophy, since now instead of changing timestamps it’s also creating files
minus-squarekautau@lemmy.worldlinkfedilinkarrow-up10·edit-29 months agoYou can pass -c to not create a file, but it does go against the philosophy that it creates them by default instead of that being an option EDIT: Looking closer into the code, it would appear to maybe be an efficiency thing based on underlying system calls Without that check, touch just opens a file for writing, with no other filesystem check, and closes it With that check, touch first checks if the file exists, and then if so opens the file for writing
“Do one thing and do it very well” is the UNIX philosophy after all; if you’re 99% likely to just create that missing file after you get a file not found error, why should
touch
waste your time?Because now touch does two things.
Without touch, we could “just” use the shell to create files.
Touch does one thing from a “contract” perspective:
Ensure the timestamp of <file> is <now>
Systemd also does one thing from a contract perspective: run your system
Oh no.
:(
Does it do it well, though?
with this logic, any command that moves, copies or opens a file should just create a new file if it doesn’t exist
and now you’re just creating new files without realising just because of a typo
But this directly goes against that philosophy, since now instead of changing timestamps it’s also creating files
You can pass
-c
to not create a file, but it does go against the philosophy that it creates them by default instead of that being an optionEDIT: Looking closer into the code, it would appear to maybe be an efficiency thing based on underlying system calls
Without that check, touch just opens a file for writing, with no other filesystem check, and closes it
With that check, touch first checks if the file exists, and then if so opens the file for writing