দেব হিসাবে আমার মধ্যবর্তী ফাইলগুলির জন্য আমি কোন ফোল্ডারে লিখব?


17

আমি আমার প্রকল্পের জন্য কয়েকটি ব্যাশ স্ক্রিপ্ট লিখতে শুরু করছি এবং তাদের কিছু মধ্যবর্তী ফাইল বা ভেরিয়েবলগুলি লেখার প্রয়োজন রয়েছে।

আমি জানতে চাই যে যখন কেউ আমার স্ক্রিপ্টটি চালায় তখন আমি কোন ফোল্ডারে অ্যাক্সেস পাওয়ার বিষয়ে নিশ্চিত থাকতে পারি? এটি কি সাধারণ ব্যবহার /tmp/? নাকি আমার অন্য কিছু ব্যবহার করা উচিত?

উত্তর:


21

এই জিনিসগুলির সন্ধানের জন্য আমি ফাইল সিস্টেম হায়ারার্কি স্ট্যান্ডার্ড নথিটি অমূল্য বলে মনে করি।

কয়েকটি অপশন আছে,

  • / tmp - 'অস্থায়ী' অস্থায়ী ফাইল
  • / var / tmp - 'স্থায়ী' অস্থায়ী ফাইল
  • / var / cache - 'অ্যাপ্লিকেশন' ক্ষণস্থায়ী ডেটা ফাইল

এটি যে ধরণের ডেটা আপনি সংরক্ষণ করছেন তার উপর এটি নির্ভর করে।


ব্যবহারকারী / পরিবেশ আপনাকে যা দেয় তা আরও ভালভাবে ব্যবহার করুন এবং ফলব্যাক হিসাবে কেবলমাত্র / টিএমপি ইত্যাদি ব্যবহার করুন। ( unix.stackexchange.com/a/79776/7784 কী বলেছেন)
ওলুফ

15

আপনার যদি কিছু অস্থায়ী ফাইল লিখতে হয় যা কেবলমাত্র আপনার স্ক্রিপ্ট বা অ্যাপ্লিকেশন চলমান অবধি স্থায়ী হয়, TMPDIRপরিবেশের ভেরিয়েবল দ্বারা নির্দেশিত ডিরেক্টরিটি ব্যবহার করুন বা যদি সেই পরিবর্তনশীলটি সংজ্ঞায়িত না করা হয় /tmp,।

/tmpকিছু সিস্টেমে বুট করার সময় ক্লিয়ার করা হয় (কখনও কখনও এটি র‍্যামেও থাকে, যেমন সোলারিসে ডিফল্টরূপে এবং কিছু লিনাক্স ইনস্টলেশন), সুতরাং এটি কোনও ফাইলের জন্য ব্যবহার করা যাবে না যা একটি বিদ্যুৎ ব্যর্থতা বা পুনরায় বুট থেকে বেঁচে থাকতে হবে। /var/tmpএকটি রিবুট বেঁচে থাকতে হবে এমন ফাইলগুলির জন্য ব্যবহার করা যেতে পারে তবে এটি সময়ে সময়ে সিস্টেম প্রশাসক দ্বারা পরিষ্কার করা যেতে পারে by যদি আপনার অ্যাপ্লিকেশনটির স্থায়ী ভিত্তিতে ফাইলগুলি সংরক্ষণ করা দরকার হয় তবে সেগুলি ব্যবহারকারীর হোম ডিরেক্টরিতে ( ~/.programmingnoobsappঅথবা ~/.cache/programmingnoobsapp) বা এর অধীনে /var/lib/programmingnoobsappবা কোথাও লিখুন /var/cache/programmingnoobsapp

নোটটি /tmpযা সমস্ত ব্যবহারকারীর মধ্যে ভাগ করা আছে, তাই সেখানে কোনও ফাইল তৈরি করার সময় আপনার সতর্কতা অবলম্বন করা উচিত। আপনাকে এমন একটি ফাইলের নাম বাছাই করতে হবে যা এখনও বিদ্যমান নেই এবং আপনাকে এমন একটি রেসের শর্তটি না দেওয়ার জন্য সতর্কতা অবলম্বন করা উচিত যেখানে অন্য প্রক্রিয়াটি বিভিন্ন অনুমতি নিয়ে আপনার আগে ফাইল তৈরি করে, যা একটি সুরক্ষা গর্ত হতে পারে (যদি অন্য প্রক্রিয়া হয়) অন্য ব্যবহারকারী হিসাবে চলছে, এটি তখন আপনার প্রক্রিয়াটির ডেটা অ্যাক্সেস এবং সংশোধন করতে পারে)। বা mktempএকটি ফাইল তৈরি করতে কমান্ডটি ব্যবহার করুন । ডিফল্টরূপে, একটি ফাইল তৈরি করে , বা যদি সেট না করা থাকে, যা সাধারণত সঠিক জায়গা। আপনার যদি একাধিক অস্থায়ী ফাইলগুলি ব্যবহার করতে হয় বা আপনার যদি একটি একক প্রয়োজন হয় তবে আমি আপনার সমস্ত অস্থায়ী ফাইলগুলির জন্য একটি ডিরেক্টরি তৈরি করার পরামর্শ দিচ্ছি/tmp/var/tmpmktemp$TMPDIR/tmpTMPDIRmktemp -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ফাইলসিস্টেম তোলে সঞ্চয়স্থান হিসাবে একটি সিস্টেম RAM এর ব্যবহার, তাই এটি বুট থেকে বুট করার জন্য স্থায়ী নয়।

স্ট্যাকওভারফ্লোতে এখানে উল্লিখিত সমস্ত পছন্দগুলির একটি ভাল ওভারভিউ রয়েছে পাশাপাশি এই প্রশ্নোত্তর শিরোনাম: / টিএমপি বনাম / ডিভ / সিএম লিনাক্সে টেম্প ফাইল স্টোরেজ জন্য? । এটি এই সুপার ব্যবহারকারীর প্রশ্নোত্তর শিরোনামে ভালভাবে আচ্ছাদিত হয়েছে: কখন আমি / দেব / শ্মে / ব্যবহার করব এবং কখন / টিএমপি ব্যবহার করব?

তথ্যসূত্র


0

হ্যাঁ, /tmpবেশিরভাগ ফাইলগুলির জন্য যা অস্থায়ীভাবে প্রয়োজনীয়। / টিএমপি-তে স্টিকি বিট থাকে যার অর্থ কেবলমাত্র আইটেমটির মালিক, ডিরেক্টরির মালিক, বা সুপারভাইজার ফাইলের নাম পরিবর্তন বা মুছতে পারে। অনেক প্রোগ্রাম লক ফাইলগুলি তৈরি করতে এবং ডেটার অস্থায়ী সঞ্চয় করার জন্য এটি ব্যবহার করে। কিছু বিতরণে এই ডিরেক্টরিটি বুটআপ বা শাটডাউন থেকে সাফ হয়ে যায়।


1
সমস্ত / tmp ডিরেক্টরি বুট-এ সাফ করা হয় না। উদাহরণস্বরূপ, ডিফল্ট এআইএক্স ইনস্টলেশনগুলি (এবং এটি ইউনিক্স এবং লিনাক্স, কেবল লিনাক্স নয়)।
এইটবিটটনি

তবে, যদি এটি "মেমরি" বাসিন্দা হয়, যা অনেক ক্ষেত্রেই ডিফল্ট বলে মনে হয়, কোনও কারণে সিস্টেম বন্ধ হয়ে গেলে এটি অদৃশ্য হয়ে যায়।
এমডিপিসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.