2010-03-12 22 views
21

मैंने हमेशा सुना है कि यूनिक्स मशीन पर अस्थायी फ़ोल्डर को खोजने का उचित तरीका टीएमपी पर्यावरण चर को देखना था। विंडोज़ के साथ-साथ लिनक्स पर काम करने वाले कोड लिखते समय, मैं टीईएमपी और टीएमपी की जांच करता हूं।टीएमपी पर्यावरण चर के साथ क्या हुआ?

आज, मैंने पाया कि मेरे उबंटू इंस्टॉलेशन में उस पर्यावरण चर बिल्कुल नहीं है।

मुझे पता है कि ऐसा लगता है कि आप हमेशा अपनी अस्थायी फ़ाइलों को रखने के लिए वहां/tmp पर भरोसा कर सकते हैं, लेकिन मुझे समझ में आया कि टीएमपी जिस तरह से उपयोगकर्ता आपको अस्थायी फ़ाइलों को कहीं और रखने के लिए कह सकता है।

क्या यह अभी भी मामला है?

+2

यह भी स्थानीय कैसे है? मुझे यकीन है कि लिनक्स में कुछ लोग अस्थायी फाइलों का उपयोग करते हैं। – Cascabel

उत्तर

12

आप शायद TMPDIR के बारे में सोच रहे हैं।

यह चर उन प्रोग्रामों के लिए उपलब्ध निर्देशिका के पथनाम का प्रतिनिधित्व करेगा जो अस्थायी फ़ाइलों को बनाने के लिए किसी स्थान की आवश्यकता है।

+6

उबंटू एलटीएस सर्वर 12.04 अंड 14.04 के मेरे डिफ़ॉल्ट इंस्टॉलेशन में अस्थायी निर्देशिका, न तो टीएमपीडीआईआर, न ही टीएमपी या टीईएमपी के बारे में कोई पर्यावरण चर नहीं है, भले ही टीएमपीडीआईआर कुछ स्थानों पर दस्तावेज हो। अंत में, यह चर विश्वसनीय नहीं लगता है (अब)। –

+0

फ़ॉलबैक के साथ: 'TMPDIR =" {$ {TMPDIR: - $ (dirname $ (mktemp)) /} " – Deilan

8

पॉज़िक्स/एफएचएस का कहना है कि /tmp अस्थायी फ़ाइलों के लिए मूल है, हालांकि कुछ प्रोग्राम $TEMP या $TMP की बजाय जांच कर सकते हैं।

+0

http://www.pathname.com/fhs/pub/fhs-2.3.html#TMPTEMPORARYFILES –

9

अस्थायी निर्देशिका बनाने का एक अच्छा तरीका mktemp का उपयोग कर रहा है, उदा।

mktemp -d -t 

इस तरह, आप यह भी सुनिश्चित कर सकते हैं कि आपके फ़ाइल नाम मौजूदा फ़ाइलों के साथ टकराएंगे।

+2

यह एक अच्छा जवाब है, लेकिन यह ऊपर दिए गए प्रश्न का उत्तर नहीं है। –

1
वैश्विक चर कमांड।
# prompt> 
printenv | sort 
$ TMP घोषित (घ)
# So, prompt> (i.e. if [ -d /tmp ] is true) 
export TMP="/tmp" 

export नहीं है? एक सबहेल में चर पारित करने के लिए।
इसके अलावा, सेट होने पर $ TMPDIR का उपयोग करें, यह लिनक्स के लिए सही var नाम है। और हां, मैं/tmp निर्देशिका का उपयोग करता हूं; कम से कम रीबूट पर फ़ाइलों को हटा दिया जाएगा।

2

क्या @Chris Lercher कहा की तरह, मुझे लगता है कि यह मेरे लिए काम करता है:

dirname $(mktemp -u -t tmp.XXXXXXXXXX) 

कि वास्तव में एक अस्थायी फ़ाइल (-u झंडा mktemp करने की वजह से) नहीं बनाएगा लेकिन यह हूँ आपको निर्देशिका दें कि temp फ़ाइलों को लिखा जाएगा। यह स्निपेट ओएसएक्स और उबंटू (शायद अन्य * निक्स भी) पर काम करता है।

आप एक चर में स्थापित करने के लिए, कुछ इस तरह करते हैं चाहते हैं:

TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)` 
+2

या बस:' dirname $ (mktemp -u) '। – ekhumoro

0

FYI करें - जो प्रति-उपयोगकर्ता है - ubuntu (और मैं अन्य systemd आधारित distros मान) XDG_RUNTIME_DIR चर को परिभाषित करता है अस्थायी स्थान बस/tmp से, इतने कम और अधिक सुरक्षित:

$ $ XDG_RUNTIME_DIR गूंज/चलाने/उपयोगकर्ता/1000

$ ls -LD $ XDG_RUNTIME_DIR drwx ------ 2 ubuntu ubuntu 40 दिसम्बर 22 15:18/रन/उपयोगकर्ता/1000

मुझे लगता है कि XDG_RUNTIME_DIR को systemd/pam द्वारा बनाए रखा जाता है, इसलिए डॉकर्स या अन्य गैर-व्यवस्थित वातावरण में सेट नहीं किया जाएगा।

आप ~/.bashrc में कुछ इस तरह कर सकते हैं यदि आप चाहें:

निर्यात अस्थायी = "$ {XDG_RUNTIME_DIR: -/tmp}"

देखें: https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html https://www.freedesktop.org/wiki/

इसके अलावा - मुझे XDG_RUNTIME_DIR और सूडो के साथ कुछ चेतावनी दिखाई देती हैं: https://unix.stackexchange.com/questions/346841/why-does-sudo-i-not-set-xdg-runtime-dir-for-the-target-user

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