shell技巧分享(二)

2021-08-18 13:11:57 字數 4212 閱讀 1405

這是乙個系列文章,主要分享shell(部分功能僅適用於bash)的使用建議和技巧,每次分享3點,希望你能有所收穫。

$ sleep

1234 &

[1] 19340

$ sleep

1234 &

[2] 19342

$ sleep

1234 &

[3] 19344

$ alias | grep psg

alias psg='ps -ef | grep --color=auto'

$ ps -ef | grep

1234

root 19340

2159

014:22 pts/1

00:00:00

sleep

1234

root 19342

2159

014:22 pts/1

00:00:00

sleep

1234

root 19344

2159

014:22 pts/1

00:00:00

sleep

1234

root 19360

2159

014:23 pts/1

00:00:00

grep --color=auto 1234

$ psg 1234

root 19340

2159

014:22 pts/1

00:00:00

sleep

1234

root 19342

2159

014:22 pts/1

00:00:00

sleep

1234

root 19344

2159

014:22 pts/1

00:00:00

sleep

1234

root 19366

2159

014:23 pts/1

00:00:00

grep --color=auto --color=auto 1234

通過系統提供的alias命令將ps和grep命令合成乙個命令psg,實現快速查詢特定字串的相關程序。比如執行ps -ef | grep 1234命令查詢包含1234字串的相關程序,通過執行alias psg='ps -ef | grep --color=auto'命令,定義乙個新命令psg實現相同功能,更加方便快捷。

$ psk()' | xargs kill -9;}

$ sleep

1234 &

[1] 18055

$ sleep

1234 &

[2] 18057

$ sleep

1234 &

[3] 18060

$ ps -ef | grep

1234

root 18055

2159

014:03 pts/1

00:00:00

sleep

1234

root 18057

2159

014:03 pts/1

00:00:00

sleep

1234

root 18060

2159

014:03 pts/1

00:00:00

sleep

1234

root 18067

2159

014:03 pts/1

00:00:00

grep --color=auto 1234

$ psk 1234

kill: sending signal to 18073 failed: no such process

[1] killed sleep

1234

[2]- killed sleep

1234

[3]+ killed sleep

1234

$ ps -ef | grep

1234

root 18082

2159

014:03 pts/1

00:00:00

grep --color=auto 1234

在日常工作中,有時候需要kill多個相關程序,如果單獨去乙個乙個kill,很不方便且容易出錯。通過定義乙個函式psk可以實現查詢並kill相關程序的功能。例如,示例中通過sleep命令模擬啟動了3個程序,啟動後可以檢視到3個程序分別在後台執行,執行psk 1234命令即可同時kill這3個程序,執行完psk 1234命令後,再次查詢相關程序,發現程序已經不存在。

$ sleep

1234 &

[1] 17888

$ sleep

1234 &

[2] 17889

$ sleep

1234 &

[3] 17890

$ ps -ef | grep

1234

root 17888

2159

014:01 pts/1

00:00:00

sleep

1234

root 17889

2159

014:01 pts/1

00:00:00

sleep

1234

root 17890

2159

014:01 pts/1

00:00:00

sleep

1234

root 17902

2159

014:01 pts/1

00:00:00

grep --color=auto 1234

$ ps -ef | grep [1]234

root 17888

2159

014:01 pts/1

00:00:00

sleep

1234

root 17889

2159

014:01 pts/1

00:00:00

sleep

1234

root 17890

2159

014:01 pts/1

00:00:00

sleep

1234

如果注意看前面2個技巧,會發現psg查詢程序時會包含自身程序,psk在kill相關程序時會列印一條資訊:kill: sending signal to 18073 failed: no such process,這是因為查詢程序時,沒有將自身程序排除導致。示例中第一次執行ps -ef | grep 1234,發現有乙個17902程序,這個程序就是執行ps -ef | grep 1234中的grep命令。如果執行ps -ef | grep [1]234會發現,已經將自身程序排除了。當然,也可以通過grep的-v選項實現過濾自身的功能,如下:

$ ps -ef | grep

1234 | grep -v grep

root 17888

2159

014:01 pts/1

00:00:00

sleep

1234

root 17889

2159

014:01 pts/1

00:00:00

sleep

1234

root 17890

2159

014:01 pts/1

00:00:00

sleep

1234

現在,你可以在psg和psk命令的字串第乙個字元新增中括號試一下效果了。

注:將分享的alias或者函式寫入你的shell配置檔案(如:~/.bashrc或/etc/profile)中,這樣每次開啟終端都能使用。

分享shell程式設計中的幾個小技巧

1 列印一些頭資訊 command dilimiter dilimiter 以分界符號dilimiter中的內容作為命令的標準輸入 常用在echo命令中,這樣就避免了沒輸出一行就要使用乙個echo命令,同時,輸出格式的調整也相應變得簡單了。例如 echo something message hell...

總結ThinkPHP使用技巧經驗分享 二

迴圈輸出 volist 還有別名 iterate 模版賦值 user d user list user findall this assign list list 模版定義 注意 name 和 id 表示的含義 輸出 list 的第 5 15 條記錄 輸出偶數記錄 輸出 key.子迴圈輸出 swit...

python使用建議與技巧分享(二)

這是乙個系列文章,主要分享python的使用建議和技巧,每次分享3點,希望你能有所收穫。1 如何在if語句中檢測多個條件 不推薦方式 flag1 1 flag2 0 flag3 0 if flag1 1 or flag2 1 or flag3 1 print ok 推薦方式 flag1 1 flag...