একটি পাঠ্য ফাইলের সামগ্রী খালি করা


16

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


5
বিকল্প: tail -n +1000 file.txt > file.txt1000 টি লাইন মুছে ফেলা উচিত এবং ফাইলে সর্বাধিক নতুন রেখাগুলি রাখা উচিত (কখনই কোনও কিছু ট্র্যাক করার জন্য আপনার সাম্প্রতিক রেকর্ডের প্রয়োজন হতে পারে কখনই জানেন না)।
রিঞ্জউইন্ড

2
নির্ধারিত সময়ে ফাইল সাফ করার চেয়ে এটি আসলে একটি ভাল বিকল্প।
ব্রুনো পেরেইরা

1
@ রিঞ্জুইন্ড, এটি কাজ করবে না যেহেতু লেজটি পড়ার চেষ্টা করার আগে ফাইলটি কেটে ফেলা হবে। আপনাকে একটি নতুন ফাইলে পুনর্নির্দেশ করতে হবে এবং তারপরে মূলটি নতুন ফাইলের সাথে প্রতিস্থাপন করতে হবে।
psusi

সত্য @psusi :) সেখানে একটি অতিরিক্ত পুনর্নির্দেশের প্রয়োজন।
রিঞ্জউইন্ড

উত্তর:


28

সহজ উপায়:

> filename

এটি একটি স্বল্প স্পষ্ট উপায় এবং অন্যের দ্বারা শেল স্ক্রিপ্টে সম্ভবত কম পঠনযোগ্য তবে এটি আপনার প্রয়োজন।

কারণ >প্রকৃতপক্ষে সত্যিকার অর্ডার নয় (এটি ব্যাশ বিল্টিন) আপনি ব্যবহার করতে পারবেন না:

sudo > filename

যখন আপনার কাছে সেই ফাইলটিতে অনুমতি নেই। তবে আপনি ব্যবহার করতে পারেন:

sudo bash -c "> filename"

কী ধরণের অনুমতিগুলি পরিবর্তন করা দরকার কারণ এটি বলেছে যে অনুমতি অস্বীকার করা হয়েছে, আমি ইতিমধ্যে ফাইলটিতে chmod 755 করেছি, বা আমার এটি নতুন পোস্ট করা উচিত (আমি অনুমতিগুলির প্রশ্নটি বোঝাতে চাইছি)
সসিটি

@ সিকিটি আমার নতুন সম্পাদনা দেখুন।
রাদু রেডানু

1
@ সসিটি অবশ্যই আপনি পারবেন তবে sudo crontab -eমূলের জন্য ক্রোন জব যুক্ত করতে ব্যবহার করুন, আপনার জন্য নয়। অথবা 766 (অথবা 666) ফাইল অনুমতি 755 পরিবর্তন না: sudo chmod 766 filename। আরো সম্পর্কে: codex.wordpress.org/Changing_File_Permissions
Radu Rădeanu

1
truncate filenameখালি আউটপুটটিকে ফাইলে ডাইরেক্ট করার চেয়ে একটু ক্লিনার এবং সহজ এবং সমস্যাগুলির মধ্যে পড়ে না sudo
psusi

1
@ স্প্যাসি truncate -s 0 filenameআসলে কৌশলটি তৈরি করতে পারে। আপনি এটি উত্তর হিসাবে যুক্ত করতে পারেন।
রাদু রেডানু

19

সে উদ্দেশ্যে একটি সরঞ্জাম তৈরি করা হয়েছে:

truncate -s 0 filename

এটি সামগ্রীগুলি সাফ করবে তবে এটি এখনও একই ফাইল হবে ( ইনোড একই থাকবে)।

এটি গুরুত্বপূর্ণ কারণ কিছু প্রোগ্রাম "আইনের মাধ্যমে বাই" ফাইলটিতে একটি হ্যান্ডেল ধরে থাকে। ধরুন আপনি ফাইলটি মুছে ফেলার এবং পুনরুদ্ধারের সরল পদ্ধতি ব্যবহার করে একটি ফাইল "খালি" করছেন। কিছু প্রোগ্রাম এখনও পুরানো ফাইলের (একটি পুরানো সামগ্রী সহ) একটি হ্যান্ডেল ধরে রাখতে পারে এমনকি যদি এটি স্বাভাবিক সময়ের মতো আর দৃশ্যমান না হয় ls

এই উত্তর শেষে আরও বিশদ কিছু লিঙ্ক।


অন্য উপায়, সম্ভবত মনে রাখা সহজ:

echo -n > filename

এটি একই ইনোড রাখে।

