
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 touch
oder 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 umask
nachträ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
ugoa
steuert, 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 =rw
um die Umask reduzierte Lese-/Schreibberechtigungen, ähnlich 0666
der Übergabe als Berechtigungsargument an open()
, was beispielsweise touch filename
oder echo > filename
tun 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 600
Folgendes 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.