GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie werden bestimmte Dateiberechtigungen beim Umleiten der Ausgabe festgelegt?

Ich weiß, es ist eine alte Frage, aber ich wollte meinen Senf hinzufügen.

Ich hatte die gleiche Idee und kam auf eine ähnliche Lösung wie BowlesCR. Das Problem mit seiner Lösung war, dass mein Befehl (foo ) würde nicht funktionieren, wenn ich die umask vor dem Ausführen geändert hätte, also ist dies meine Lösung des Problems:

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

Hier, umask wirkt sich nur auf die Umleitung auf foo.log aus in der Unterschale. Alles andere bleibt unberührt.

Etwas umständlich, aber es funktioniert.


Ohne echtes Scripting können Sie ein bisschen verketten:

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

Effektiv ähnlich wie Slowkis Antwort, aber zu einem Einzeiler zusammengefasst.

Das einzige andere, was mir einfällt, ist das Basteln mit der umask. Am besten tun Sie dies in einer Unterschale, damit die aktuelle Umgebung nicht verschmutzt wird:

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

Allerdings zwei Probleme damit.

  1. Umask kann die Berechtigungen nicht über die in creat() angegebene Stufe erhöhen syscall (0666 scheint das zu sein, was Bash verwendet).
  2. Dadurch werden die Berechtigungen für eine vorhandene Datei nicht geändert (weil umask gilt nur für die Erstellung von Dateien ).

Soweit ich weiß, gibt es keine Möglichkeit, dies beim Piping zu tun, ein einfaches Skript könnte die beste Lösung sein.

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

Linux
  1. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  2. So leeren Sie eine Protokolldatei unter Linux

  3. So ändern Sie den Pfad der auditd-Protokolldatei /var/log/audit/audit.log

  4. UNIX/Linux:Was ist die korrekte Berechtigung für die Verzeichnisse /tmp und /var/tmp?

  5. CentOS / RHEL :So rotieren Sie /var/log/wtmp- und /var/log/btmp-Dateien mit logrotate

So kürzen Sie /var/log/lastlog-Datei

Das Apache-Zugriffsprotokoll legt automatisch Berechtigungen fest

Wann sollte ich /dev/shm/ verwenden und wann sollte ich /tmp/?

Wie lege ich einen Standard-Nick für neue irssi-Verbindungen fest?

Wie stelle ich meinen DNS ein, wenn resolv.conf überschrieben wird?

So ändern Sie das Standard-/tmp in /home/user/tmp