initプロセス以外も表示される
「initプロセスが見たい!実行中のプロセスからinitを検索してみよう!」
$ ps aux | grep init
ubuntu 136856 0.0 0.5 9212 5216 pts/0 Ss 04:18 0:00 /usr/bin/bash --init-file /home/ubuntu/.vscode-server/bin/xxxxxxx/out/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh
ubuntu 136945 0.0 0.2 7004 2056 pts/0 S+ 04:18 0:00 grep --color=auto init
「あれ?なんか一つ余計なのも表示されてる。」
この方法だと、grep
コマンド自体にもinit
という文字列が含まれているため、検索に引っかかってしまいます。
ubuntu 136945 0.0 0.2 7004 2056 pts/0 S+ 04:18 0:00 grep ←ここ --color=auto init
initプロセスだけを表示する
検索の仕方を変えてみましょう。
init
を[i]nit
に変えてみてください。
$ ps aux | grep [i]nit
ubuntu 136856 0.0 0.5 9212 5216 pts/0 Ss 04:18 0:00 /usr/bin/bash --init-file /home/ubuntu/.vscode-server/bin/xxxxxxx/out/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh
無事にinitプロセスだけ表示されました!
なぜ?
- 「
init
という文字列はinit
と[i]nit
という正規表現で検索される。 - しかし、
[i]nit
という文字列は[i]nit
という正規表現には検索されない。 - なぜなら、文字列
[i]nit
にはi
とnit
の間に文字列]
が含まれているから。
そもそも、[i]nit
という正規表現は文字列i
と文字列nit
が結合した(日本語が合っているかわからない)文字列という意味です。しかしそんな文字列はinit
という文字列しか存在しません。つまり、[i]nit
という正規表現はinit
という文字列のみを検索します。
grep
コマンドのプロセス含まれていたinit
という文字列が、[i]nit
という文字列に変わり、grep
コマンドのプロセスが検索されないようになりました!
参考