Lsof | gawk '$ 4 ~ / txt / {next}; / REG। * \ (মুছে ফেলা \) $ / {printf "> / proc /% s / fd /% d \ n", $ 2, $ 4}' কমান্ড গড়


9

আমি কিছু নিবন্ধ পড়ছি এবং আমি এই আদেশটি দেখেছি:

lsof|gawk '$4~/txt/{next};/REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'

কিছু শরীর আমাকে এটি বুঝতে সাহায্য করতে পারে


+1 এবং প্রিয় কারণ এটি একটি আকর্ষণীয় প্রশ্ন। :-)
লরেঞ্জো আনকোরা

উত্তর:


7

এই কমান্ডটি সেইগুলি থেকে কাটা ফাইলগুলি মুদ্রণ করবে lsof

(এটি আসলে কোনও ফাইল সরিয়ে বা ছাঁটাই করে না )।

lsof খোলা ফাইলগুলির ফাইল (ফাইল বর্ণনাকারী) ফিরিয়ে দেবে যা খালিগুলিতে পাইপ করা হয়েছে যা এটি নীচে প্রক্রিয়া করে।

gawk '$4~/txt/{next};/REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'

উপরের এক্সপ্রেশনটিতে দুটি নিয়মিত এক্সপ্রেশন থাকে যা একটি আধা কোলন দ্বারা পৃথক করা হয় ;

প্রথম অংশ বিবেচনা করা যাক gawk '$4~/txt/{next};

এখানে, যদি চতুর্থ ক্ষেত্রটি থাকে txtতবে পাঠ্যের পরবর্তী লাইনটি পড়তে হবে, যা স্ক্রিপ্টটি আবার শুরু থেকেই প্রক্রিয়া শুরু করবে।

nextবিবৃতি বাহিনী অবিলম্বে বর্তমান রেকর্ড প্রক্রিয়াকরণের শেষ করে পরবর্তী রেকর্ড যেতে awk। এর অর্থ হ'ল বর্তমান রেকর্ডের জন্য আর কোনও বিধি কার্যকর করা হয় না এবং বর্তমান বিধিগুলির বাকী ক্রিয়াকলাপ কার্যকর হয় না।

এখন স্ক্রিপ্টের দ্বিতীয় অংশটি বিবেচনা করা যাক /REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'

এখানে যদি লাইনটি নিয়মিত অভিব্যক্তির সাথে মিলে যায় /REG.*\(deleted\)$(এর $অর্থ (deleted)লাইনটির শেষ শব্দটি হওয়া উচিত) তবে এটি কেবল মুদ্রণ করে >/proc/%s/fd/%d\n", $2,$4

Lsof কমান্ডে $4ফাইল বর্ণনাকারী নম্বর রয়েছে (উদাহরণস্বরূপ 53w, wফাইলের উপর নির্ভর করে ফাইলারটি লেখার জন্য খোলা হয়েছে) বা ফাইল টাইপ। %dমধ্যে printfনিশ্চিত করে যে শুধুমাত্র সংখ্যা প্রিন্ট করা হবে, (মত কোন পাঠ্য অক্ষর মুছে ফেলার w)। $2প্রক্রিয়াটির প্রক্রিয়া আইডি প্রিন্ট করে যা ফাইলটি ব্যবহার করে তাই এটি >/proc/3989/fd/53মুছে ফেলা হয়েছে এমন সমস্ত ফাইল মুদ্রণ করবে তবে যার ফাইল বিবরণী খোলা থাকে, অন্য কথায়, ফাইল বর্ণনাকারী যা নিরাপদে কাটা যেতে পারে।


2

এই কমান্ডটি lsof থেকে মুছে ফেলা ফাইলগুলি ছাঁটাই করবে।

এটি প্রথমে খোলা ফাইলগুলি তালিকাভুক্ত করবেlsof

তারপরে পুনরাবৃত্তভাবে রেখাগুলি অনুসন্ধান করুন তারপরে একটিতে চতুর্থ প্যারামিটার হিসাবে {next}আরইজি রয়েছে '$4~/txt/{next};/REG.*\(deleted\)$/তারপরে এই লাইনের সাথে সম্পর্কিত এই প্রক্রিয়াটি মুছে ফেলা হবে

এবং তারপরে আরইজি থাকা লাইনগুলি ছাড়াই এবং মুছে ফেলা হিসাবে চিহ্নিত হওয়া ছাড়া সমস্ত ফলাফল মুদ্রণ করুন।{printf ">/proc/%s/fd/%d\n", $2,$4}'


আমি মনে করি আপনার কমান্ডের বিভিন্ন অংশ (কমপক্ষে আমার উত্সাহ পেতে) ব্যাখ্যা করা উচিত।
don.joey

আমার আপডেটটি দেখুন

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