নোট করুন truncateএবং উভয়ই পসিক্সecho -n দ্বারা সংজ্ঞায়িত করা হয়নি ।

পসিক্স সম্মতি ব্যবহারের জন্য cat /dev/null:

cat /dev/null > filename

তবুও অন্য উপায়, আরও অস্পষ্ট এবং সম্ভবত অজ্ঞাব্য শেল নয়:

> filename

যদি কাটা ফাইলটি লেখার জন্য রুট সুবিধাগুলির প্রয়োজন হয় তবে নিম্নলিখিত রেখাগুলি সম্ভবত প্রত্যাশার মতো কাজ করবে না:

sudo echo -n > filename
sudo cat /dev/null > filename
sudo > filename

এটি কারণ সুডো কার্যকর হওয়ার আগেই শেল দ্বারা পুনর্নির্দেশটি করা হয়। এর অর্থ এই যে ফাইলটিতে রাইটিং অ্যাক্সেসটি শেলটি চালানো ব্যবহারকারীর সুবিধাগুলি ব্যবহার করে সম্পন্ন হয়েছে, sudo দ্বারা প্রদত্ত সুবিধাগুলি নয়।

একটি workaround হ'ল sudo সুবিধাগুলি ব্যবহার করে মৃত্যুদন্ড কার্যকর করা শেলের পুনর্নির্দেশকে পিছনে দেওয়া:

sudo sh -c "echo -n > filename"

ব্যবহার truncateআপনি এই ধরনের একটি ওয়ার্কঅ্যারাউন্ড প্রয়োজন হবে না কারণ লেখার অ্যাক্সেস শেল দ্বারা সম্পন্ন না হয় কিন্তু দ্বারা truncateযা উবুন্টু বিশেষাধিকার ব্যবহার উবুন্টু দ্বারা সঞ্চালিত হয়।

sudo truncate -s 0 filename

ফাইলটি মুছে ফেলা হলেও এমনকি ফাইলটি ধরে রাখা প্রোগ্রামগুলি সম্পর্কে কিছু বিশ্রী বিবরণের জন্য আপনি নিম্নলিখিতটি পড়তে পারেন:


এতে বলা হয়েছে অনুমতি অস্বীকার করেছে, chmod 755 ফাইলের নাম ব্যবহার করেছে কিন্তু তবুও অনুমতিটি অস্বীকার করা হয়েছে
sosytee

2
সম্ভবত আপনি ব্যাশটিতে নোক্লোবার সক্ষম করেছেন?
লেসমানা

এখন পর্যন্ত সবচেয়ে সম্পূর্ণ উত্তর
আব্দেলহাদি

4

এটি স্বয়ংক্রিয় করতে আপনি লোগ্রোটেট ব্যবহার করতে পারেন। আপনি যে ফাইলটি খালি করতে চান তার জন্য কেবল একটি কনফিগারেশন ফাইল তৈরি করুন, অন্যান্য সেটিংস যুক্ত করুন এবং আপনার প্রতিদিনের মাপের উপর ভিত্তি করে আপনি স্বয়ংক্রিয়ভাবে খালি রাখতে পারেন, বা ফাইলের চেয়ে বড় হলে ইত্যাদি etc.

কিভাবে কনফিগার logrotate উপর এখানে দেখে নিন: http://linuxcommand.org/man_pages/logrotate8.html


1
আমি নিজেই এই বিকল্পের পক্ষে। আমরা "ফাইল> 10 এমবি" -> "এটির ট্যারেজ এটি" "খালি ফাইল ব্যাকআপ করতে" ব্যবহার করি। এবং ব্যাকআপগুলি 900 দিন পরে মুছে ফেলা হবে।
রিঞ্জউইন্ড

3

echo "" > foo_fileযে করছেন একটি সহজ উপায়, সব রক্ত বিষয়বস্তু প্রতিস্থাপন করবে foo_file সঙ্গে "" এটা এই ক্ষেত্রে উপার্জন, খালি।

আপনি এটি ব্যবহার করতে পারেন cat /dev/null > foo_file, এটি নাল ডিভাইসটি পড়বে এবং কিছুই না করে আপনার ফাইলটি ওভাররাইট করবে।


এতে বলা হয়েছে অনুমতি অস্বীকার করেছে, chmod 755 ফাইলের নাম ব্যবহার করেছে তবে এখনও অনুমতিটি অস্বীকার করা হয়েছে
sosytee

আপনার সাধারণ ব্যবহারকারীর সাথে আপনি কি ফাইলের অনুমতিগুলি পড়তে পারেন?
ব্রুনো পেরেইরা

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