1. 程式人生 > >Java工程師常用Linux命令

Java工程師常用Linux命令

收集 fig 發生 con 過濾器 conf status 內存 cut

本文所列的Linux常用命令包含:文件相關(目錄操作,內容查看,查找與比較,壓縮與解壓),進程管理,網絡操作,系統管理,性能監測與優化,Java常用工具多個方面概述。

文件目錄基本操作

ls 命令用來顯示目標列表,在Linux中是使用率較高的命令。ls命令的輸出信息可以進行彩色加亮顯示,以分區不同類型的文件。
常用選項:

ls(選項)(參數)

-a 顯示所有檔案及目錄(ls默認不會列出隱藏文件);

-l 所有輸出信息用單列格式輸出,不輸出為多列;

--color[=WHEN]:使用不同的顏色高亮顯示不同類型的。

實際應用時,經常會使用ls -l --color=auto,並給它指定一個別名ll:

alias ll=‘ls -l --color=auto‘

cd 用來切換工作目錄至dirname。 其中dirname表示法可為絕對路徑或相對路徑。若目錄名稱省略,則變換至使用者的home directory。
常用選項:

cd 進入用戶主目錄

cd ~ 進入用戶主目錄

cd - 返回進入此目錄之前所在的目錄

cd .. 返回上級目錄(若當前目錄為“/“,則執行完後還在“/";".."為上級目錄的意思)

cd ../.. 返回上兩級目錄

cd !$ 把上個命令的參數作為cd參數使用

mkdir 創建目錄。該命令創建由dirname命名的目錄。如果在目錄名的前面沒有加任何路徑名,則在當前目錄下創建由dirname指定的目錄;如果給出了一個已經存在的路徑,將會在該目錄下創建一個指定的目錄。


常用選項:

-p 若所要建立目錄的上層目錄目前尚未建立,則會一並建立上層目錄

rm 刪除一個目錄中的一個或多個文件或目錄,也可以將某個目錄及其下屬的所有文件及其子目錄均刪除掉。對於鏈接文件,只是刪除整個鏈接文件,而原有文件保持不變。
常用選項:

-f:強制刪除文件或目錄

-i:刪除已有文件或目錄之前先詢問用戶

-r或-R:遞歸處理,將指定目錄下的所有文件與子目錄一並處理

註意:使用rm命令要格外小心。因為一旦刪除了一個文件,就無法再恢復它。

cp 將一個或多個源文件或者目錄復制到指定的目的文件或目錄。
常用選項:

-f:強行復制文件或目錄,不論目標文件或目錄是否已存在

-i:覆蓋既有文件之前先詢問用戶

-R/r:遞歸處理,將指定目錄下的所有文件與子目錄一並處理

cp /home/sre/tom.log . 將文件/home/sre/tom.log復制到當前目錄

cp -r katarina /home/sre/logs/ 將目錄katarina復制到/home/sre/logs/目錄下

mv 對文件或目錄重新命名,或者將文件從一個目錄移到另一個目錄中。source表示源文件或目錄,target表示目標文件或目錄。如果將一個文件移到一個已經存在的目標文件中,則目標文件的內容將被覆蓋。
常用選項:

-f:若目標文件或目錄與現有的文件或目錄重復,則直接覆蓋現有的文件或目錄

-u:當源文件比目標文件新或者目標文件不存在時,才執行移動操作

pwd 以絕對路徑的方式顯示用戶當前工作目錄

tree 以樹狀圖列出目錄的內容

touch 兩個功能:一是創建新的空文件;二是用於把已存在文件的時間標簽更新為系統當前的時間(默認方式),它們的數據將原封不動地保留下來。
示例:

touch /var/wd/logs/touch.txt 創建空文件/var/wd/logs/touch.txt

chmod 變更文件或目錄的權限。在UNIX系統家族裏,文件或目錄權限的控制分別以讀取、寫入、執行3種一般權限來區分,另有3種特殊權限可供運用。用戶可以使用chmod指令去變更文件與目錄的權限,設置方式采用文字或數字代號皆可。
示例:

chmod +x what_cpu_do.sh 給腳本what_cpu_do.sh增加可執行權限

chmod u+x,g+w test  //為文件test設置自己可以執行,組員可以寫入的權限

file 探測給定文件的類型。

文件內容查看

cat 連接文件並打印到標準輸出設備上,cat經常用來顯示文件的內容。
示例:

grep 是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。
常用選項:

-A<顯示列數> (After)除了顯示符合範本樣式的那一行之外,並顯示該行之後的內容

-B (Before)在顯示符合範本樣式的那一行之外,並顯示該行之前的內容

-C<顯示列數> 除了顯示符合範本樣式的那一列之外,並顯示該列之前後的內容

-i 忽略字符大小寫。

tail 輸出文件中的尾部內容,默認在屏幕上顯示指定文件的末尾10行。
常用選項:

-f:顯示文件最新追加的內容(查看服務器上動態刷新的日誌時經常使用)。

-n:輸出文件的尾部N(N位數字)行內容

head 顯示文件的開頭的內容。在默認情況下,head命令顯示文件的頭10行內容。
常用選項:

-n<數字>:指定顯示頭部內容的行數

-c<字符數>:指定顯示頭部內容的字符數

-v:總是顯示文件名的頭信息

-q:不顯示文件名的頭信息

more 一個基於vi編輯器文本過濾器,它以全屏幕的方式按頁顯示文本文件的內容,支持vi中的關鍵字定位操作。more名單中內置了若幹快捷鍵,常用的有H(獲得幫助信息),Enter(向下翻滾一行),空格(向下滾動一屏),Q(退出命令)。
常用選項:

Space鍵:顯示文本的下一屏內容

Enter鍵:只顯示文本的下一行內容

斜線符/:接著輸入一個模式,可以在文本中尋找下一個相匹配的模式

h鍵:顯示幫助屏,該屏上有相關的幫助信息

b鍵:顯示上一屏內容

q鍵:退出rnore命令

less 與more十分相似,都可以用來瀏覽文字檔案的內容,不同的是less命令允許用戶向前或向後瀏覽文件,而more命令只能向前瀏覽。用less命令顯示文件時,用PageUp鍵向上翻頁,用PageDown鍵向下翻頁。要退出less程序,應按q鍵。

wc 用來計算數字。利用wc指令我們可以計算文件的Byte數、字數或是列數。
常用選項:

-c:只顯示Bytes數

-l:只顯示列數

-w:只顯示字數

tr 對來自標準輸入的字符進行替換、壓縮和刪除。它可以將一組字符變成另一組字符,經常用來編寫優美的單行命令,作用很強大。
常用選項:

-c:取代所有不屬於第一字符集的字符

-d:刪除所有屬於第一字符集的字符

-s:把連續重復的字符以單獨一個字符表示

sort 將文件進行排序,並將排序結果標準輸出。它可以從特定的文件,也可以從stdin中獲取輸入。
常用選項:

-d:排序時,處理英文字母、數字及空格字符外,忽略其他的字符

-f:排序時,將小寫字母視為大寫字母

-k: 來指定列數

-r:以相反的順序來排序來自

文件查找與比較

find 在指定目錄下查找文件。任何位於參數之前的字符串都將被視為欲查找的目錄名。如果使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件。並且將查找到的子目錄和文件全部進行顯示。
示例:

find /home -name "*.txt" 在/home目錄下查找以.txt結尾的文件名

find /home -iname "*.txt" 同上,但忽略大小寫

find /home ! -name "*.txt" 找出/home下不是以.txt結尾的文件

which 查找並顯示給定命令的絕對路徑,環境變量PATH中保存了查找命令時需要遍歷的目錄。which指令會在環境變量$PATH設置的目錄裏查找符合條件的文件。也就是說,使用which命令,就可以看到某個系統命令是否存在,以及執行的到底是哪一個位置的命令。

whereis 用來定位指令的二進制程序、源代碼文件和man手冊頁等相關文件的路徑。
和find相比,whereis查找的速度非常快,這是因為linux系統會將 系統內的所有文件都記錄在一個數據庫文件中,當使用whereis和下面即將介紹的locate時,會從數據庫中查找數據,而不是像find命令那樣,通 過遍歷硬盤來查找,效率自然會很高。
示例:

locate locate命令其實是find -name的另一種寫法,但是要比後者快得多,原因在於它不搜索具體目錄,而是搜索一個數據庫/var/lib/locatedb,這個數據庫中含有本地所有文件信息。Linux系統自動創建這個數據庫,並且自動更新,由於更新非實時,所以使用locate命令查不到最新變動過的文件。為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動更新數據庫。
示例:

locate /etc/sh 搜索etc目錄下所有以sh開頭的文件

locate -i ~/m 搜索用戶主目錄下,所有以m開頭的文件,並且忽略大小寫

文件壓縮與解壓

tar tar命令可以為linux的文件和目錄創建檔案。
常用選項:

-c:建立新的備份文件

-z:通過gzip指令處理備份文件

-v:顯示指令執行過程

-f:指定備份文件

-x:從備份文件中還原文件

zip 可以用來解壓縮文件,或者對文件進行打包操作。

unzip 加壓縮.zip包,不在詳述。
另外,關於壓縮、解壓縮命令還有gzip、gunzip、bzip2、bunzip2等,讀者如果感興趣,可自行搜索了解。

進程管理

ps 用於報告當前系統的進程狀態,是最基本同時也是非常強大的進程查看命令,使用該命令可以確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等等,總之大部分信息都是可以通過執行該命令得到的。
由於ps命令能夠支持的系統類型相當的多,所以選項多的離譜!我主要使用:

kill 命令用來刪除執行中的程序或工作。kill可將指定的信息送至程序。預設的信息為SIGTERM(15),可將指定程序終止。若仍無法終止該程序,可使用SIGKILL(9)信息嘗試強制刪除程序。程序或工作的編號可利用ps指令或job指令查看。
常用選項:

kill -9 強制終止進程

kill -15 正常終止進程

具有相似功能的命令,還有killall、pkill等。

watch 以周期性的方式執行給定的指令,指令輸出以全屏方式顯示。
常用選項:

-n:指定指令執行的間隔時間(秒)

-d:高亮顯示指令輸出信息不同之處

-t:不顯示標題。

service service命令是Redhat Linux兼容的發行版中用來控制系統服務的實用工具,它以啟動、停止、重新啟動和關閉系統服務,還可以顯示所有系統服務的當前狀態。
服務名:自動要控制的服務名,即/etc/init.d目錄下的腳本文件名
示例:

網絡操作

curl curl命令是一個利用URL規則在命令行下工作的文件傳輸工具。它支持文件的上傳和下載,所以是綜合傳輸工具,但按傳統,習慣稱curl為下載工具。

wget wget命令用來從指定的URL下載文件。

ping 用來測試主機之間網絡的連通性。

telnet 用於登錄遠程主機,對遠程主機進行管理。我常用它來檢測端口。

nslookup 常用域名查詢工具,就是查DNS信息用的命令。

ss 用來顯示處於活動狀態的套接字信息。ss命令可以用來獲取socket統計信息,它可以顯示和netstat類似的內容。但ss的優勢在於它能夠顯示更多更詳細的有關TCP和連接狀態的信息,而且比netstat更快速更高效。
常用選項:

-n:不解析服務名稱,以數字方式顯示

-a:顯示所有的套接字

-l:顯示處於監聽狀態的套接字

-m:顯示套接字的內存使用情況

-p:顯示使用套接字的進程信息

-i:顯示內部的TCP信息;

-t:只顯示tcp套接字

-u:只顯示udp套接字

nc nc是netcat命令的簡稱,都是用來設置路由器。我常用它來上傳文件到服務器,具體可參考 如何優雅的實現文件上傳或下載

ifconfig 用於配置和顯示Linux內核中網絡接口的網絡參數。用ifconfig命令配置的網卡信息,在網卡重啟後機器重啟後,配置就不存在。要想將上述的配置信息永遠的存的電腦裏,那就要修改網卡的配置文件了。

ifconfig eth0 down 關閉網卡eth0

ifconfig eht0 up 啟動網卡eth0

系統管理

su 用於切換當前用戶身份到其他用戶身份,變更時須輸入所要變更的用戶帳號與密碼。

sudo 以其他身份來執行命令,預設的身份為root。在/etc/sudoers中設置了可執行sudo指令的用戶。

du 查看使用空間。
常用選項:

-a 顯示目錄中個別文件的大小

-b 顯示目錄或文件大小時,以byte為單位

-c 除了顯示個別目錄或文件的大小外,同時也顯示所有目錄或文件的總和

-k 以KB(1024bytes)為單位輸出

-m 以MB為單位輸出

-s 僅顯示總計,只列出最後加總的值

-h 以K,M,G為單位,提高信息的可讀性

性能監測與優化

top 可以實時動態地查看系統的整體運行情況,是一個綜合了多方信息監測系統性能和運行信息的實用工具。通過top命令所提供的互動式界面,用熱鍵可以管理。
常用選項:

-d:屏幕刷新間隔時間

-u<用戶名>:指定用戶名

-p<進程號>:指定進程

-n<次數>:循環顯示的次數

交互命令:

1:顯示全部CPU信息

k:終止一個進程

i:忽略閑置和僵死進程,這是一個開關式命令

q:退出程序

o或者O:改變顯示項目的順序

m:切換顯示內存信息

t:切換顯示進程和CPU狀態信息

c:切換顯示命令名稱和完整命令行

M:根據駐留內存大小進行排序

P:根據CPU使用百分比大小進行排序

T:根據時間/累計時間進行排序

free 顯示當前系統未使用的和已使用的內存數目,還可以顯示被內核使用的內存緩沖區。
常用選項:

-b:以Byte為單位顯示內存使用情況

-k:以KB為單位顯示內存使用情況

-m:以MB為單位顯示內存使用情況

-t:顯示內存總和列

sar Linux下系統運行狀態統計工具,它將指定的操作系統狀態計數器顯示到標準輸出設備。sar工具將對系統當前的狀態進行取樣,然後通過計算數據和比例來表達系統的當前運行狀態。它的特點是可以連續對系統取樣,獲得大量的取樣數據。取樣數據和分析的結果都可以存入文件,使用它時消耗的系統資源很小。我常用它查看網卡流量,具體請參考 Linux查看實時網卡流量的幾種方式

lsof lsof命令用於查看你進程開打的文件,打開文件的進程,進程打開的端口(TCP、UDP)。
常用選項:

-a:列出打開文件存在的進程

-c<進程名>:列出指定進程所打開的文件

-p<進程號>:列出指定進程號所打開的文件

當程序報too many open files 異常時,可以使用它查看是什麽進程打開了太多的文件,主要查看是不是文件(包括網絡鏈接)打開後是不是沒有關閉,我之前的一個項目,就遇到了這種問題。

ulimit 用來限制系統用戶對shell資源的訪問。支持以下各種類型的限制:所創建的內核文件的大小、進程數據塊的大小、Shell 進程創建文件的大小、內存鎖住的大小、常駐內存集的大小、打開文件描述符的數量、分配堆棧的最大大小、CPU 時間、單個用戶的最大線程數、Shell 進程所能使用的最大虛擬內存。同時,它支持硬資源和軟資源的限制。
常用選項:

-a:顯示目前資源限制的設定

-n <文件數目>:指定同一時間最多可開啟的文件數

-u <程序數目>:用戶最多可開啟的程序數目

vmstat 顯示虛擬內存狀態(“Viryual Memor Statics”),但是它可以報告關於進程、內存、I/O等系統整體運行狀態。
常用選項:

-a:顯示活動內頁

-f:顯示啟動後創建的進程總數

-m:顯示slab信息

-n:頭信息僅顯示一次

-s:以表格方式顯示事件計數器和內存狀態

-d:報告磁盤狀態

-p:顯示指定的硬盤分區狀態

-S:輸出信息的單位。

iostat 監視系統輸入輸出設備和CPU的使用情況。它的特點是匯報磁盤活動統計情況,同時也會匯報出CPU使用情況。同vmstat一樣,iostat也有一個弱點,就是它不能對某個進程進行深入分析,僅對系統的整體情況進行分析。
常用選項:

-c:僅顯示CPU使用情況

-d:僅顯示設備利用率

-k:顯示狀態以千字節每秒為單位,而不使用塊每秒

-m:顯示狀態以兆字節每秒為單位

-x:顯示擴展狀態

Java常用工具

java 可用來執行jar包。

java -jar test.jar

jps jps是jdk提供的一個查看當前Java進程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的縮寫。非常簡單實用。
常用選項:

-l:輸出完全的包名,應用主類名,jar的完全路徑名

-v:輸出jvm參數

jmap 打印出某個java進程內存中所有‘對象’的情況。
常用選項:

-dump:[live,]format=b,file=<filename> 使用hprof二進制形式,輸出jvm的heap內容到文件=. live子選項是可選的,假如指定live選項,那麽只輸出活的對象到文件.

-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情況.

-histo[:live] 打印每個class的實例數目,內存占用,類全名信息. VM的內部類名字開頭會加上前綴”*”. 如果live子參數加上後,只統計活的對象數量.

jstat Jstat用於監控基於HotSpot的JVM,對其堆的使用情況進行實時的命令行的統計,使用jstat我們可以對指定的JVM做如下監控:
類的加載及卸載情況,查看新生代、老生代及持久代的容量及使用情況,查看新生代、老生代及持久代的垃圾收集情況,包括垃圾回收的次數及垃圾回收所占用的時間,查看新生代中Eden區及Survior區中容量及分配情況等。
常用選項:

-gcutil 用於查看新生代、老生代及持代垃圾收集的情況

-class 用於查看類加載情況的統計

說明:

S0 Heap上的 Survivor space 0 區已使用空間的百分比

S1 Heap上的 Survivor space 1 區已使用空間的百分比

E Heap上的 Eden space 區已使用空間的百分比

O Heap上的 Old space 區已使用空間的百分比

P Perm space 區已使用空間的百分比

YGC 從應用程序啟動到采樣時發生 Young GC 的次數

YGCT 從應用程序啟動到采樣時 Young GC 所用的時間(單位秒)

FGC 從應用程序啟動到采樣時發生 Full GC 的次數

FGCT 從應用程序啟動到采樣時 Full GC 所用的時間(單位秒)

GCT 從應用程序啟動到采樣時用於垃圾回收的總時間(單位秒),它的值等於YGC+FGC

jstack 用於打印出給定的java進程ID或core file或遠程調試服務的Java堆棧信息。

jstack 25211 > 25211.txt 將當前堆棧信息輸出到文件。

參考:https://www.jianshu.com/p/341bc031ea2b

Java工程師常用Linux命令