Does anyone actually use
touch
for its intended purpose? Must be up there withcat
.The intended use of
touch
is to update the timestamp right?Yeah. It could just as well have issued a file not found error when you try to touch a nonexistent file. And we would be none the wiser about what we’re missing in the world.
“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.
: > foo.txt
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
TIL it’s actually for changing timestamps.
Wtf. All these years I thought ‘touch’ was reference to Michelangelo’s Creation of Adam.
That’s beautiful, bro 🥲
Creating an empty file is one of its intended purposes. Unix commands were designed as multi-purpose primitives, so they could be reused and composed to handle many different tasks. The touch command is no exception.
what is cat’s use if not seeing whats inside a file?
It is to use along with
split
. e.g.- You take a single large file, say 16GB
- Use
split
to break it into multiple files of 4GB - Now you can transfer it to a FAT32 Removable Flash Drive and transfer it to whatever other computer that doesn’t have Ethernet.
- Here, you can use
cat
to combine all files into the original file. (preferably accompanied by a checksum)
It is short for concatenate, which is to join things together. You can give it multiple inputs and it will output each one directly following the previous. It so happens to also work with just one input.
That’s why we have
bat
nowTo bonbatenate files?
I sometimes use cat to concatenate files. For example, add a header to a csv file without manually copy and paste it. It’s rare, but at least more frequent than using touch.
$ cat file1 > output_file $ cat file2 >> output_file $ cat file3 >> output_file
I’m sorry!
These are some weird looking dolph— oh
As a Linux user, that is truly magical, and beautiful.
Same energy as Joan Cornella’s comics
Is there a command that’s actually just for creating a new file?
most shells will accept outputting from a silent command to a file, e.g.
:> foo.txt
(where:
is the posix synonym to thetrue
command)How often do you actually need a blank file though? Usually you’d be writing something in the file.
I’m betting that’s why none ever materialized. Most tools that can manipulate a file, can also create that file first, so there’s just never been a usecase.
Right-clicking the desktop to create a new txt file in Windows feels so natural, but I can’t really think of any time you’d want to create a new file and do nothing with it in a CLI.
You might if some other program checks whether that file exists and behaves differently depending on that.
But even still, what’s a realistic usecase that would that involve needing a blank, unmodified file in that instance?
One use case is if you’re running a web server that is configured to return a “maintenance” page instead of the live site if a particular file exists. Which is actually pretty cool because then you don’t have to update the config when you need to do something or let your users get a bunch of 502 errors, you just
touch maintenance
and you’re good.
Remember to confirm consent before touching.
You can only touch in places where you have permission to touch.
sudo touch woman
Iseif is not in the sudoers file. This incident will be reported.
to whom, perchance?