Soy consciente de que el touch
comando 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 /forcefsck
para crear un archivo vacío llamado/forcefsck
para 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 usarvi
onano
guardar un archivo en blanco. Mucho más rápido de usartouch
.>/forcefsck
oprintf '' >>/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.touch
y no sobre cómo funciona, creo quetouch
viola 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 t
rendimientos:Está en
touch
el 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
touch
crea 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é
touch
hizo si el archivo estaba vacío. La llamada del sistema subyacente vino después).No estoy seguro de por qué
touch
fue 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 originaltouch
solo pudo establecer el tiempo de modificación en el tiempo actual. Una razón para hacerlo es volver a ejecutar unamake
regla que depende del archivo.Es decir, supongamos que tiene un archivo
foo
, y un makefile que declara un comando para generarbar
a partirfoo
. Cuando escribemake bar
, el comando se ejecuta ybar
se crea. Sibar
existe y es más nuevo quefoo
,make bar
no hace nada, porquemake
supone quebar
ya se ha generado. Sin embargo, sibar
es más antiguo quefoo
, haga pensar quebar
no está actualizado y necesita ser regenerado.Pero, ¿qué pasa si las reglas para generar
bar
han cambiado? Entonces tienes dos opciones:rm bar; make bar
touch foo; make bar
Tendría
foo
que existir para generarbar
, de lo contrario el comando normalmente no funcionaría.La terminología "táctil" también estaba presente en la
make
utilidad:make -t bar
solo pretendía ejecutar los comandos, es decir, establecería el tiempo de modificaciónbar
en la hora actual sin ejecutar realmente el comando para generarbar
(haría esto si pensara que los cambios afoo
no deberían afectarbar
). Portouch
lo tanto, la utilidad era una versión independiente de lamake -t
función.fuente