In Unix history, touch was introduced in V7, and that’s also the version that introduced make. I’ve always thought of them as related, and the V7 make man page mentions touching files with the same meaning as touch (with the -t option), and references the touch man page. Stuart Feldman’s original Make paper also mentions touching files, and shows a recipe using touch to update what we’d now call a phony target (print) — and that’s still a common use in Makefiles (using “stamp” files). In that context, I think of touching a file as prodding it, indirectly prodding related build recipes in Make, or more generally prodding the build. To me, that context also explains touch’s double effect (updating a file’s last modification date, creating the file if necessary): if you want Make to apply a recipe, the recipe’s prerequisites must both exist and be newer than the target; if you want Make to ignore a recipe, the recipe’s target must both exist and be newer than the prerequisites.¹
That explains touch’s features, but it doesn’t explain why it’s called touch. Referring to English itself, another way of thinking of “touch” with a similar meaning to the touch utility is in reference to a body of work in general. “I haven’t touched this project in a while” isn’t the same as “I haven’t used this project in a while”: touching a project (whether it’s a project on a computer, or DIY, or a painting, or whatever) implies some level of modification, if only minor (like re-arranging paintbrushes before deciding you can’t actually be bothered painting that day). In that sense, a file’s last modification time indicates when it was last touched, and therefore a utility to update a file’s last modification time would naturally be referred to as touching the file — touch.
¹ A simpler explanation of this feature of touch could just be that a file must exist to have a last modification timestamp, so perhaps I’m reading too much into this make association. Incidentally, there are two circumstances in which V7 touch creates files: the first is when a file doesn’t exist, the second is when a file is empty — there was no “update timestamp” system call in V7, so touch did its job by reading a byte and writing it back; that’s impossible in an empty file, and touch calls creat() on those instead.
creatis not a misspelling per se, but a consequence of the behavior of some linkers from back then (names could only go up to 6 characters including a prefixing underscore, hence 5 characters for creat): unix.stackexchange.com/questions/10893/…