La mayoría de los shells de Linux (bash, csh, ksh, tcsh) tienen un mecanismo de protección de archivos incorporado para evitar que los archivos se sobrescriban accidentalmente. En este artículo, veremos cómo prevenirlo configurando la opción noclobber.
paliza
Redirigir la salida estándar a un archivo que ya existe sobrescribiría el contenido del archivo existente, lo que provocaría la pérdida de datos. Este proceso de sobrescribir los datos existentes se denomina clobbing. Para evitar sobrescribir, el shell proporciona una opción llamada «noclobber»
Protección de archivos usando noclobber:
Cuando se establece la opción noclobber, el shell se quejará si una redirección de shell (>) intenta sobrescribir un archivo existente. La opción noclobber se activa usando el comando set en bash/ksh. Por defecto, la opción está deshabilitada.
Una vez habilitada la opción, bash se quejará si intentamos sobrescribir un archivo,
Protecciones superiores:
Para anular temporalmente el comportamiento de noclobber, se utiliza un operador de redirección especial (>|),
Otra forma es volver al comportamiento predeterminado deshabilitando la opción de shell,
De forma predeterminada, la opción noclobber está deshabilitada, y para habilitarla cada vez que se genera un nuevo shell, debe agregarse en el script de inicio (~/.bashrc),
La opción noclobber protege las sobrescrituras de archivos solo para la redirección. Eliminar el archivo a través de rm y agregarlo al archivo a través de la redirección «>>» funciona normalmente.
Truncar un archivo de registro:
Los archivos de registro se mantienen abiertos por el servicio que registra los datos. No es posible eliminarlos ya que el sistema operativo mantiene una pestaña en los identificadores de archivos abiertos. Para truncar el archivo de registro, redirigimos /dev/null al archivo mediante el operador de anulación.
/dev/null >| my_logfile.log