লিনাক্সে নিরাপদে tmp ফোল্ডার কীভাবে পরিষ্কার করবেন


15

আমি আমার tmpfs / tmp, 2 গিগাবাইটের জন্য সঠিক ব্যবহার করতে র্যাম ব্যবহার করি। সাধারণত এটি যথেষ্ট তবে কখনও কখনও প্রক্রিয়াগুলি সেখানে ফাইল তৈরি করে এবং নিজের পরে পরিষ্কার করতে ব্যর্থ হয়। তারা ক্রাশ হলে এটি ঘটতে পারে। আমার এই অনাথ টিএমপি ফাইলগুলি মুছতে হবে অথবা অন্যথায় ভবিষ্যতের প্রক্রিয়াটি / tmp এ স্থানের বাইরে চলে যাবে।

আমি কীভাবে নিরাপদে আবর্জনা সংগ্রহ / tmp করতে পারি? কিছু লোক সর্বশেষ সংশোধন টাইমস্ট্যাম্প পরীক্ষা করে এটি করে তবে এই পদ্ধতিটি অনিরাপদ কারণ দীর্ঘস্থায়ী প্রক্রিয়া থাকতে পারে যেগুলি এখনও এই ফাইলগুলির প্রয়োজন need একটি নিরাপদ পদ্ধতির হ'ল শেষ পরিবর্তনের টাইমস্ট্যাম্প শর্তটি এই শর্তের সাথে একত্রিত করা যে কোনও প্রক্রিয়াতে ফাইলের জন্য কোনও ফাইল হ্যান্ডেল নেই। এমন কোনও প্রোগ্রাম / স্ক্রিপ্ট / ইত্যাদি রয়েছে যা এই পদ্ধতির প্রতিরূপ দেয় বা অন্য কোনও পদ্ধতিও নিরাপদ?

ঘটনাক্রমে, লিনাক্স / ইউনিক্স কি এমন কোনও ফাইল তৈরির অনুমতি দেয় যেখানে তৈরি হওয়া প্রক্রিয়াটি ক্রাশের পরেও শেষ হয়ে গেলে তৈরি ফাইল মুছে ফেলা হয়?


আপনি / tmp এর পরিবর্তে tmpfs ব্যবহার করতে পারেন কিনা তা পরীক্ষা করুন: kernel.org/doc/Docamentation/files systemms
ott--

উত্তর:


15

আপনি এর মতো কিছু চেষ্টা করতে চাইতে পারেন:

find /tmp -mtime +7 -and -not -exec fuser -s {} ';' -and -exec echo {} ';'

অনুসন্ধান নির্দিষ্ট মানদণ্ডের সাথে মেলে এমন ফাইলগুলি খুঁজতে ব্যবহৃত হয়।

  • -mtime +7 কেবল days দিনের চেয়ে পুরানো ফাইলগুলি নির্বাচন করুন (আপনি অন্য কোনও মান ব্যবহার করতে পারেন)
  • -exec fuser -s {} ';'পুরানো মানদণ্ডের সাথে মেলে এমন প্রতিটি ফাইলের জন্য নিরব মোডে ফুসারকে কল করে। এখনই অ্যাক্সেস করা প্রতিটি ফাইলের জন্য ফুজার 0 (= সত্য) এবং অ্যাক্সেস করা ফাইলগুলির জন্য 1 (= মিথ্যা) ফেরত দেয়। যেহেতু আমরা কেবল অ-অ্যাক্সেসযুক্তগুলিতে আগ্রহী, আমরা এটির -notসামনে রেখেছি-exec
  • -exec echo {} ';'মানদণ্ডের সাথে মেলে সমস্ত ফাইলের নাম মুদ্রণ করে। -exec rm {} ';'পরিবর্তে আপনি এখানে ব্যবহার করতে পারেন , তবে এটি কিছু ব্যবহার-করা ফাইল মুছে ফেলতে পারে বলে আমি মনে করি এটি প্রথমে একটি সহজ প্রতিধ্বনি করা নিরাপদ do
  • সম্পাদনা: আপনি ভালো কিছু জুড়তে চাইতে পারেন -name 'foo*.bar'বা -uid 123আপতিক প্রভাব এড়াতে নির্দিষ্ট ফাইল নিদর্শন অথবা ব্যবহারকারীর ID- র জন্য পরিষ্করণ প্রভাব সীমিত করতে।

