আরও মার্জিত "পিএস অক্স | গ্রেপ-ভি গ্রেপ ”


177

আমি যখন প্রক্রিয়াগুলির তালিকাটি পরীক্ষা করে দেখি এবং আমার জন্য আকর্ষণীয় সেগুলি 'গ্রেপ' করি grepতবে ফলাফলগুলি নিজেই অন্তর্ভুক্ত হয়। উদাহরণস্বরূপ, টার্মিনালগুলির তালিকা করতে:

$ ps aux  | grep terminal
user  2064  0.0  0.6 181452 26460 ?        Sl   Feb13   5:41 gnome-terminal --working-directory=..
user  2979  0.0  0.0   4192   796 pts/3    S+   11:07   0:00 grep --color=auto terminal

সাধারণত আমি ps aux | grep something | grep -v grepসর্বশেষ এন্ট্রি থেকে মুক্তি পেতে ব্যবহার করি ... তবে এটি মার্জিত নয় :)

এই সমস্যাটি সমাধান করার জন্য আপনার কাছে কি আরও মার্জিত হ্যাক রয়েছে (সমস্ত কমান্ডকে আলাদা স্ক্রিপ্টে মোড়ানো বাদে, এটিও খারাপ নয়)


4
এটি মূল্যবান জন্য, এটি একটি প্রাচীন FAQ। আইটেম 3.10 দেখুন faqs.org/faqs/unix-faq/faq/part3
tripleee

1
রেফারেন্সের জন্য ধন্যবাদ। এটি তাদের পদ্ধতি:ps ux | awk '/name/ && !/awk/ {print $2}'
জাকুব এম

কি grep -v grepঅংশ করছেন?
Jwan622

2
@ জওয়ান 22২২ গ্রেপ ফলাফল থেকে grep -v grepবাদ দেয় grep। যদি গ্রেপ পিএস এর সাথে সংমিশ্রণে ব্যবহৃত হয়, তবে গ্রেপ প্রক্রিয়াটি (গ্রেপ আর্গুমেন্ট সহ) পাশাপাশি প্রদর্শিত হবে, আপনার ফলাফলকে বিশৃঙ্খলা করবে। গ্রেপ-ভি গ্রেপ এটি এড়ানোর একটি সাধারণ উপায়
ইউজিন প্লাটোনভ

উত্তর:


282

সাধারণ কৌশলটি হ'ল:

ps aux | egrep '[t]erminal'

এটি মিলিত লাইনগুলি মিলবে terminal, যা egrep '[t]erminal'না! এটি ইউনিক্সের অনেক স্বাদেও কাজ করে ।


1
এটি আমার জন্য একটি স্বেচ্ছাচারী স্ট্রিংয়ের জন্য কাজ করে তবে কোনও ব্যবহারকারীর নাম নয়, যেমন ps aux | grep '[r]oot'। কোন এক কেন জানেন না?
কেএক্সসং

2
@kxsong: | grep '[t]erminal'প্রক্রিয়া তালিকায় 'টার্মিনাল' শব্দটি না রেখে 'টার্মিনাল' শব্দটি যুক্ত যে কোনও লাইন নির্বাচন করে। আপনি কী দিয়ে অর্জন করার চেষ্টা করছেন | grep '[r]oot'এবং এটি কীভাবে কাজ করছে না? এর থেকে আরও ভাল সমাধান হওয়ার সম্ভাবনা রয়েছে।
জনসিওয়েব

3
আমি ভুল হলে আমাকে সংশোধন করুন, তবে এটি গ্রেপড চরিত্রের কোনও অবস্থাতেও কাজ করা উচিত: পিএস অক্স | গ্রেপ "তে [আর] মিনাল"
meso_2600

