ইনপুটটিতে প্রথম এন সংখ্যাটি লাইন মুছে ফেলার নির্দেশ দিন


11

পটভূমি

আমি একটি এসএসএইচ সার্ভার চালাচ্ছি এবং এই ব্যবহারকারীটিকে আমি মুছতে চাই। আমি এই ব্যবহারকারীকে মুছতে পারি না কারণ তিনি বর্তমানে কয়েকটি প্রসেস চালাচ্ছেন যা আমার প্রথমে খুন করা দরকার।

আমি বর্তমানে যে পাইপলাইনটি ব্যবহার করছি বর্তমানে ব্যবহারকারীর সমস্ত প্রক্রিয়া আইডির সন্ধান করতে আমি এটি ব্যবহার করছি:

ps -u user | awk '{print $1;}'

আউটপুটটি দেখতে এটির মতো দেখাচ্ছে:

PID
2121
2122
2124
2125
2369
2370

আমি kill -9সমস্ত প্রক্রিয়া মেরে ফেলার জন্য এটি পাইপ করতে চাই যাতে আমি এই বোকা ব্যবহারকারীটিকে এই জাতীয় মুছতে পারি:

ps -u user | awk '{print $1;}' | sudo xargs kill -9

তবে PIDশিরোনামের কারণে এটি কাজ করে না :

kill: failed to parse argument: 'PID'

প্রশ্নটি

আমি ভাবছি যে ইনপুটটির প্রথম লাইনটি সরাতে একটি সাধারণ ইউনিক্স কমান্ড থাকতে হবে।

আমি সচেতন যে আমি এটির tailজন্য ব্যবহার করতে পারি তবে ঠিক কতগুলি প্রদর্শন করতে চাই তা নির্ধারণের জন্য ইনপুটটিতে কয়টি লাইন রয়েছে তা গণনা করতে চাই না।

আমি এর মতো headবা tailবিপরীত কিছু খুঁজছি ( স্রোতের কেবল প্রথম / শেষ অংশটি প্রদর্শন করার পরিবর্তে এটি স্ট্রিমের শুরু / শেষ ব্যতীত সবকিছু প্রদর্শন করে )।

বিঃদ্রঃ

আমি | grep [[:digit:]]আমার awkকমান্ডের পরে কেবল এই সমস্যাটি সমাধান করতে সক্ষম হয়েছি তবে আমি এখনও কোনও ফাইলের প্রথম লাইনটি মুছার উপায় খুঁজছি কারণ আমি মনে করি এটি অন্যান্য পরিস্থিতিতে বেশ কার্যকর হবে।


যেহেতু আপনি ইতিমধ্যে জঞ্জাল ব্যবহার করছেন, আপনি NRউদাহরণস্বরূপ হেডার রেকর্ড (লাইন) বাদ দিতে পারেন awk 'NR>1 {print $1;}'। আরও ভাল - ব্যবহার করুন pgrep -uবাpkill -u
স্টিল্ড্রাইভার

স্টিলড্রাইভার আকর্ষণীয়! একটি উত্তর দিন এবং ব্যাখ্যা করুন যে এটি ( awkআদেশটি) কীভাবে কাজ করে।
wefwefa3

উত্তর:


14

দ্রষ্টব্য: আপনার সিস্টেমে ইতিমধ্যে যদি pgrep/ থাকে pkillতবে আপনি এখানে চাকাটি পুনরায় উদ্ভাবন করছেন। যদি আপনার সিস্টেমে এই ইউটিলিটিগুলি না থাকে, তবে আপনার psনিখরচায় পিআইডি তালিকার সরাসরি ফলাফল পেতে আউটপুট ফর্ম্যাট করতে সক্ষম হওয়া উচিতps -u user -opid=

আপনি যদি ইতিমধ্যে ব্যবহার awkকরে থাকেন তবে প্রথম লাইন (রেকর্ড) অপসারণ করার জন্য কোনও অতিরিক্ত প্রক্রিয়া চালিত করার দরকার নেই: রেকর্ড সংখ্যায় কেবল একটি শর্ত যুক্ত করুনNR

ps -u user | awk 'NR>1{print $1;}'

যেহেতু আপনি উল্লেখ করেছেন headএবং tail, সম্ভবত আপনি এই ক্ষেত্রে সূত্রটি চান istail -n +2


4
tail -n +2আমি ঠিক কি খুঁজছিলাম ছিল!
wefwefa3

এর সাথে শিরোনামটি psপ্রিন্ট না করার জন্য বলার জন্য +1 -opid=, কারণ এটি আউটপুটটিকে কখনও প্রদর্শিত হতে বাধা দেয়। যদি ভবিষ্যতের কোনও ব্যবহারকারী psপাইপলাইনের মাঝামাঝি সময়ে আউটপুটটি সাজানোর সিদ্ধান্ত নেন তবে জাঁক / সেড / লেজ অনুমানটি ভেঙে যেতে পারে।
জেফ শ্যাচলার

8

আমি যখন এই প্রশ্নটি লিখছিলাম তখন আমি একটি সমাধান ব্যবহার করে বের করে ফেললাম sed

ইনপুটটির শুরুতে একটি লাইন মুছুন

একটি লাইন ব্যবহার মুছে ফেলতে sed 1d

ইনপুটটির শুরুতে একাধিক লাইন মুছুন

Nলাইন ব্যবহারের সংখ্যা মুছতেsed 1,Nd

  • প্রথম 5 টি লাইন মুছে ফেলতে ব্যবহার করুন sed 1,5d

  • প্রথম 10 লাইন ব্যবহার মুছতে sed 1,10d

  • প্রথম 25 লাইন ব্যবহার মুছতে sed 1,25d

পাইপলাইন

সুতরাং পাইপলাইনটি দৃশ্যে পরিণত হয়:

ps -u user | awk '{print $1;}' | sed 1d | sudo xargs kill -9
                                     ^ removes the PID header
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.