শেষ মুহুর্তে: বিবেচনা করুন যে এখানে এমন ফাইল থাকতে পারে যা কেবল একবার লেখা হয় (উদাহরণস্বরূপ সিস্টেম বুটে) তবে প্রায়শই পড়ুন (যেমন কোনও এক্স-সেশন-কুকি)। অতএব আমি কেবলমাত্র আপনার ত্রুটিযুক্ত প্রোগ্রামগুলির দ্বারা তৈরি ফাইলগুলিকে প্রভাবিত করতে কিছু নাম চেক যুক্ত করার পরামর্শ দিচ্ছি।

সম্পাদনা 2: আপনার শেষ প্রশ্নের জন্য: কোনও প্রক্রিয়াটিতে খোলা হ্যান্ডেল না হওয়া পর্যন্ত কোনও ফাইল ডিস্ক থেকে মুছে ফেলা হবে না (অন্তত নেটিভ লিনাক্স ফাইল সিস্টেমের জন্য)। সমস্যাটি হ'ল ডিরেক্টরি এন্ট্রি তত্ক্ষণাত অপসারণ করা হয় যার অর্থ আপনি ফাইলটি সরিয়ে দেওয়ার সময় থেকে কোনও নতুন প্রক্রিয়া ফাইল আর খুলতে পারে না (কারণ এতে কোনও ফাইলের নাম সংযুক্ত নেই)।

বিশদগুলির জন্য দেখুন: /programming/

edit3: তবে আমি যদি পুরো প্রক্রিয়াটি স্বয়ংক্রিয় করতে চাই?

আমি যেমন বলেছি, এমন ফাইল থাকতে পারে যা একবার লেখা থাকে এবং তারপরে একবারে একবারে পড়ুন (যেমন এক্স সেশন কুকিজ, পিআইডি ফাইল ইত্যাদি)। এগুলি এই সামান্য অপসারণ স্ক্রিপ্ট দ্বারা বাদ দেওয়া হবে না (এটি কারণ যা আপনি সম্ভবত echoফাইলগুলি মুছে ফেলার আগে প্রথম পরীক্ষা চালাতে চান )।

নিরাপদ সমাধান কার্যকর করার একটি উপায় ব্যবহার করা atime
atimeপ্রতিটি ফাইল শেষবার অ্যাক্সেসের সময় সঞ্চয় করে। তবে সেই ফাইল সিস্টেম বিকল্পটি প্রায়শই অক্ষম করা হয় কারণ এর বেশ কিছু কার্যকারিতা প্রভাব রয়েছে ( 20-30% অঞ্চলে এই ব্লগ অনুসারে )) রয়েছে relatime, তবে mtimeএটি পরিবর্তিত হয়ে থাকলে কেবল অ্যাক্সেসের সময়টি লেখেন , সুতরাং এটি আমাদের সহায়তা করবে না।

আপনি যদি ব্যবহার করতে চান তবে atimeআমি /tmpএকটি পৃথক পার্টিশন (আদর্শভাবে একটি র‌্যামডিস্ক) রাখার পরামর্শ দেব যাতে পুরো সিস্টেমে পারফরম্যান্স প্রভাব খুব বেশি না হয়।

একবার atimeসক্ষম হয়ে গেলে , আপনাকে যা করতে হবে তা হ'ল -mtimeউপরের কমান্ড লাইনের সাথে প্যারামিটারটি প্রতিস্থাপন করতে হবে -atime
আপনি সম্ভবত এটিকে সরাতে সক্ষম হবেন -not -exec fuser -s {} ';'তবে এটি নিশ্চিত হওয়ার জন্য আমি এটি সেখানে রেখেছি (যদি অ্যাপ্লিকেশনগুলি ফাইলগুলি দীর্ঘ সময়ের জন্য উন্মুক্ত রাখে)।