2
উজ্জ্বল হ্যাক (আমার মনে হয় এটাকে আমার বলা উচিত, যেহেতু অক্স / গ্রেপ লেখকরা সম্ভবত এই দৃশ্যের কথা
ভাবেননি

2
@ জামিজেগ: ঠিক আছে ... যেমন আমি আমার পোস্টে বলেছি, এতে থাকা grep '[t]erminal'লাইনগুলি মিলবে terminal। থেকে প্রাপ্ত আউটপুটে ps auxএকটি grep '[t]erminal'স্কোয়ার (বর্গাকার বন্ধনী সহ) থাকবে, এতে স্ট্রিংটি terminal(একই ছাড়াই) থাকবে না।
জনসিওয়েব

57

Pgrep ব্যবহার করুন । এটি আরও নির্ভরযোগ্য।


pgrepঅভ্যস্ত কাজ যদি আমি উদাহরণস্বরূপ দেখুনps aux | grep 'ssh options'
Jakub এম

12
জাকুব এম .: কি হবে pgrep -f?
পাহাড়

4
@ জাকুব-এম ডিফল্টরূপে pgrepকেবলমাত্র প্রক্রিয়া নামের বিপরীতে মেলে। পুরো কমান্ডের সাথে মিল রাখতে -fপতাকাটি ব্যবহার করুন ।
bluecollarcoder

3
pgrepশুধুমাত্র প্রক্রিয়া আইডি ফেরত দেয়।
মেলাব

1
পুরানো সংস্করণগুলি নিয়েছে pgrep -fl(তবে -fপুরো সেমিডলাইনটি পূরণ না করে পুরো সেমিডলাইনটি দেখতে পেল না, বিশদ: সার্ভারফল্ট . com / a / 619788 / 44183 )। তবে হ্যাঁ, আপনার যদি পিড, সেমিডলাইন এর পাশে অন্য কোনও তথ্য প্রয়োজন, আপনার প্রয়োজন ps। তাদের একত্রিত করতে পারেন:ps -p $(pgrep -f foo)
বেনি চেরনিয়াভস্কি-পাসকিন

29

এই উত্তর একটি পূর্ববর্তী pgrep উত্তর উপর নির্মিত । এটি ব্যবহারের সাথে মিলিয়ে অন্য একটি উত্তরও তৈরি করে । এখানে কিছু প্রাসঙ্গিক প্রশিক্ষণের উদাহরণ দেওয়া হল:pspgrep

$ pgrep -lf sshd
1902 sshd

$ pgrep -f sshd
1902

$ ps up $(pgrep -f sshd)
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1902  0.0  0.1  82560  3580 ?        Ss   Oct20   0:00 /usr/sbin/sshd -D

$ ps up $(pgrep -f sshddd)
error: list of process IDs must follow p
[stderr output truncated]

$ ps up $(pgrep -f sshddd) 2>&-
[no output]

উপরেরগুলি একটি ফাংশন হিসাবে ব্যবহার করা যেতে পারে :

$ psgrep() { ps up $(pgrep -f $@) 2>&-; }

$ psgrep sshd
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1902  0.0  0.1  82560  3580 ?        Ss   Oct20   0:00 /usr/sbin/sshd -D

সঙ্গে ব্যবহারের psসাথে তুলনা করুন grep। দরকারী শিরোনাম সারিটি মুদ্রিত হয়নি:

$  ps aux | grep [s]shd
root      1902  0.0  0.1  82560  3580 ?        Ss   Oct20   0:00 /usr/sbin/sshd -D

Github.com/blueyed/oh-my-zsh/blob/… দেখুন (তবে এটি Zsh এর জন্য নির্দিষ্ট)।
নীল বর্ণের

@ ব্লুয়েড, আমি বাশ ফাংশন সংজ্ঞা সহ উত্তরটি আপডেট করেছি।
একিউম্যানাস

-dবিভাজক নির্দিষ্ট করতে বিকল্পটিও নোট করুন ; উদাহরণস্বরূপps -fp$(pgrep -d , getty)
টবির স্পিড

1
আমি এটি ব্যবহার করি: ps uxp `pgrep <process>` দ্রষ্টব্য এটি pঅবশ্যই সর্বশেষ প্যারামিটার হতে হবে (যেমন, puxকাজ করবে না)
কেএফএল

9

আপনি পিএস কমান্ডে ফিল্টার করতে পারেন, যেমন

ps u -C gnome-terminal

(বা সন্ধান / অনুসন্ধান ইত্যাদির মাধ্যমে অনুসন্ধান করুন )


1
নোট করুন যে এটি GNU এর PS (লিনাক্স) এর সাথে কাজ করে তবে BSD PS এর সাথে নয়।
জোশ

এটি GNU PS এর সাথেও ভুল। ps -C <command>সঠিক আদেশের সাথে মিলবে will বিকল্পগুলি aবা xবিকল্পগুলির সাথে ব্যবহার করার সময় এটি সমস্ত প্রক্রিয়াগুলির প্রতিবেদন করবে, কারণ aএবং অন্যান্য উপায়ে মিলে থাকা প্রক্রিয়াগুলির সেট ছাড়াওx প্রক্রিয়াগুলি তালিকাভুক্ত করে ।
অ্যানিমিজম

@ আইনবাদ সত্য। ধন্যবাদ, আমি এটি ঠিক করেছি।
আন্দ্রেস ফ্রিচে 15'27

প্রক্রিয়াটির নামটি সুনির্দিষ্টভাবে নির্দিষ্ট করা থাকলে এটি কাজ করে। এটি কোনও আংশিক মিলের জন্য কাজ করে না, যেমন আর্গুমেন্টের পক্ষে বা মিলানোর logindজন্য systemd-logind
একিউম্যানাস

4

আরও একটি বিকল্প :

ps -fC terminal

এখানে বিকল্পগুলি:

 -f        does 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.

 -C cmdlist     Select by command name.
                This selects the processes whose executable name is
                given in cmdlist.

6
একটি ছোটখাটো ব্যর্থতা, এবং এটি যা ওপির প্রশ্নের সাথে সম্পর্কিত নয়, তা হ'ল এটি আপনাকে টমকেটের মতো জিনিস দেখায় না, যা আসলে জাভা হিসাবে যুক্তিগুলির লন্ড্রি তালিকায় চালিত হয়।
চার্লস উড

-Cবিকল্পটি ইতিমধ্যে @ আন্ড্রেয়াস ফ্রিশের উত্তরটিতে দেড় বছর আগে পোস্ট করা হয়েছিল ...
পাইট্র ডবরোগোস্ট

3

অনুসন্ধানের ধরণে কোনও চরিত্রকে ঘিরে ব্র্যাকেটগুলি ব্যবহার করা grepপ্রক্রিয়া বাদ দেয় কারণ এতে মিলে যাওয়া রেজেক্স নেই।

$ ps ax | grep 'syslogd'
   16   ??  Ss     0:09.43 /usr/sbin/syslogd
18108 s001  S+     0:00.00 grep syslogd

$ ps ax | grep '[s]yslogd'
   16   ??  Ss     0:09.43 /usr/sbin/syslogd

$ ps ax | grep '[s]yslogd|grep'
   16   ??  Ss     0:09.43 /usr/sbin/syslogd
18144 s001  S+     0:00.00 grep [s]yslogd|grep

3

দাবি অস্বীকার: আমি এই সরঞ্জামটির লেখক, কিন্তু ...

আমি px ব্যবহার করব :

~ $ px atom
  PID COMMAND          USERNAME   CPU RAM COMMANDLINE
14321 crashpad_handler walles   0.01s  0% /Users/walles/Downloads/Atom.app/Contents/Frameworks/Electron Framework.framework/Resources/crashpad_handler --database=
16575 crashpad_handler walles   0.01s  0% /Users/walles/Downloads/Atom.app/Contents/Frameworks/Electron Framework.framework/Resources/crashpad_handler --database=
16573 Atom Helper      walles    0.5s  0% /Users/walles/Downloads/Atom.app/Contents/Frameworks/Atom Helper.app/Contents/MacOS/Atom Helper --type=gpu-process --cha
16569 Atom             walles   2.84s  1% /Users/walles/Downloads/Atom.app/Contents/MacOS/Atom --executed-from=/Users/walles/src/goworkspace/src/github.com/github
16591 Atom Helper      walles   7.96s  2% /Users/walles/Downloads/Atom.app/Contents/Frameworks/Atom Helper.app/Contents/MacOS/Atom Helper --type=renderer --no-san

একটি বুদ্ধিমান কমান্ড লাইন ইন্টারফেসের সাহায্যে প্রক্রিয়াগুলি অনুসন্ধান করা বাদে এটি প্রকল্পের পৃষ্ঠায় আরও অনেক দরকারী কাজ করে ।

লিনাক্স এবং ওএস এক্সে কাজ করে, সহজেই ইনস্টল করা হয়:

curl -Ls https://github.com/walles/px/raw/python/install.sh | bash

0

চূড়ান্ত ব্যবহারের ক্ষেত্রে উপর নির্ভর করে আপনি প্রায়শই এর পরিবর্তে ওউকে পছন্দ করতে চান।

ps aux | awk '/[t]erminal/'

এটি বিশেষত সত্য যখন আপনার মতো কিছু থাকে

ps aux | grep '[t]erminal' | awk '{print $1}'  # useless use of grep!

যেখানে স্পষ্টতই রেজেক্সকে তাত্ক্ষণিকভাবে স্ক্রিপ্টে অ্যাওক স্ক্রিপ্টে যুক্ত করা যেতে পারে:

ps aux | awk '/[t]erminal/ { print $1 }'

তবে সত্যই, নিজেকে এটিকে পুনর্নবীকরণ করবেন না। pgrepএবং বন্ধুরা দীর্ঘকাল ধরে রয়েছেন এবং বেশিরভাগ অ্যাডহক রিম্পিমুলেশনগুলির চেয়ে এই পুরো সমস্যাটির জায়গাটি পরিচালনা করেন।


-2

.bash_profileফলস্বরূপ 'গ্রেপ' কে গ্রেপ্তার করে এমন একটি ফাংশন তৈরি করতে আপনার (বা অন্যান্য ফাইল যা আপনি বাশ আলিয়াসে রেখেছেন) সম্পাদনা করা অন্য বিকল্প is

function mygrep {
grep -v grep | grep --color=auto $1
}

alias grep='mygrep'

grep -v grepপ্রথম অন্যথায় হতে হয়েছে আপনার--color=auto ইচ্ছা কিছু কারণে কাজ করে না।

আপনি বাশ ব্যবহার করছেন যদি এটি কাজ করে; আপনি যদি একটি আলাদা শেল ওয়াইএমএমভি ব্যবহার করেন।


1
ওরফে এবং ফাংশনটি কী? শুধু function grep { command grep -v grep | command grep --color=auto "$@"; }(আর্গুমেন্ট এবং কোটিংয়ের ফিক্সটিও নোট করুন)। যাইহোক, এই যে কোনো অ নষ্ট হয়ে গেছে psনামোচ্চারণের grepআর কাজ করবে না (আর্গুমেন্ট ভুল পাস হয়)। যাই হোক, অনেক দরকারী ফাংশন ফিল্টার আউট এক যা এটি নিজে মিলছে না করতে Regex পরিবর্তন বদলে হবে grepথেকে grepআলাদাভাবে ফলাফল নেই। এবং অবশ্যই, কয়েক দশক আগে পর্যাপ্ত পরিমাণে সমাধান করা সমস্যার নতুন সমাধান উদ্ভাবন খুব কার্যকর নয় is
ট্রিপলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.