শেলের মধ্যে `|` প্রতীকটির অর্থ কী?


16

|প্রতীক sudo ps -ef | grep processnameকমান্ড মানে কি ?

এছাড়াও কেউ কি এই আদেশটি ব্যাখ্যা করতে পারেন? আমি শুধু PID, পেয়ে এবং যে প্রক্রিয়া হত্যার দায়ে এই কমান্ড ব্যবহার করেছেন, কিন্তু আমি এও দেখেছি sudo ps -ef | grep processname | grep -v grepএবং আমি ছাপ যে বছরের কম বয়সী হই -v grepজন্য পূর্ববর্তী উত্পন্ন PID, হত্যা মত হল grep। যদি তাই হয় কিভাবে এটি কাজ করে?


4
আপনার sudoচালানোর দরকার নেই ps -ef। তৃতীয় কমান্ডটি এড়ানোর জন্য একটি সাধারণ কৌশলটি প্রক্রিয়াটির একটি চরিত্রকে বর্গাকার বন্ধনীতে অন্তর্ভুক্ত করছে:ps -ef | grep [p]rocessname
কোস

1
@ কোস That আদেশটি নির্ভরযোগ্যভাবে কাজ করার জন্য উদ্ধৃতিগুলির দরকার:ps -ef | grep '[p]rocessname'
ক্যাস্পারড

2
@ কোস আপনি যদি লিখেন তবে আপনি শেলটিকে grep [p]rocessnameবর্তমান ডিরেক্টরিতে নামের সাথে একটি ফাইল সন্ধান করতে processnameএবং সেই ফাইলের নামের সাথে প্যাটার্নটি বিকল্প হিসাবে লিখতে বলছেন । যদি নামের কোনও ফাইল processnameউপস্থিত না থাকে, শেলটি আক্ষরিকভাবে গ্রেপকে প্যাটার্নটি দিতে পারে। তবে এটি আপনার সেটিংসের উপর নির্ভর করে। সুতরাং আপনার সংস্করণ নামের একটি ফাইল যদি ভঙ্গ করবে processnameবিদ্যমান বা নিম্নলিখিত শেল বিকল্পগুলির একটিও সক্ষম করা হয়েছে যদি failglob, nullglob, nocaseglob
ক্যাস্পারড

1
@ ক্যাস্পার্ড আমি আপনার শেষ মন্তব্যটি ভুলভাবে লিখেছি, হ্যাঁ, আপনি সবকিছু সম্পর্কে সঠিক। আমি এটা বিবেচনা করিনি।
কোস

1
আমি বিশ্বাস করতে পারি না এটি কোনও সদৃশ নয়।
মাস্ট

উত্তর:


13
ps -ef | grep processname

এটি প্রথমে চালিত হয় sudo ps -efএবং দ্বিতীয় কমান্ডে আউটপুট পাস করে।

দ্বিতীয় কমান্ড সমস্ত প্রক্রিয়া ফিল্টার করে যা "প্রক্রিয়া নাম" শব্দটি ধারণ করে।

ps -ef | grep processname | grep -v grepসমন্বিত processnameএবং না থাকা সমস্ত লাইন তালিকাভুক্ত করে grep

অনুসারে man grep

-v, --invert-match
              Invert the sense of matching, to select non-matching lines.  (-v
              is specified by POSIX.)

অনুসারে man ps

ps displays information about a selection of the active processes.

-e     Select all processes.  Identical to -A.

-f     Do full-format listing. This option can be combined with many
          other UNIX-style options to add additional columns.  It also
          causes the command arguments to be printed.  When used with -L,
          the NLWP (number of threads) and LWP (thread ID) columns will be
          added.  See the c option, the format keyword args, and the
          format keyword comm.

আপনি প্যারামিটার একত্রিত করতে পারেন -efএকই হিসাবে -e -f

প্রকৃতপক্ষে ps -ef | grep processnameডাকা প্রক্রিয়াটির সমস্ত উপস্থিতি তালিকাবদ্ধ করুন processname


