GNU/Linux >> Tutoriels Linux >  >> Linux

Comment définir des autorisations de fichiers spécifiques lors de la redirection de la sortie ?

Je sais que c'est une vieille question, mais je voulais ajouter mon grain de sel.

J'ai eu la même idée et j'ai trouvé une solution similaire à BowlesCR. Le problème avec sa solution était que ma commande (foo ) ne fonctionnerait pas si je modifiais le umask avant de l'exécuter, voici donc mon point de vue sur le problème :

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

Ici, umask n'affecte que la redirection vers foo.log dans la sous-couche. Tout le reste reste inchangé.

Un peu compliqué, mais ça marche.


Sans véritable script, vous pouvez enchaîner un peu :

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

Effectivement similaire à la réponse de Slowki, mais condensée en une seule ligne.

La seule autre chose à laquelle je peux penser est de bricoler avec l'umask. Le mieux est de le faire dans un sous-shell pour ne pas polluer l'environnement actuel :

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

Deux problèmes avec cela, cependant.

  1. Umask ne peut pas augmenter les autorisations au-dessus du niveau spécifié dans le creat() syscall (0666 semble être ce que Bash utilise).
  2. Cela ne changera pas les permissions sur un fichier existant (car umask s'applique uniquement à la création de fichier ).

Pour autant que je sache, il n'y a aucun moyen de le faire pendant la canalisation, un simple script pourrait être la meilleure solution.

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

Linux
  1. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  2. Est-ce que Rsync ~/foo Target/foo est identique à Rsync ~/foo/ Target/foo/?

  3. Comment vider un fichier journal sous Linux

  4. Comment systemd-tmpfiles nettoie /tmp/ ou /var/tmp (remplacement de tmpwatch) dans CentOS / RHEL 7

  5. CentOS / RHEL :Comment faire pivoter les fichiers /var/log/wtmp et /var/log/btmp à l'aide de logrotate

Comment changer le chemin du fichier journal auditd /var/log/audit/audit.log

UNIX / Linux :Quelle est la bonne permission des répertoires /tmp et /var/tmp

Comment configurer cron pour exécuter un fichier une seule fois à un moment précis ?

Quand dois-je utiliser /dev/shm/ et quand dois-je utiliser /tmp/?

Comment définir un pseudo par défaut pour les nouvelles connexions irssi ?

Comment définir les autorisations de fichier par défaut pour tous les dossiers/fichiers d'un répertoire ?