GNU/Linux >> Znalost Linux >  >> Linux

Jak nastavit konkrétní oprávnění k souboru při přesměrování výstupu?

Vím, že je to stará otázka, ale chtěl jsem přidat své dva centy.

Měl jsem stejný nápad a přišel s řešením podobným BowlesCR. Problém s jeho řešením byl, že můj příkaz (foo ) by nefungovalo, kdybych změnil umask před jeho spuštěním, takže toto je můj názor na problém:

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

Zde umask ovlivňuje pouze přesměrování na foo.log v podskořápce. Vše ostatní zůstává nedotčeno.

Trochu zamotané, ale funguje to.


Bez skutečného skriptování můžete trochu řetězit:

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

Účinně podobné Slowkiho odpovědi, ale zhuštěné do jednoho řádku.

Jediná další věc, která mě napadá, je pohrávat si s umask. Nejlepší je to udělat v subshell, aby to neznečišťovalo aktuální prostředí:

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

S tím jsou ale dva problémy.

  1. Umask nemůže zvýšit oprávnění nad úroveň specifikovanou v creat() syscall (zdá se, že Bash používá 0666).
  2. To nezmění oprávnění k existujícímu souboru (protože umask platí pouze pro vytváření souboru ).

Pokud je mi známo, neexistuje způsob, jak to udělat během potrubí. Nejlepším řešením může být jednoduchý skript.

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

Linux
  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Rozdíl mezi /var/log/messages, /var/log/syslog a /var/log/kern.log?

  3. Jak vyprázdnit soubor protokolu v Linuxu

  1. Jak systemd-tmpfiles vyčistí /tmp/ nebo /var/tmp (náhrada tmpwatch) v CentOS / RHEL 7

  2. Jak změnit cestu k souboru protokolu auditu /var/log/audit/audit.log

  3. CentOS / RHEL :Jak otočit soubory /var/log/wtmp a /var/log/btmp pomocí logrotate

  1. Jak zakázat automatické mazání souborů v adresářích /tmp a /var/tmp v CentOS / RHEL 5,6

  2. Přístupový protokol Apache automaticky nastavuje oprávnění

  3. Kdy mám použít /dev/shm/ a kdy /tmp/?