তবে echoআপনার সিস্টেমটি এখনও প্রয়োজনীয় জিনিসগুলি অপসারণের আগে কমান্ডটি পরীক্ষা করে মনে রাখবেন !


সুন্দর। দীর্ঘ সময় ধরে চলমান প্রক্রিয়া দ্বারা ফাইলগুলি আপডেট করা হয় না সেগুলি সম্পর্কে কী বলা যায়? যদি সেগুলি কনটেক্সট ফাইল হয় তবে আপনি প্রাসঙ্গিক প্রসঙ্গটি শিথিল করতে পারেন (স্বীকার করুন, এটি খুব স্মার্ট প্রক্রিয়া নয়; তবে 'ল্যাটারাল' /tmp/ক্লিনআপের প্রত্যাশিত পার্শ্ব-প্রতিক্রিয়াগুলি জানতে হবে )।
নিক

এই পদ্ধতির সমস্যাটি (যেমন আমি শেষ অনুচ্ছেদে নির্দেশ করছিলাম)। এখানে সর্বোত্তম পন্থা হ'ল uID / gid বা ফাইল প্যাটার্ন চেক যুক্ত করা (সেই অনুযায়ী উত্তর সম্পাদনা করা)
মরিথুব

এটি কি ক্রোন স্ক্রিপ্টে রাখা উচিত ...?
সিএমসিডিগ্রাগনকাই

@CMCDragonkai অবশ্যই আপনি এটি crontab এ রাখতে পারেন। তবে আমি যেমন উল্লেখ করেছি সেখানে এমন ফাইল থাকতে পারে যা অ্যাক্সেস করা থাকে তবে লিখিত হয় না এবং তাই এই ছোট স্ক্রিপ্টের মাধ্যমে ফিল্টার নাও হতে পারে। এজন্য প্রথমে আক্রান্ত ফাইলগুলির তালিকা মুদ্রণ করা নিরাপদ এবং তারপরে সেগুলি মুছতে হবে কিনা তা নিজেই স্থির করুন। যদি আপনার /tmpআলাদা পার্টিশনে থাকে (যেমন একটি র‌্যামডিস্ক), আপনি atimeএটির জন্য সক্ষম করতে পারেন এবং এর -atimeপ্যারামিটারটি ব্যবহার করতে পারেন find
মরিথুব

আমি একটি সার্ভারে এটি করার পরিকল্পনা করছি। অতএব আমি সমস্ত সময় tmp- এ সমস্ত ফাইল গণনা করতে পারি না। কোন সমস্যা আছে? এছাড়াও আমি ভেবেছিলাম আমাদের কী সময় সম্পর্কিত নয় বরং রিলেটাইম ব্যবহার করা উচিত?
সিএমসিডিগ্রাগনকাই

4

নিজের রোল করবেন না।

ডেবিয়ান / উবুন্টুতে টেম্প্রাইপার রয়েছে, এটি সম্ভবত অন্যান্য ডিসটেও পাওয়া যায়।

# tmpreaper - cleans up files in directories based on their age

sudo apt-get install tmpreaper

cat /etc/tmpreaper.conf 

ইন /etc/tmpreaper.confফাইল, আমি যদি উভয় সেট /tmpএবং /var/tmpপরিষ্করণ ডিরেক্টরি যেমন, দীর্ঘ তোমার জন্য সুপারিশ করতে পারি না TMPREAPER_TIMEপ্যারামিটার বা tmp, ফাইলের সর্বোচ্চ আগে অপসারণ করা হবে? আমি শুনেছি /var/tmpফাইলের চেয়ে /tmpফাইলে দীর্ঘ বয়স রাখা ভাল । তবে যদি সেগুলি কেবল একই সর্বোচ্চ বয়সের সাথে সেট আপ করা যায় তবে আমার কোনও ক্লু নেই।
জিয়াওডং কিউই

2

আপনার প্রশ্নের শেষ অংশটি সম্পর্কে:

