GNU/Linux >> Linux Esercitazione >  >> Linux

Come impostare autorizzazioni file specifiche durante il reindirizzamento dell'output?

So che è una vecchia domanda, ma volevo aggiungere i miei due centesimi.

Ho avuto la stessa idea e ho trovato una soluzione simile a BowlesCR. Il problema con la sua soluzione era che il mio comando (foo ) non funzionerebbe se cambiassi umask prima di eseguirlo, quindi questa è la mia opinione sul problema:

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

Qui, umask riguarda solo il reindirizzamento a foo.log nella subshell. Tutto il resto rimane inalterato.

Un po' contorto, ma funziona.


Senza un vero scripting, puoi concatenare un po':

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

Effettivamente simile alla risposta di Slowki, ma condensata in una battuta.

L'unica altra cosa che mi viene in mente è armeggiare con l'umask. Meglio farlo in una subshell in modo da non inquinare l'ambiente attuale:

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

Due problemi con questo, però.

  1. Umask non può aumentare i permessi oltre il livello specificato in creat() syscall (0666 sembra essere quello usato da Bash).
  2. Questo non cambierà i permessi su un file esistente (poiché umask si applica solo alla creazione del file ).

Non c'è modo di farlo durante il pipe, per quanto ne so, un semplice script potrebbe essere la soluzione migliore.

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

Linux
  1. Reindirizzamento di Stdout a un file su cui non disponi dell'autorizzazione di scrittura?

  2. Come svuotare un file di registro in Linux

  3. Come systemd-tmpfiles pulisce /tmp/ o /var/tmp (sostituzione di tmpwatch) in CentOS/RHEL 7

  4. Come modificare il percorso del file di registro auditd /var/log/audit/audit.log

  5. UNIX / Linux :Qual è il permesso corretto delle directory /tmp e /var/tmp

Come posso impostare cron per eseguire un file solo una volta in un momento specifico?

Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

Come stampare l'output del comando Linux su un file?

Come posso impostare un nick predefinito per le nuove connessioni irssi?

Come posso impostare il mio DNS quando resolv.conf viene sovrascritto?

Come modificare /tmp predefinito in /home/user/tmp