एक फ़ोल्डर के रूप में मुझे अपनी मध्यवर्ती फ़ाइलों के लिए कौन सा फ़ोल्डर लिखना चाहिए?


17

मैं अपने प्रोजेक्ट के लिए कुछ बैश स्क्रिप्ट लिखना शुरू कर रहा हूं और उन्हें लिखे जाने के लिए कुछ इंटरमीडिएट फाइल या चर की जरूरत है।

मैं जानना चाहता हूं कि जब कोई मेरी स्क्रिप्ट चलाता है तो मुझे किन फ़ोल्डरों तक पहुंच सुनिश्चित हो सकती है? क्या इसका उपयोग करना एक आम बात है /tmp/? या मुझे कुछ और इस्तेमाल करना चाहिए था?

जवाबों:


21

इस सामान की तलाश में मुझे फाइलसिस्टम पदानुक्रम मानक दस्तावेज़ अमूल्य लगता है ।

कुछ विकल्प हैं,

  • / tmp - 'गैर-स्थायी' अस्थायी फ़ाइलें
  • / var / tmp - 'स्थायी' अस्थायी फ़ाइलें
  • / var / cache - 'एप्लिकेशन' क्षणिक डेटा फ़ाइलें

यह वास्तव में आपके द्वारा संग्रहीत किए जा रहे डेटा के प्रकार पर निर्भर करता है।


बेहतर उपयोग जो उपयोगकर्ता / पर्यावरण आपको देता है और केवल कमबैक के रूप में / tmp आदि का उपयोग करता है। (क्या unix.stackexchange.com/a/79776/7784 ने कहा)
Oluf Lorenzen

15

यदि आपको कुछ अस्थायी फ़ाइलों को लिखने की ज़रूरत है जो केवल आपकी स्क्रिप्ट या एप्लिकेशन चल रही हैं, तो TMPDIRपर्यावरण चर द्वारा इंगित निर्देशिका का उपयोग करें , या यदि वह चर परिभाषित नहीं है, तो /tmp

/tmpकुछ सिस्टम पर बूट समय पर साफ किया जाता है (कभी-कभी यह रैम में भी होता है, जैसे कि सोलारिस पर डिफ़ॉल्ट रूप से, और कुछ लिनक्स इंस्टॉलेशन पर), इसलिए इसका उपयोग उन फ़ाइलों के लिए नहीं किया जा सकता है, जिन्हें बिजली की विफलता या रिबूट से बचना चाहिए। /var/tmpउन फ़ाइलों के लिए उपयोग किया जा सकता है, जिन्हें रिबूट से बचना चाहिए, लेकिन समय-समय पर सिस्टम व्यवस्थापक द्वारा साफ किया जा सकता है। आपके आवेदन की जरूरत है एक स्थायी आधार पर फ़ाइलें सहेजने के लिए, उन्हें कहीं उपयोगकर्ता के घर निर्देशिका में (में लिखने ~/.programmingnoobsappया ~/.cache/programmingnoobsapp) या के तहत /var/lib/programmingnoobsappया /var/cache/programmingnoobsapp

ध्यान दें कि /tmpसभी उपयोगकर्ताओं के बीच साझा किया जाता है, इसलिए आपको एक फ़ाइल बनाते समय सावधानी बरतने की आवश्यकता है। आपको एक फ़ाइल नाम चुनने की आवश्यकता है जो अभी तक मौजूद नहीं है, और आपको एक दौड़ की स्थिति की अनुमति नहीं देने के लिए सावधान रहने की आवश्यकता है जहां एक और प्रक्रिया आपके लिए अलग-अलग अनुमतियों के साथ फाइल बनाती है, जो एक सुरक्षा छेद हो सकती है (यदि दूसरी प्रक्रिया है) एक अलग उपयोगकर्ता के रूप में चल रहा है, यह तब आपकी प्रक्रिया के डेटा तक पहुंच और संशोधित कर सकता है)। mktempमें /tmpया फ़ाइल बनाने के लिए कमांड का उपयोग करें /var/tmp। डिफ़ॉल्ट रूप से, mktempएक फ़ाइल बनाता है $TMPDIR, या /tmpयदि TMPDIRकोई परेशान है, जो आमतौर पर सही जगह है। यदि आपको कई अस्थायी फ़ाइलों का उपयोग करने की आवश्यकता है, या यहां तक ​​कि अगर आपको किसी एक की आवश्यकता है, तो मैं आपकी सभी अस्थायी फ़ाइलों के लिए एक निर्देशिका बनाने की सलाह देता हूंmktemp -d और इसे अपनी स्क्रिप्ट के अंत में हटा दें।

