如何在 ps 中不要看見自己?
結論:
> ps -ef | grep -v grep | grep
或, 利用將 PATTERN 字串改為第一個字以 []
框起來的正規表達式來過濾.
> ps -ef | grep [P]ATTERN
> ps -ef | grep -v grep | grep
[]
框起來的正規表達式來過濾.> ps -ef | grep [P]ATTERN
廢話:
自己從來是一件麻煩的事.
正文:
在 linux 文字模式上工作, 有個指令不會少打, 頻率大概只會少於 ls
. ls
會列出目前目錄下的所有檔案跟目錄; ps
則會列出目前執行的程序.
這是因為有太多程式在背景中執行, 而他們也不會因為你點了滑鼠就跳出來告訴你, “我在這裡!”. 他們總是默默工作, 直到你點名才會知道他們存在. 而用來點名的指令就是ps
. 使用 ps
只是點了你自己執行的程序名, 想知道目前有哪些程序在這台電腦上執行你必須下 ps -ef
或ps aux
.
通常點名, 我們也希望有效率一點, 所以我們會用 grep
來協助抽點. 例如, 想知道目前有沒有 node
程式在執行, 可以下 ps -ef | grep node
. 但這樣的結果有時候不夠完美, 因為你剛剛下的指令也是程序之一, 其中也有"node"字串, grep
也會將他挑選出來, 而這通常不是我們要的結果.
還好, grep
提供 -v
這個參數, 他會將挑出不符合的結果. 利用這個, 將 ps -ef | grep node
的結果再過濾一遍, 使用 ps -ef | grep node | grep -v grep
就能得到我們真正希望的結果.
不過, 有些 shell
會幫你在 grep
中加上 --color=auto
來為傳回結果著色. 為避免失去這個效果, 可以將真的要過濾條件放在最後面. 在這個例子, 也就是 ps -ef | grep -v grep | grep node
.
最後我們得到 ps -ef | grep -v grep | grep
這樣的命令模式.
在這樣的使用案例上, 透過一個小技巧利用 regexp 的邊際效應, 可以改寫, 如下
> ps -ef | grep [n]ode
這是因為 字串 “ps -ef | grep node” 是吻合 /node/
. 而 字串 “ps -ef | grep [n]ode” 並不吻合 /[n]ode/
. /[n]ode/
要求一個 “n” 後面接 “ode”, 而 grep 的字串模板是"n"後面接 “]ode”.
或許, 你認為這樣太麻煩, 用 眼睛 看, 不就能區分出來了? 但實際上, 這常常被應用在 shell script
中, 來去判斷某些程序是否在執行了.
ls
. ls
會列出目前目錄下的所有檔案跟目錄; ps
則會列出目前執行的程序.ps
. 使用 ps
只是點了你自己執行的程序名, 想知道目前有哪些程序在這台電腦上執行你必須下 ps -ef
或ps aux
.grep
來協助抽點. 例如, 想知道目前有沒有 node
程式在執行, 可以下 ps -ef | grep node
. 但這樣的結果有時候不夠完美, 因為你剛剛下的指令也是程序之一, 其中也有"node"字串, grep
也會將他挑選出來, 而這通常不是我們要的結果.grep
提供 -v
這個參數, 他會將挑出不符合的結果. 利用這個, 將 ps -ef | grep node
的結果再過濾一遍, 使用 ps -ef | grep node | grep -v grep
就能得到我們真正希望的結果.shell
會幫你在 grep
中加上 --color=auto
來為傳回結果著色. 為避免失去這個效果, 可以將真的要過濾條件放在最後面. 在這個例子, 也就是 ps -ef | grep -v grep | grep node
.ps -ef | grep -v grep | grep
這樣的命令模式.> ps -ef | grep [n]ode
/node/
. 而 字串 “ps -ef | grep [n]ode” 並不吻合 /[n]ode/
. /[n]ode/
要求一個 “n” 後面接 “ode”, 而 grep 的字串模板是"n"後面接 “]ode”.shell script
中, 來去判斷某些程序是否在執行了.
沒有留言:
張貼留言