Wie erstelle ich eine temporäre Datei mit „normalen“ Berechtigungen?

Wie erstelle ich eine temporäre Datei mit „normalen“ Berechtigungen?

In einem Build-Skript möchte ich eine temporäre Datei mit einem eindeutigen generierten Namen erstellen, dann einige Daten hineinschreiben und die Datei anschließend in ihren endgültigen Namen umbenennen (der Grund für dieses Verfahren besteht darin, dass die Umbenennung (weitgehend) atomar erfolgen soll).

Wenn ich jedoch verwende mktemp, verfügt die neue Datei über sehr restriktive Berechtigungen:

Dateien werden u+rw und Verzeichnisse u+rwx erstellt, abzüglich der Umask-Einschränkungen.

... und diese Berechtigungen bleiben erhalten, wenn die Datei umbenannt wird. Ich möchte jedoch, dass die resultierende Datei „normale“ Berechtigungen hat; das heißt, sie sollte dieselben Berechtigungen haben wie Dateien, die durch touchoder durch eine Shell-Umleitung erstellt wurden.

Was ist der empfohlene Weg, dies zu erreichen? Gibt es eine (übliche) Alternative zu mktemp; oder gibt es eine einfache und zuverlässige Möglichkeit, die Dateiberechtigungen umasknachträglich auf die normalen Berechtigungen zu ändern?

Antwort1

chmod =rw "$file"Sie können nach dem Erstellen der temporären Datei verwenden . DieGNU-Manpagesagt:

Eine Buchstabenkombination ugoasteuert, bei welchem ​​Benutzer der Zugriff auf die Datei geändert wird: [...] Ist keine dieser Angaben vorhanden, ist die Wirkung so, als wäre (a) angegeben, allerdings sind die in der Umask gesetzten Bits davon nicht betroffen.

Erteilt also =rwum die Umask reduzierte Lese-/Schreibberechtigungen, ähnlich 0666der Übergabe als Berechtigungsargument an open(), was beispielsweise touch filenameoder echo > filenametun würde.

Das ist einPOSIX-Funktion, daher sollten auch andere Implementierungen es unterstützen.

Antwort2

Verwenden Sie diesen Link, um die gewünschten Berechtigungen zu erhaltenhttp://permissions-calculator.org/

Handbuch

Erstellen Sie eine Skriptdatei, die eine neue Datei erstellt und dann ihre Berechtigungen ändert.

#!/bin/bash

Filename=$1
Perms=$2

#Create a temp file
touch $Filename

#Change the file's permissions (Use your own desired permissions)
chmod $Perms $Filename

Nachdem Sie das Skript ausführbar gemacht haben chmod +x myscript.sh, führen Sie die Skriptdatei wie folgt aus./myscript.sh tempfile 600

Verwendung von Umask (nicht empfohlen)

Sie können die Standarddateiberechtigungen beispielsweise vorübergehend ändern, indem Sie umask 600Folgendes verwenden.

Um die Standarddateiberechtigungen dauerhaft zu ändern, bearbeiten Sie Ihre .bashrc-Datei im Stammverzeichnis Ihres Benutzers.

nano ~/.bashrc

am Ende der Datei hinzufügen umask 600. Stellen Sie natürlich sicher, dass die gewünschten Berechtigungen vorhanden sind. Stellen Sie außerdem sicher, dass Sie den richtigen Benutzer bearbeiten.

Wenn dies für ein Build-Skript ist, würde ich die manuelle Methode verwenden, anstatt mich auf umask zu verlassen. Insbesondere, wenn Ihr Build-Skript auf verschiedenen Systemen verwendet wird.

verwandte Informationen