যদিও আমি মনে করি না যে 'মুছুন-এই-যদি-আমি-ডাই' ওপেন / ক্রিয়েশন মোড বিদ্যমান, তবে কোনও প্রক্রিয়া কোনও ফাইল তৈরির পরে নিরাপদে মুছতে পারে, যতক্ষণ না এটি ফাইলটি খোলার জন্য বলে থাকে। তারপরে কার্নেলটি ফাইলটি ডিস্কে রাখবে এবং ফাইলটি খোলার শেষ প্রক্রিয়াটি যত তাড়াতাড়ি বেরিয়ে আসবে (ক্র্যাশ করে বা সাধারণভাবে তা হয়ে যাবে), ফাইলটির দ্বারা দখল করা স্থানটি মুক্ত হয়ে যাবে।

এই সমস্যাটি সম্পর্কে সাধারণভাবে যে কোনও কোনও প্রক্রিয়া কখনও কখনও / টিএমপি পরিষ্কার করে না, আমি বর্ণিত মাউন্ট নেমস্পেসগুলি একবার দেখে পরামর্শ দেব, উদাহরণস্বরূপ এখানে বা এখানে । যদি প্রশ্নে থাকা প্রক্রিয়াটি কোনও সিস্টেম ডিমন, সিস্টেমড এবং ব্যক্তিগত / টিএমপি ফাইল সিস্টেমগুলির মঞ্জুরি দেওয়ার জন্য এর স্থানীয় বৈশিষ্ট্যটি আগ্রহী হতে পারে।



0

এর চেয়ে পুরানো ফাইলগুলির একটি তালিকা পান, সেই তালিকা থেকে যে কোনও কিছুই খোলা আছে এমন ফাইলগুলি বাদ দিন:

find /tmp -mtime +7 |\
    egrep -v "`lsof -n +D /tmp | awk 'NR>1 {print $9}'| tr \\n \|`" 

lsof -n +D /tmp: / টিএমপি-তে খোলা ফাইলগুলির সন্ধান
awk 'NR>1 {print $9}'করুন
tr \\n \|: হেডারগুলি বাদ দিয়ে কেবলমাত্র lsof আউটপুটের নবম কলামটি প্রিন্ট করুন : বার দ্বারা নতুন-লাইন প্রতিস্থাপন করুন (বা উদাহরণস্বরূপ)
egrep -v "foo|moo|bar": মুদ্রণ লাইনগুলিতে ফু বা মু বা বার নেই


0

আমি উপরের সাথে একমত হয়েছি, যদিও এটি যুক্ত করার জন্য - আমি সর্বদা চালিত করি lsof +L1 | grep tmpএবং হয় হয় "মুছে ফেলা" টিএমপি ফাইলগুলিতে থাকা প্রক্রিয়াগুলি মেরে ফেলি বা পুনরায় চালু করি: উদাহরণ-

# lsof +L1 | grep tmp
xfce4-ter  1699  user   32u   REG    8,6      192     0 818552 /tmp/vte966VLX (deleted)
chrome     3301  user  138u   REG    8,6    16400     0 818547 /tmp/etilqs_Z0guKD7p6ork9iG (deleted)

2
এসইউ এলোমেলোভাবে পোস্টগুলির ব্যবস্থা করে - সুতরাং উপরে বা নীচে কোনও নেই। আপনি কোন পোস্টের কথা উল্লেখ করছেন?
যাত্রামন গীক

0

আপনি কেবল করতে পারেন rm -rf /tmp/*এবং আশা করেন যে কিছুই ভঙ্গ হবে না ...


1
কিছু করার পরামর্শ "এবং আশা করি কিছুতেই ভাঙ্গেনি" আসলেই ওপি'র উত্তর দেয় না "এটি করার নিরাপদ উপায় রয়েছে
Perhaps

@ বারতিয়েব ভাল পয়েন্ট আমার ধারণা এটি নিরাপদ যদি এটি মূল হিসাবে চালিত না হয় তবে ...
সলোমন উকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.