2012-04-19 30 views
7

मैं POSIX खोल (/bin/sh) में एक अस्थायी फ़ाइल बनाना चाहता हूं।एक सुरक्षित तरीके से पोर्टेबल खोल के साथ एक अस्थायी फ़ाइल कैसे बनाएँ?

मुझे पता चला कि mktemp(1) मेरे AIX बॉक्स पर मौजूद नहीं है, और How portable is mktemp(1)? के अनुसार, यह पोर्टेबल और/या सुरक्षित नहीं है।

तो, इसके बजाय मुझे क्या उपयोग करना चाहिए?

+0

unix.SE. पर निर्भर करता है। – l0b0

+0

ठीक है, यह एक sysadmin सवाल नहीं है, लेकिन एक _coding_ एक (यह यूनिक्स खोल में हो)। –

+0

इस अस्थायी फ़ाइल पर आपको किस तरह की सुरक्षा की आवश्यकता है? इससे आप जो भी उपयोग कर सकते हैं उसे प्रभावित करता है। –

उत्तर

8

/dev/random का उपयोग क्यों नहीं करें?

यह पर्ल लेकिन आयुध डिपो और awk करेंगे, की तरह कुछ के साथ neater हो सकता है:

tempfile=XXX-$(od -N4 -tu /dev/random | awk 'NR==1 {print $2} {}') 
+0

यह _exactly_ है जो मैं ढूंढ रहा था (सुरक्षित और POSIX)। '/ Dev/random' के बारे में नहीं सोचा था, लेकिन यह एक बार इतना स्पष्ट लगता है :) –

+0

लगभग सभी उद्देश्यों/dev/urandom के लिए बेहतर है। Https://unix.stackexchange.com/a/324210/197479 देखें। हेक्स का उपयोग छोटा है। इसे AIX6.1 पर परीक्षण किया गया: tempfile = XXX - $ (od -N4 -tx/dev/urandom | awk 'एनआर == 1 {प्रिंट $ 2} {}') – Ted

3

आप वास्तव में "सुरक्षित" को परिभाषित नहीं किया था, लेकिन इसके बारे में एक तत्व अपने आप के बाद साफ करने के लिए शायद है।

trap "rm -f \"$tmpfile\"" 0 1 2 3 15 

आप शायद man 3 signal अगर वहाँ अन्य संकेतों का कारण होना चाहिए अपने अस्थायी फ़ाइल मिटाया जा रहे हैं देखने के लिए कर सकते हैं। सिग्नल शून्य का मतलब है "एक साफ निकास पर"।

+1

+1 'जाल' के अक्सर अनदेखा उपयोग के लिए +1 । –

0

पोर्टेबल mktemp के लिए Google से यहां मिला। मेरी जरूरतें ओपी की तुलना में कम सुरक्षित हैं, इसलिए मैं केवल स्क्रिप्ट के पीआईडी ​​का उपयोग कर समाप्त हुआ:

tempx=/tmp/mytemp.$$ 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^