簡介
utils: shell工具集,通常用于Linux環(huán)境中,包含一些常用的alias、腳本、git命令自動補全、定制化的命令提示符(顯示git分支名)等等,意圖提供直觀、簡化的命令行操作。用戶也可根據自己的需要對其進行修改和定制。
這個項目會一直進行更新和維護。歡迎大家使用、提意見和merge request!
用法
將utils下載至用戶home目錄:
$ cd $HOME && git clone https://github.com/lfckop/utils.git有兩種使用方式可供選擇:
- 只影響當前shell會話:
$ source ${HOME}/utils/.source.sh - 影響所有的shell會話:在文件
/etc/profile最后添加一行source ${HOME}/utils/.source.sh,或者:$ sudo echo 'source ${HOME}/utils/.source.sh' >> /etc/profile(需要root權限)。
功能介紹
常用alias
alias ll="ls -alF"
alias grep="grep --color=auto"
alias pg="ps aux | head -1; ps aux | grep -v grep | grep"
alias ng="netstat -antup | awk 'NR==2'; netstat -antup | grep"
alias lg="lsof -i -n | head -1; lsof -i -n | grep"
alias extip="curl -s http://whatismyip.akamai.com/"
alias e="exit"
alias yi="yum -y install"
alias mcp="mvn clean package"
alias mcpnt="mvn clean package -DskipTests -Dmaven.test.skip=true"
alias sost="netstat -n | awk '/^tcp/ {s[\$NF]++} END{for(i in s) print i, s[i]}' OFS='\t'"
這些alias都定義在.source.sh文件中,一般比較直觀,意圖是提供簡化的命令行操作,部分alias介紹如下。
-
pg: 查找某個進程:$ pg java,可根據進程PID或進程名進行查找。該命令名字簡短,使用非常頻繁。 -
ng: 檢查端口使用情況:$ ng 8080,可根據端口號、進程PID或進程名進行查找。 -
extip: 獲取本機外網ip:$ extip. -
mcp: Java項目maven打包:$ mcp. -
sost: 按socket狀態(tài)給出統(tǒng)計信息:$ sost.
命令提示符$PS1
export PS1='\[\033[1;32m\][\[\033[0;32m\]\u@\h:\[\033[1;35m\]\w\[\033[1;36m\]$(__git_ps1 " (%s)")\[\033[1;32m\] ]\[\033[1;31m\] \$\[\033[0m\] '
命令提示符$PS1同alias一樣定義在.source.sh文件中,此$PS1會顯示當前路徑和當前文件夾的git分支名(如果它是git目錄),并用顏色區(qū)分展示,同時提供了git命令自動補全功能。
在對系統(tǒng)提供的默認命令提示符不滿意時,可嘗試使用這個或在此基礎上根據個人喜好對其進行定制。
常用腳本
這些腳本實際上只是對一些基礎命令的一層薄包裝,意圖將一些常用的功能以簡潔方便的方式提供出來。
通常這些命令都會需要一個或多個參數,在不提供參數直接使用這些命令的時候,會打印出Usage提示信息并立即退出;同樣,這些Usage信息也會作為注釋寫在各個腳本的頭部,建議使用者詳細閱讀。
現分別簡單介紹如下,如果感興趣或有疑惑的話可以直接閱讀代碼。
catmf
對unzip -p some-jar-file.jar META-INF/MANIFEST.MF命令的封裝,
打印輸出jar包的META-INF/MANIFEST.MF文件。
$ catmf
Usage: catmf jarfile.jar
cl
對bc命令的封裝,在命令行中進行數學計算CalcuLate - cl。
$ cl
Usage: cl "99.1*(88.6+77.7)"
or: cl 99.9/k (equals: 'cl 99.9/1024')
or: cl 99.9/m (equals: 'cl 99.9/1024/1024')
escape
轉義字符串中的雙引號,即將"替換成\"。從標準輸入stdin中讀取字符,并寫到標準輸出stdout中。
$ escape
{ "code":0, "msg":"success" }
{ \"code\":0, \"msg\":\"success\" }
ff
對find和grep命令的封裝,用于在當前目錄的文件中查找某個字符串。該命令名字簡短,使用非常頻繁。
$ ff
Usage: ff key [filename...]
Example: ff ConcurrentHashMap
Example: ff ConcurrentHashMap "*.java"
Example: ff ConcurrentHashMap Test1.java Test2.java
first60s和jdt
first60s and jdt (Java Dump Tool),用于流程化保存現場。
當線上某個Java服務出現嚴重性能問題,有時候為了臨時快速恢復服務,重啟應用或許是個不錯的選項。但是,在重啟應用前需要保存現場,以便提供足夠的日志信息來幫助后續(xù)排查并嘗試解決問題。其中,保存現場這一步是可以大概流程化的,一是節(jié)省時間快速處理,二是期望保留足夠的當前運行時信息并寫到日志文件中。
-
first60s:保存當前系統(tǒng)信息,如內存、CPU、網絡、磁盤等主要部件的負載、IO、性能、容量等相關信息。腳本基本上是參考netflix的一篇博文"Linux Performance Analysis in 60,000 Milliseconds",作者Brendan Gregg;網上也有其譯文"Linux性能分析的前60000毫秒"。Usage: first60s -
jdt:Java Dump Tool,保存當前Java應用的運行時信息,主要是用jstack, jmap, jinfo和jstat保存相關信息,再結合GC日志,應該可以對后續(xù)排查提供更多幫助。Usage: jdt [pid]
ipfrom
通過請求ip.cn查詢ip。
$ ipfrom
Usage: ipfrom ip
jarfind, jargrep
這兩個腳本來自于新浪微博平臺研發(fā)技術專家qdaxb的開源工具wtool_java。
jarfind用于在jar包中查找文件;jargrep用于在jar包中檢索字符串。
$ jarfind
Usage: jarfind file_name jar_path
$ jargrep
Usage: jargrep text <path or filename>
path
獲取一個文件的絕對路徑,該命令通常用于Mac下,功能類似于Liunux命令readlink -f filename。
$ path
Usage: path filename
tarc, tart, tarx
這三個工具是對tar命令的封裝,分別用于打包、列出包文件、解包。因考慮到文件存儲與傳輸速度都不是限制,為提高打包與解包速度,故沒有對文件進行壓縮。
$ tarc
Usage: tarc filename_prefix files...
$ tart
Usage: tart filename.tar
$ tarx
Usage: tarx filename.tar