Tengo un archivo llamado error.log en mi servidor que necesito truncar con frecuencia. Tengo permisos rw para el archivo. Abrir el archivo en vi> eliminar todo el contenido> guardar trabajos (obviamente). Pero cuando pruebo lo de abajo
cat /dev/null > error.log
entiendo el mensaje
File already exists.
Obviamente, existe algún tipo de configuración en el servidor para evitar la anulación accidental de archivos. ¿Alguien puede decir cómo "trunco" el archivo en un solo comando?
                    
                        linux
                                file
                                command-line
                                
                    
                    
                        Sumeet Pareek
fuente
                
                fuente

Respuestas:
Tienes la
noclobberopción configurada. El error parece ser de csh, por lo que debería hacer:Si me equivoco y estás usando bash, debes hacer:
en bash, también puede acortarlo a:
fuente
File existserror similar mientras que bash da uncannot overwrite existing fileerror muy diferente .>fileno funciona.> filey>| file?noclobberopción configurada, el intento de redirigir a un archivo existente falla. Para anular la redirección específica sin dejar el noclobber activado, puede usar>|También puede utilizar la función truncar
si se le niega el permiso, use sudo
Ayuda / Manual: man truncate
probado en ubuntu Linux
fuente
Esto será suficiente para establecer el tamaño del archivo en 0:
fuente
el mérito es de mi colega principal por esto:
Esto no romperá los archivos de registro, por lo que incluso puede usarlo en syslog, por ejemplo.
fuente
:es un comando sin efecto (casi un comentario), luego>es la redirección como de costumbre, por lo que esto solo redirige la falta de salida de un comando que no hace nada en el archivo. Si noclobber está habilitado, necesita:>| filename(bash) (y supongo que:>! filenameen csh asumiendo que csh tiene:).puede funcionar también
fuente
ddsalida de nada sería incluso mejor que la simple lecturafalse?Dado que sudo no funcionará con la redirección
>, me gusta elteecomando para este propósitofuente
error.log, si ya se puede escribir, no es necesario sudo. Creo que el otro problema es que está pasando el comando como argumento de cadenash, no sé cómo se maneja internamente, pero esa es otra capa de complejidad / redirección agregadaecho ""agregará una nueva línea. Puede utilizarecho -n ""para suprimir la nueva líneaCualquiera puede probar este comando para truncar cualquier archivo en el sistema Linux
Esto seguramente funcionará en cualquier formato:
fuente
Me gusta esto:
cp /dev/null filefuente
También puedes probar:
echo -n > /my/filefuente
noclobbery luego pregúntese si su respuesta tiene algún sentido.