Estoy un poco novato en Linux, y me pregunto si o no >
y touch
tener 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.txt
ya existe y no está vacío, ciertamente no.touch
un archivo que contiene datos no sucederá nada, pero si usted>
el archivo se borrará.Respuestas:
Ambos
touch
y>
crearán un nuevo archivo si no existe. Como muestran los siguientes comandos de terminal cuando se encuentratouch
un 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>
/ otruncate
se usan comúnmente para borrar archivos de registro incluso con un identificador de archivo abierto.Como se menciona en los comentarios,
touch
es 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.fil
logra lo mismo en un formato compacto de redirigir nada al archivo.fuente
> file.txt
es bueno para borrar archivos de registro.ln foo bar
, y luego eliminar y volver a crearfoo
,bar
todavía tiene su contenido anterior).rm /var/log/nginx/access.log
mientras nginx tenía ese archivo abierto, tendría 0 enlaces pero el inodo aún existiría.lsof -c nginx | grep access.log
luego con el pid,ls -l /proc/<pid>/fd/ | grep access.log
y 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.
Touch
es 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
find
comando 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.txt
existe y no está vacío,> file.txt
borrará su contenido perotouch file.txt
no lo hará. Pero nadie ha mencionado que>> file.txt
sea 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.txt
es 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_TRUNC
flag, 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
touch
es cambiar la marca de tiempo de un archivo, no crear un archivo.touch
crea 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
zsh
admite la redirección vacía: actúa de manera bastante similar a la redireccióncat
sin argumentos a un archivo. Básicamente, lo que escriba se escribirá en el archivo hasta un carácter EOF o una interrupción. Esto reflejazsh
el comportamiento de just<file
, que simplemente imprime el contenido del archivo, comocat
lo haría. Estos pueden ser configurables, he visto<file
abrir el archivo en un localizador.EOF
(como hacercat >file.txt
lo que ha dicho), donde bastaría conbash
hacerlo>file.txt
.touch
actualiza 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óntouch
que permite al usuario cambiar el tiempo de creación de inodo?