#!/bin/sh
tmp_root=
trap 'rm -rf "$tmp_root"' EXIT INT TERM HUP
tmp_root=$(mktemp -d)
tmpfile1=$tmp_root/file1
tmpfile2=$tmp_root/file2
…

मैं अपनी स्क्रिप्ट के अंत में अस्थायी फ़ाइलों को नहीं हटाता। मेरे पास टैम्पवाच क्रॉन जॉब है जो पुरानी फाइलों को अपने आप हटा देता है। अधिकांश मामलों में, मैं मध्यवर्ती फ़ाइल नहीं पढ़ता हूं और सिस्टम फ़ाइलों को अपने आप हटा देगा। हालांकि, अगर स्क्रिप्ट में कुछ गलत होता है, तो मेरे पास आसान डिबगिंग के लिए मेरी सभी मध्यवर्ती फाइलें हैं।
एमोरी

1
के लिए +1 mktemp। मेरे लिए यह सही उत्तर है: सुरक्षित रूप से एक अस्थायी फ़ाइल बनाने का कार्य सौंपें mktemp( इस लेख को देखें )। यद्यपि एक उत्तर के उद्धरण FHSका बहुत मूल्य है।
कार्लोस कैंपडरो

tmp_rootइसे निर्दिष्ट करने से पहले आप इसे आरंभ क्यों करते हैं ? क्या यह अधिक स्वाभाविक नहीं होगा unset?
l0b0

@ l0b0 या तो काम करेगा (अंडर को छोड़कर set -u, लेकिन यह असामान्य है)। जाल सेट करने से पहले इसे (अन) सुरक्षित मान पर सेट करने की आवश्यकता होती है, यदि जाल को सेट करने के बाद स्क्रिप्ट को मार दिया जाता है।
गिल्स एसओ- बुराई को रोकें '

मुझे लगता set -o errexitहै कि अगर tmp_rootपहले से ही पर्यावरण में केवल पढ़ने के लिए यह गलत निर्देशिका को नष्ट नहीं करेगा सेट है ...
l0b0

2

बस उन उत्तरों को पूरक करने के लिए जो पहले से ही इस प्रकार अब तक पोस्ट किए गए हैं।

/dev/shmकुछ लिनक्स वितरण पर भी है जो अस्थायी भंडारण के लिए उपयोग किया जा सकता है। इस भंडारण का उपयोग केवल तब किया जाना चाहिए जब फ़ाइल I / O का प्रदर्शन एक महत्वपूर्ण कारक /dev/shmहोता है जो tmpfsफ़ाइल सिस्टम का उपयोग करता है । इसके अलावा इसका उपयोग यथोचित फ़ाइलों और डेटा के लिए किया जाना चाहिए। tmpfsफाइल सिस्टम बनाता है भंडारण के रूप में एक प्रणाली रैम उपयोग करती हैं इसलिए बूट से बूट करने के लिए एक समान नहीं होती।

StackOverflow पर यहाँ वर्णित सभी विकल्पों का एक अच्छा अवलोकन है साथ ही इस Q & A शीर्षक में: / tmp बनाम / dev / shm लिनक्स पर टेम्प फ़ाइल फ़ाइल भंडारण के लिए? । यह इस सुपरयूजर क्यू एंड ए शीर्षक में अच्छी तरह से कवर किया गया है: मुझे कब उपयोग करना चाहिए / dev / shm / और मुझे कब / tmp का उपयोग करना चाहिए?

संदर्भ


0

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


1
सभी / tmp निर्देशिका बूट पर साफ़ नहीं की जाती हैं। उदाहरण के लिए, डिफ़ॉल्ट AIX इंस्टॉलेशन (और यह UNIX और Linux है, न कि केवल Linux)।
आठबेटटोनी

हालांकि, अगर यह "मेमोरी" निवासी है, जो बहुत सारे मामलों में डिफ़ॉल्ट लगता है, तो यह गायब हो जाता है जब सिस्टम किसी भी कारण से बंद हो जाता है।
mdpc
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.