Soy consciente de que el touchcomando se utiliza para actualizar la fecha de la última modificación en un archivo. También se usa para crear un nuevo archivo si el archivo solicitado no existe en el sistema de archivos.
Dado que tocar (como su nombre lo indica), debería actualizar la última fecha de modificación, ¿por qué también intenta crear un nuevo archivo?
¿Es solo un cheque escrito en el código táctil o es algo más que hace que se cree un archivo?

touch /forcefsckpara crear un archivo vacío llamado/forcefsckpara forzar a los sistemas de archivos a verificar si hay errores en el próximo reinicio. El archivo en sí no necesita contener nada, solo necesita existir. Sin estotouch, necesitaría usarvionanoguardar un archivo en blanco. Mucho más rápido de usartouch.>/forcefsckoprintf '' >>/forcefsck(esta última preservaría cualquier contenido existente). Lo que describe es una forma de usar una utilidad que funciona de cierta manera, pero que no tiene una relación real sobre por qué está escrito para funcionar de esa manera.touchy no sobre cómo funciona, creo quetouchviola el Principio de responsabilidad única con el efecto secundario de la creación de archivos. Por lo tanto, el "por qué" se debe simplemente a las primeras opciones de diseño que se estancaron debido a la popularidad y la prevalencia / facilidad de uso.Respuestas:
Usando
strace touch trendimientos:Está en
touchel código y no lo llamaría un cheque sin embargo. La marca de tiempo se actualiza al abrir el archivo para escribir y luego simplemente cerrarlo.fuente
touchcrea un nuevo archivo vacío si el archivo no existe porque para eso fue diseñado. La utilidad tiene que contener código para manejar ese caso específicamente. La utilidad apareció en Unix V7 ; su manual lo describe así:(No sé qué
touchhizo si el archivo estaba vacío. La llamada del sistema subyacente vino después).No estoy seguro de por qué
touchfue diseñado para hacer que el archivo exista, pero sospecho que es por esomake. ¿Por qué querría establecer la hora de modificación de un archivo a la hora actual? Hay casos en los que podría ser útil establecer el tiempo de modificación en un momento en particular, pero esa capacidad llegó más tarde, el originaltouchsolo pudo establecer el tiempo de modificación en el tiempo actual. Una razón para hacerlo es volver a ejecutar unamakeregla que depende del archivo.Es decir, supongamos que tiene un archivo
foo, y un makefile que declara un comando para generarbara partirfoo. Cuando escribemake bar, el comando se ejecuta ybarse crea. Sibarexiste y es más nuevo quefoo,make barno hace nada, porquemakesupone quebarya se ha generado. Sin embargo, sibares más antiguo quefoo, haga pensar quebarno está actualizado y necesita ser regenerado.Pero, ¿qué pasa si las reglas para generar
barhan cambiado? Entonces tienes dos opciones:rm bar; make bartouch foo; make barTendría
fooque existir para generarbar, de lo contrario el comando normalmente no funcionaría.La terminología "táctil" también estaba presente en la
makeutilidad:make -t barsolo pretendía ejecutar los comandos, es decir, establecería el tiempo de modificaciónbaren la hora actual sin ejecutar realmente el comando para generarbar(haría esto si pensara que los cambios afoono deberían afectarbar). Portouchlo tanto, la utilidad era una versión independiente de lamake -tfunción.fuente