web-dev-qa-db-ja.com

シェルの `|`記号の意味は何ですか?

|コマンドのSudo ps -ef | grep processname記号の意味は何ですか?

また、誰もこのコマンドを説明できますか?このコマンドはPIDを取得してそのプロセスを強制終了するためだけに使用しましたが、Sudo ps -ef | grep processname | grep -v grepも見ました。-v grepgrepの以前に生成されたPIDを強制終了するような印象を受けます。もしそうなら、それはどのように機能しますか?

16
Aamir
ps -ef | grep processname

最初にSudo ps -efを実行し、2番目のコマンドに出力を渡します。

2番目のコマンドは、Wordの「プロセス名」を含むすべての行をフィルタリングします。

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と呼ばれるプロセスのすべての発生をリストします。

13
Pilot6

pipeと呼ばれます。最初のコマンドの出力を2番目のコマンドの入力として提供します。

あなたの場合、それは次を意味します:
Sudo ps -efの結果は、grep processnameの入力として供給されます

Sudo ps -ef
これは、実行中のすべてのプロセスをリストします。詳細については、端末にman psと入力してください。

grep processname
したがって、このプロセスのリストはgrepに送られ、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
35
Parto

私はこれを簡単な実践的な答えで試してみようと思います:

パイプ|を使用すると、シェルで素晴らしいことができます!それは私が最も有用で力強いと考える単一の演算子です。

ディレクトリ内のファイルを数えるのはどうですか?シンプル:

ls | wc -l ..lsの出力をwc witパラメーター-lにリダイレクトします

またはファイル内の行のカウント?

cat someFile | wc -l

何かを検索したい場合はどうすればよいですか? 'grep'は、文字列の出現を検索できます。

cat someFile | grep aRandomStringYouWantToSearchFor

パイプの左側のコマンドの出力をパイプの右側のコマンドにリダイレクトするだけです。

もう1つのレベル:ファイルで何かが発生する頻度は?

cat someFile | grep aRandomStringYouWantToSearchFor | wc -l

|を使用できますほとんどすべてのために:)

fortune | cowsay

enter image description here

7
Gewure

このコマンドは、PIDを取得してそのプロセスを強制終了するためにのみ使用しました

他の答えはあなたの主な質問にすでに答えていますが、私もこれに対処したいと思います。

一般的にkillingプロセスはしばしば行き過ぎであり、プロセスによって割り当てられたリソースを乱雑な状態のままにします。多くの場合、terminate it;

これに加えて、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
4
kos