it-swarm.com.de

Warum brauchen wir Mktemp?

Ich verstehe nicht die Funktion von mktemp und was eine temporäre Datei bedeutet. 

Was ist der Unterschied zwischen etwa touch xyz und mktemp xyz (abgesehen von der Tatsache, dass mktemp eine Datei erstellt, an die xxx angehängt ist, und 600 Berechtigungen haben wird?)

Bitte klären Sie.

39
Shehbaz Jaffer

mktemp randomisiert den Namen . Dies ist aus Sicherheitsgründen sehr wichtig.

Stellen Sie sich vor, Sie machen so etwas wie:

echo something > /tmp/temporary-file

in Ihrem root-laufenden Skript.

Und jemand (der Ihr Skript gelesen hat) tut es

ln -s /etc/passwd /tmp/temporary-file

vor.

Der Befehl mktemp könnte Ihnen in dieser Situation helfen:

TEMP=$(mktemp /tmp/temporary-file.XXXXXXXX)
echo something > ${TEMP}

Dieser ln /etc/passwd-Angriff funktioniert jetzt nicht.

48
Igor Chubin

Sie möchten oft eine "Notizblockdatei" (oder ein Verzeichnis). Darüber hinaus benötigen Sie möglicherweise mehrere solcher Dateien gleichzeitig, und Sie möchten sich nicht darum kümmern, wie sie benannt werden müssen, damit es zu keinen Konflikten kommt.

"mktemp" passt auf die Rechnung :)

19
paulsm4

Sie haben es selbst beantwortet: mktemp() garantiert einen eindeutigen Namen.

http://linux.die.net/man/3/mktemp

Die Funktion mktemp () generiert aus .__ einen eindeutigen temporären Dateinamen. Vorlage. Die letzten sechs Zeichen der Vorlage müssen XXXXXX und diese .__ sein. werden durch eine Zeichenfolge ersetzt, die den Dateinamen eindeutig macht.

Wie @ MarcBs Kommentar (und die Manpage) jedoch darauf hinweist, sollten Sie ihn nicht verwenden: Sie sollten stattdessen mkstemp () verwenden.

9
Roddy

Ok eigentlich ist es klar in Manpages geschrieben.

mktemp - Erstellt eine temporäre Datei oder ein temporäres Verzeichnis.

Erstellen Sie eine temporäre Datei oder ein temporäres Verzeichnis, und drucken Sie ihren Namen.

Das Erstellen einer Datei oder eines Verzeichnisses bedeutet, dass kein anderer Benutzer darauf zugreifen kann. Aus diesem Grund ist die Berechtigung 600

touch - Ändern Sie die Zeitstempel der Datei

Es werden einfach die Zeitstempel einer Datei geändert, wenn sie bereits erstellt wurde, und eine Datei erstellt, falls sie nicht vorhanden ist. Die Dateiberechtigung ist jedoch standardmäßig immer noch 644.

Weitere Informationen finden Sie auf den folgenden Manpages:

http://linux.die.net/man/1/mktemp

http://linux.die.net/man/1/touch

7
linuxexplore

Ein weiterer zusätzlicher Grund: Nicht alle Systeme verwenden /tmp als temporäres Verzeichnis . Zum Beispiel hat https://termux.com/ aus technischen Gründen (es läuft innerhalb von Android als Prozess), ein anderer langer Pfad, da es ist tmp-Verzeichnis.

Skripts, die temporäre Dateien oder Verzeichnisse mit mktemp erstellen, sind portabel und funktionieren auch in solchen speziellen Umgebungen.

Zumindest in der Bash-Shell kannst du Folgendes tun:

dirpath="/tmp/dir1-$$/dir2-$$"  
mkdir -p $dirpath  
chmod -R 0700 /tmp/dir1-$$  

zum Beispiel.

0
leed25d