Estoy un poco novato en Linux, y me pregunto si o no >y touchtener el mismo efecto. Quiero decir, ¿los siguientes dos comandos tienen el mismo efecto ?:
$ > file.txt
$ touch file.txt
Si es así, sería genial saber que puedo escribir `> file.txt 'para crear nuevos archivos.
command-line
lmiguelvargasf
fuente
fuente

file.txtya existe y no está vacío, ciertamente no.touchun archivo que contiene datos no sucederá nada, pero si usted>el archivo se borrará.Respuestas:
Ambos
touchy>crearán un nuevo archivo si no existe. Como muestran los siguientes comandos de terminal cuando se encuentratouchun archivo existente, se actualiza el tiempo de acceso / última modificación. Pero si usted>a un archivo existente se trunca y la última hora modificada se actualiza (el tiempo de acceso no lo es). Tenga en cuenta que>no elimina / desvincula el archivo. El inodo permanece igual, razón por la cual>/ otruncatese usan comúnmente para borrar archivos de registro incluso con un identificador de archivo abierto.Como se menciona en los comentarios,
touches un comando externo y solo funciona en archivos.>es una función incorporada de shell que sirve para muchos propósitos diferentes. Por lo general, verías que se usa comocat source.fil > target.fil.Una forma larga para vaciar un archivo sería:
El uso
> emptme.fillogra lo mismo en un formato compacto de redirigir nada al archivo.fuente
> file.txtes bueno para borrar archivos de registro.ln foo bar, y luego eliminar y volver a crearfoo,bartodavía tiene su contenido anterior).rm /var/log/nginx/access.logmientras nginx tenía ese archivo abierto, tendría 0 enlaces pero el inodo aún existiría.lsof -c nginx | grep access.logluego con el pid,ls -l /proc/<pid>/fd/ | grep access.logy finalmente cat / proc / <pid> / fd / <nombre de archivo del comando anterior> `. Comentando a pesar de que esto es viejo. Espero queHay una diferencia sustancial entre los dos.
Touches un comando que se utiliza para marcar el tiempo de un archivo. El>símbolo es un redirector de salida estándar.Uso de los dos explicados
Uso del tacto
Si el archivo no existe, creará el archivo.
El tacto se usa comúnmente para crear banderas. Por ejemplo, si desea encontrar todos los archivos entre dos veces en su sistema, puede usar esta secuencia de comandos:
Esto creará los siguientes archivos (o cambiará la marca de tiempo si existen):
Ahora puede usar find para mostrar o procesar todos los archivos que se modificaron en esa hora (tiempo entre las dos marcas de tiempo de los archivos, es decir, entre las 10 p.m. y las 11 p.m. del 29 de septiembre de 2016).
Esta es una salida parcial del comando find anterior:
Uso de redirección de salida
El símbolo de redireccionamiento redirigirá la salida estándar al archivo especificado. Dependiendo de su configuración de clobber / noclobber si podría fallar. Noclobber solo creará el archivo si no existe.
Hay varias versiones de la salida de redirección que incluye:
Podríamos usar nuestro
findcomando anterior para redirigir el contenido de todos los archivos creados dentro de la hora especificada a un archivo que podamos registrar y estudiar más tarde:fuente
file.txtexiste y no está vacío,> file.txtborrará su contenido perotouch file.txtno lo hará. Pero nadie ha mencionado que>> file.txtsea un buen sustitutotouch file.txt: creará el archivo si no existe (suponiendo que tenga permiso para hacerlo), pero no truncará un archivo existente. Consulte ¿Cuál es la diferencia entre ">" y ">>"?Usage of Output redirection. Aviso es dice>>=Redirect append>.>> file.txtes un sustituto viable paratouch file.txt. (El hecho de que usted es la única persona que se menciona>>en absoluto es por eso que he publicado mi comentario debajo de su respuesta, en lugar de debajo de la pregunta.)>es el operador de redirección de salida de shell, utilizado para redirigir STDOUT de los comandos anteriores al descriptor de archivo mencionado a continuación>. Si el archivo está presente, su contenido se truncará, como un archivo con beopen(2)-ed withO_TRUNCflag, y si el archivo no existe, se creará.Es importante tener en cuenta que este operador de redirección será manejado por el shell antes de que se ejecute el comando anterior, por lo que esto no depende de ningún comando y el mismo shell lo manejará.
Tenga en cuenta que algunos shells (p
zsh. Ej. ) Se comportarán de manera diferente con una redirección vacía como:Una solución alternativa típica es agregar el comando
:(true) no-op:Tradicionalmente, el objetivo principal
touches cambiar la marca de tiempo de un archivo, no crear un archivo.touchcrea un archivo, solo cuando los archivos mencionados en el argumento no existen, de lo contrario cambia la hora de modificación del archivo a la marca de tiempo actual. También puede cambiar el tiempo de acceso y el tiempo de creación de inodo usandotouch.fuente
zshadmite la redirección vacía: actúa de manera bastante similar a la redireccióncatsin argumentos a un archivo. Básicamente, lo que escriba se escribirá en el archivo hasta un carácter EOF o una interrupción. Esto reflejazshel comportamiento de just<file, que simplemente imprime el contenido del archivo, comocatlo haría. Estos pueden ser configurables, he visto<fileabrir el archivo en un localizador.EOF(como hacercat >file.txtlo que ha dicho), donde bastaría conbashhacerlo>file.txt.touchactualiza el tiempo de modificación y el tiempo de acceso del archivo. Hay opciones para actualizar solo uno u otro. (2) Unix / Linux / POSIX no admite el "tiempo de creación de inodo", en general. Algunos tipos de sistemas de archivos lo admiten, pero no hay una forma universal de verlo, y mucho menos modificarlo. ¿Puede proporcionar una referencia que diga que hay una encarnacióntouchque permite al usuario cambiar el tiempo de creación de inodo?