ব্যাখ্যার জন্য ধন্যবাদ, ps -efঠিক কি করে ??
আমির

আমি মনে করি যখন আমরা | grep processNameটার্মিনালে চলি তখন আমরা গ্রেপের আউটপুটও পাই যা নিজেই একটি প্রক্রিয়া হয় -v এই আউটপুটটিকে হত্যা করে
আমির

আপনি সঠিক.
পাইলট 6

35

এটি বলা হয় pipe। এটি দ্বিতীয় কমান্ডের ইনপুট হিসাবে প্রথম কমান্ডের আউটপুট দেয়।

আপনার ক্ষেত্রে এর অর্থ:
এর ফলাফলটি sudo ps -efইনপুট হিসাবে খাওয়ানো হয়grep processname

sudo ps -ef:
এটি চলমান সমস্ত প্রক্রিয়া তালিকাবদ্ধ করে। man psআরও জন্য টার্মিয়াল টাইপ করুন ।

grep processname
সুতরাং, প্রক্রিয়াগুলির এই তালিকাটি গ্রেপে খাওয়ানো হয় যা দ্বারা সংজ্ঞায়িত প্রোগ্রামটির সন্ধান করে programname

উদাহরণ

sudo ps -ef | grep firefoxআমার টার্মিনাল রিটার্নে টাইপ করা :

parto     6501  3081 30 09:12 ?        01:52:11 /usr/lib/firefox/firefox
parto     8295  3081  4 15:14 ?        00:00:00 /usr/bin/python3 /usr/share/unity-scopes/scope-runner-dbus.py -s web/firefoxbookmarks.scope
parto     8360  8139  0 15:14 pts/24   00:00:00 grep --color=auto firefox

ঠিক আছে, কি-ভি গ্রেপ, এটি কী করে।
আমির

ভাল ব্যাখ্যা তবে কীভাবে -v grep কাজ করে সে সম্পর্কে আমার কিছু সহায়তা দরকার ..
আমির

ওহ, আমি কেন grep -vব্যবহার করা হয় তা দেখতে পাচ্ছি । শেষ লাইনটি ফিল্টার করতে।
পাইলট 6

@ আমির আমার উত্তর দেখুন। grep -vপ্যাটার্নযুক্ত আউট লাইনগুলি ফিল্টার করে।
পাইলট 6

1
আপনি যুক্ত করতে পারেন যে আপনি একাধিক পাইপ ব্যবহার করতে পারেন। যেমন প্রতিধ্বনি "ফুবার" | গ্রেপ ফু | গ্রেপ বার
মাইকেল 14

7

আমি চেষ্টা করব এবং সরাসরি উত্তর-পূর্বের উত্তর দিয়ে উত্তর দেব:

পাইপ |আপনাকে শেলতে দুর্দান্ত স্টাফ করতে দেয়! এটিই একমাত্র অপারেটর যা আমি সবচেয়ে দরকারী এবং শক্তিশালী বিবেচনা করি।

একটি ডিরেক্টরিতে ফাইল গণনা সম্পর্কে? সহজ:

ls | wc -lআউটপুট ..redirect lsকরার wcবুদ্ধি প্যারামিটার -lলাইনের জন্য

বা একটি ফাইল লাইন গণনা?

cat someFile | wc -l

আমি যদি কিছু অনুসন্ধান করতে চাই? 'গ্রেপ' স্ট্রিংয়ের ঘটনাগুলি অনুসন্ধান করতে পারে:

cat someFile | grep aRandomStringYouWantToSearchFor

আপনি কেবল পাইপের বাম কমান্ডের আউটপুটটিকে পাইপের ডান কমান্ডে পুনঃনির্দেশ করুন।

আরও একটি স্তর: একটি ফাইলের মধ্যে প্রায়শই কিছু ঘটে থাকে?

cat someFile | grep aRandomStringYouWantToSearchFor | wc -l

আপনি | ব্যবহার করতে পারেন প্রায় সবকিছুর জন্য :)

fortune | cowsay

এখানে চিত্র বর্ণনা লিখুন


