উত্তর:
তাই না? থেকে man mktemp
:
DESCRIPTION
Create a temporary file or directory, safely, and
print its name. TEMPLATE must contain at least 3
consecutive `X's in last component. If TEMPLATE is
not specified, use tmp.XXXXXXXXXX, and --tmpdir is
implied. Files are created u+rw, and directories
u+rwx, minus umask restrictions.
mktemp
একটি অনন্য ফাইলের নাম তৈরি করতে কেবল একটি এলোমেলো স্ট্রিং যুক্ত করুন। কেউ এটিকে স্বয়ংক্রিয়ভাবে সরিয়ে ফেলছে না।
যেহেতু কিছুটা আর্গুমেন্ট বলে মনে হচ্ছে তাই আসুন আরও কিছু বিশদে যাওয়া যাক। mktemp
এর ম্যান পেইজে লেখা আছে
যদি TEMPLATE নির্দিষ্ট না
--tmpdir
করা হয়, ধরে নেওয়া হয়,--tmpdir
নির্দিষ্ট না করা থাকলে,/tmp
ধরে নেওয়া হয়।
এর অর্থ হ'ল কেবল চলমান / tmp ডিরেক্টরিতেmktemp
একটি ফাইল তৈরি করবে । হ্যাঁ, কোনও প্যারামিটার ছাড়াই চলমান একটি ফাইল তৈরি করবে যা সিস্টেম-নির্ভর পদ্ধতিতে সমস্ত কিছুর পাশাপাশি সাফ হয়ে যাবে । এই ধরণের ফাইলগুলির জন্য, নীচে ক্রিসের উত্তরে বর্ণিত হিসাবে পরিবর্তনশীলটি গুরুত্বপূর্ণ হবে। অনেক বিতরণের জন্য, ডিফল্ট প্রতিটি বুট সাফ করে দেয় কারণ সেট করা আছে । বেশিরভাগ (সমস্ত না থাকলে) বিতরণগুলিতে, এটি ফাইলে সেট করা আছে :tmp.RANDOM_STRING
mktemp
/tmp
$TMPTIME
/tmp
$TMPTIME
0
/etc/default/rcS
$ grep TMPTIME /etc/default/rcS
TMPTIME=0
এখন, আপনি যদি না একটি টেমপ্লেট উল্লেখ, উদাহরণস্বরূপ mktemp fooXXX
তারপর নামক একটি ফাইল fooXXX
বর্তমান ডিরেক্টরী যেখানে তৈরি হয় XXX
তিনটি র্যান্ডম অক্ষর দ্বারা প্রতিস্থাপিত হয়। আপনি বিশেষত এটি না করা বাছাই করা না হলে এই ফাইলটি কখনও মুছে ফেলা হবে না। কেবলমাত্র "অফিসিয়াল" অস্থায়ী ডিরেক্টরিগুলির মধ্যে ফাইলগুলি যেমন /tmp
সিস্টেম দ্বারা স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়, এমন কোনও ম্যাজিক বিট নেই যা আপনি সেট করতে পারেন যা একটি অস্থায়ী ফাইল নির্দিষ্ট করে, বাইরের ফাইল /tmp
এবং এর লোকগুলি স্বয়ংক্রিয়ভাবে মোছা হয় না।
আপনার মূল প্রশ্নের উত্তর দেওয়ার জন্য অবশ্যই অদৃশ্য হয়ে যায় যে কোনও ফাইলটি অদৃশ্য হয়ে যেতে পারে তার উপর নির্ভর করে, সেই কারণেই লোকেরা টিএমপি ফাইলের উপর নির্ভর করে না, তারা অস্থায়ীভাবে ডেটা ধরে রাখতে তৈরি করা হয়েছিল এবং আমরা তখন সেগুলি ভুলে যেতে পারি। একটি অবিচ্ছিন্ন, এলোমেলোভাবে নামকরণ করা ফাইল তৈরির অনেকগুলি উপায় রয়েছে। উদাহরণ স্বরূপ:
echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
tmp
ডিরেক্টরিটি ক্লিয়ার করা হয় তা জিজ্ঞাসা করে না তবে যখন তৈরি ফাইলগুলি mktemp
মোছা হয়। যেমন আপনি দেখতে পাচ্ছেন, দু'জনের অবশ্যই সম্পর্কিত নয় :)।
দয়া করে মনে রাখবেন যে টেম্প ফাইলগুলি সিস্টেম বুটআপ চলাকালীন বা টিএমপিটাইম অনুযায়ী মুছে ফেলা হতে পারে। আপনি কি আছে দয়া করে /etc/cron.daily/tmpwatch
।
/var/tmp/
অন্যদিকে সাধারণত অনাক্রম্যতা থাকে tmpwatch
।
টেম্প ফাইলগুলি (সাধারণত) স্বল্প সময়ের জন্য তৈরি করা হয়। তাদের টেম্পের নাম রয়েছে তাই টাইমিং আক্রমণ চালানো সহজ নয় এবং সাধারণত প্রোগ্রামের প্রয়োজন হয় না তখন তারা মুছে ফেলা হয়। সাধারণত আপনার স্ক্রিপ্টটি খুব অল্প সময়ের জন্য এই ফাইলটি রাখবে, সাধারণত কিছু পাঠ্য বা অন্য ফাইলগুলি প্রক্রিয়াকরণ করে এবং এটি প্রয়োজনীয় না হওয়ার সাথে সাথে এটি সরিয়ে ফেলা হবে। যদি আপনার স্ক্রিপ্টটি ক্র্যাশ হয়ে যায় তবে আপনি / টিএমপি ফোল্ডার হাউসকিপিংয়ের পদ্ধতিগুলিও পড়ে থাকতে পারেন (যদি আপনি সেগুলি রাখার সিদ্ধান্ত নিয়ে থাকেন তবে)।
আপনাকে টেম্প ফাইল তৈরি করতে হবে না /tmp
mktemp
কোনও ডিরেক্টরিতে চালানো যেতে পারে এবং কেবল একটি স্বেচ্ছাসেবী ফাইলের নাম উত্পন্ন হয় তা দেখে, এটির সাথে যা কিছু করার আছে তা আমি দেখতে পাচ্ছি না tmpwatch
।
mktemp
ফাইল তৈরি করে /tmp/
।
টেম্প ফাইলগুলি তাদের নিজের থেকে দূরে যায় না। এগুলিকে টেম্প ফাইল বলা হয় কেবল আপনার স্ক্রিপ্ট বা সেশনে বা যেখানেই আপনি এগুলি তৈরি করছেন, আপনি যখন কাজটি সম্পন্ন করেন তখন সেগুলি মুছবেন বলে আশা করা হচ্ছে। বা এগুলি যদি আপনার জিনিস থাকে তবে তাদের চারপাশে রেখে দিন। mktemp কেবলমাত্র এমন একটি ফাইল নিয়ে আসার অনুমতি দেয় যা কিছু অনন্যরূপে নামকরণ করা হয় যাতে এটি কিছু বিদ্যমান ফাইল ওভাররাইট না করে।
TMPTIME
?
/tmp
বা অন্যান্য টিএমপি ডিরেক্টরিগুলি মুছে ফেলুন । এটি কেবল এলোমেলোভাবে ব্যবহারকারী দ্বারা নির্মিত ফাইলগুলি মুছবে না।
mktemp
ফাইল তৈরি করে /tmp/
।