1. 程式人生 > >Linux Shell基線配置相關操作

Linux Shell基線配置相關操作

一、輸入解析類

1.1 echo解析tab和換行

問題描述:echo預設是原樣輸出字串,並不解析\t和\n等反斜槓字元,如下圖所示。我們希望echo能解析\t和\n等字元。

處理辦法:可以使用-e指示echo識別反斜槓。

 

1.2 cat將變數寫入檔案

問題描述:我們經常需要將變數寫到配置檔案,比如將java相關的幾個變數寫到~/.profile,追加多行cat是最方便的但cat預設會在插入時解析變數,如下圖所示。我們希望就是原樣寫入而不自動解析變數。

處理辦法:可通過給EOF加上單引號來指示cat不要解析變數。

參考:https://blog.csdn.net/u010154760/article/details/45955797

 

二、輸出查詢類

2.1 grep查詢程序並過濾查詢命令本身

問題描述:我們經常使用ps -ef | grep something的語句去查詢程序(以便進一步獲取pid等),但此時grep本身也會被打印出來,如下圖所示。我們希望grep語句本身也被過濾掉。

處理辦法:使用grep -v grep將grep語句去掉

 

2.2 grep列印匹配行的前後幾行

問題描述:我們使用grep查詢時預設只打印匹配行,這種實現是合理的,但有時候匹配行與前後部份是強關聯的我們也想獲取。

處理辦法:我們可以使用-A num指示列印匹配行的後幾行,使用-B num指示列印匹配行的前幾行。

 

2.3 sed去除塊註釋

問題描述:在讀取tomcat等配置檔案時,如果只是直接grep那查找出的內容可能其實是在塊註釋之中,該項配置其實並不生效。我們希望能先將配置檔案中先將所有註釋先去除掉。

處理辦法:此時可以使用sed '/regex/d'刪除單行註釋,使用sed '/star_line_regex/,/end_line_regex/d'來刪除掉塊註釋。具體到tomcat如下

cat tomcat-users.xml |sed '/<!--.*-->/d' | sed '/<!--/,/-->/d'

參考:https://askubuntu.com/questions/525974/how-to-remove-comments-from-an-xml-file

 

三、其他查詢

3.1 獲取tomcat版本號

問題描述:tomcat的版本號並不在響應的Server頭中,只顯示在預設的index.jsp和預設的錯誤頁面中,此時可以通過curl獲取其版本號(判斷tomcat有沒有設定隱藏版本號)。但如果預設index.jsp被刪除且自定義了錯誤頁面我們該如何通過shell獲取到tomcat的版本號呢。

處理辦法:此時我們還有三種辦法可以獲取到版本號。

第一種,解壓$CATALINA_HOME/lib/catalina.jar,到org\apache\catalina\util\ServerInfo.properties檔案中檢視版本號。這理論上對服務沒有影響,但動伺服器檔案的做法並不是很好。

第二種,使用java -cp $CATALINA_HOME/lib/catalina.jar org.apache.catalina.util.ServerInfo使用檢視版本號。但查詢版本號的服務並不一定是執行tomcat的前戶,其環境變數中並不一定有java。

第三種,執行$CATALINA_HOME/bin/version.sh獲取版本資訊。

參考:https://community.rsa.com/docs/DOC-81702