GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo establecer permisos de archivo específicos al redirigir la salida?

Sé que es una vieja pregunta, pero quería agregar mis dos centavos.

Tuve la misma idea y se me ocurrió una solución similar a BowlesCR. El problema con su solución fue que mi comando (foo ) no funcionaría si cambiara el umask antes de ejecutarlo, así que esta es mi opinión sobre el problema:

foo | ( umask 0033; cat >> /tmp/foo.log; )

Aquí, umask solo afecta la redirección a foo.log en la subcapa. Todo lo demás no se ve afectado.

Un poco complicado, pero funciona.


Sin secuencias de comandos verdaderas, puede encadenar un poco:

touch /tmp/foo.log; chmod 0644 /tmp/foo.log; foo >> /tmp/foo.log

Efectivamente similar a la respuesta de Slowki, pero condensada en una sola línea.

Lo único que se me ocurre es jugar con el umask. Es mejor hacer esto en una subcapa para que no contamine el entorno actual:

(umask 0033 && foo >> /tmp/foo.log)

Sin embargo, hay dos problemas con eso.

  1. Umask no puede aumentar los permisos por encima del nivel especificado en el creat() syscall (0666 parece ser lo que usa Bash).
  2. Esto no cambiará los permisos en un archivo existente (porque umask se aplica solo a la creación del archivo ).

Hasta donde yo sé, no hay forma de hacerlo mientras se canaliza, un script simple podría ser la mejor solución.

if [ -e /tmp/foo.log ]; then
    foo >> /tmp/foo.log
else
    foo >> /tmp/foo.log
    chmod 0644 /tmp/foo.log
fi

Linux
  1. ¿Cómo maneja Linux múltiples separadores de rutas consecutivas (/home////username///file)?

  2. ¿Es Rsync ~/foo Target/foo lo mismo que Rsync ~/foo/ Target/foo/?

  3. ¿Diferencia entre /var/log/messages, /var/log/syslog y /var/log/kern.log?

  4. CentOS / RHEL:Cómo rotar el archivo /var/log/wtmp y /var/log/btmp usando logrotate

  5. Cómo deshabilitar la eliminación automática de los archivos en los directorios /tmp y /var/tmp en CentOS / RHEL 5,6

Cómo systemd-tmpfiles limpia /tmp/ o /var/tmp (reemplazo de tmpwatch) en CentOS/RHEL 7

Cómo cambiar la ruta del archivo de registro auditd /var/log/audit/audit.log

UNIX/Linux:¿Cuál es el permiso correcto de los directorios /tmp y /var/tmp?

¿Cuándo debo usar /dev/shm/ y cuándo debo usar /tmp/?

¿Cómo configuro un nick predeterminado para nuevas conexiones irssi?

Cómo cambiar el valor predeterminado /tmp a /home/user/tmp