2
হ্যাঁ, পাইপগুলি মজাদার, +1, তবে দয়া করে উদাহরণগুলি পরিবর্তন করুন: ইউইউওসি
কোস

লাইক: grep -c "aRandomStringYouWantToSearchFor" "someFile";-)
সাদি

Ofc। তবে সরলতার উদ্দেশ্যে ... প্রশ্নকর্তা
গ্রেপ

1
সত্যই আপনার উদাহরণগুলির অনেকগুলি পাইপের প্রয়োজন নেই। আপনি কি ডেমোগজিফিকেশন শুনেছেন? আপনি বিড়াল এবং পাইপ ব্যবহার করছেন যখন অনেকগুলি কমান্ড ফাইলগুলিকে সরাসরি প্যারামিটার হিসাবে গ্রহণ করবে: যেমন বিড়াল কিছু ফাইল F গ্রেপ এআর্যান্ডম স্ট্রিং ইউওয়ান্টটোস অনুসন্ধানের জন্য গ্রেপ হওয়া উচিত র‌্যান্ডমস্ট্রিং ইউওয়ানটটস অনুসন্ধানের জন্য কিছু ফাইল
ক্যাপ্টেন লেপটন

বলছি .. আমি জানি। আপনি যদি মন্তব্যগুলি পড়েন, ক্যাপ্টেন, আপনি আমার প্রতিক্রিয়াটি পড়তেন। যে ছেলেটি প্রশ্ন জিজ্ঞাসা করেছিল সে পাইপের সত্যিকারের অ্যাপ্লিকেশনগুলি বুঝতে পারবে না - গ্রেপ কী তা সে জানে না। তাহলে আমি কি তাকে এই উদাহরণ দেব? kill $(ps aux | awk '/someString/ { print $2}' | sed -n '1p') না, কারণ এটি মোটেই উদ্দেশ্যটি পরিবেশন করবে না।
Gewure

4

আমি এই কমান্ডটি কেবল পিআইডি পাওয়ার জন্য এবং সেই প্রক্রিয়াটি হত্যার জন্য ব্যবহার করেছি

অন্যান্য উত্তরগুলি ইতিমধ্যে আপনার মূল প্রশ্নের উত্তর দিয়েছে, তবে আমি এটিকেও সম্বোধন করতে চাই;

সাধারণভাবে একটি প্রক্রিয়া হত্যার বিষয়টি প্রায়শই ওভারকিল হয়ে যায় এবং জঞ্জালহীন অবস্থায় প্রায় কোনও প্রক্রিয়া দ্বারা বরাদ্দকৃত সম্পদগুলি ছেড়ে দেয়, আপনি প্রায়শই কেবল এটি বন্ধ করতে পারেন ;

এর পাশাপাশি, কেবল pkillএকটি প্রক্রিয়া হত্যা / অবসান করতে ব্যবহার করুন । pkillএকটি সঠিক প্রক্রিয়া নাম বা একটি নিয়মিত অভিব্যক্তি নির্দিষ্ট করে সমর্থন করে:

pkill -x foo # Terminates process foo
pkill ^foo$ # Terminates process foo
pkill -9 -x foo # Kills process foo
pkill -9 ^foo$ # Kills process foo

1
kill -9আপনি নির্দিষ্টভাবে জানেন না যে অন্য কোনও সিগন্যাল কাজ করবে না যদি না ব্যবহার করবেন না । এছাড়াও দেখুন iki.fi/era/unix/award.html#kill
ট্রিপলি

@ ট্রিপলি ওপি জানিয়েছে যে তারা যদিও এই প্রক্রিয়াটি হত্যা করতে চায়
কোস

এটা কি killকরে। নির্দিষ্টকরণ -9একটি অতিরিক্ত এবং প্রায়শই বিপর্যয়কর অতিরিক্ত বিকল্প।
ট্রিপলি

@ ট্রিপলি আমি বিশ্বাস করি যে পরিভাষার কারণে বিভ্রান্তি দেখা দিয়েছে; আমাকে হত্যা = SIGKILL না SIGTERM।
কোস

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