原創:小姐姐味道(微信公衆號ID:xjjdog),歡迎分享,轉載請保留出處。
做爲一個javaer,我之前寫過不少關於Linux的文章。但通過多年的觀察,發現其實對於大部分人,有些東西壓根就用不着。用的最多的,就是到線上排查個問題而已,這讓人非常苦惱。那麼,咱們就將範圍再縮小一下。java
最有用系列:linux
《 Linux上,最經常使用的一批命令解析(10年精選)》程序員
《Linux生產環境上,最經常使用的一套「vim「技巧》面試
《Linux生產環境上,最經常使用的一套「Sed「技巧》shell
《Linux生產環境上,最經常使用的一套「AWK「技巧》apache
Linux
命令好像還真很多,根本緣由就是軟件多,也有像ag
這樣的命令想替代grep
,但大多數命令古老而堅挺。不是由於這些軟件設計的有多好,緣由是一些軟件最開始入駐了系統,時間久了,就變成了一種約定,這種習慣改變代價太大,就像把全部鍵盤的L
和F
換一下同樣。緩存
這片文章假定你已經瞭解大多數Linux命令,並瞭解操做系統的基本元素。若是你如今瞭解的命令還不足10個,下面的內容就不用看了。除了最基本的東西,本文列出一些對你的面試最多見的最能加分的地方,有些組合多是你沒見過的技巧。但本文僅僅是給出一個大體的輪廓和印象,爲之後的專題性考察點做一個序。bash
本文中出現的全部命令,應該熟記並熟練使用。服務器
首先對目前的Linux版本有個大致的印象,大致分Desktop版和Server版,已是百花齊放。
|
分隔,前面命令的輸出做爲後面命令的輸入,能夠串聯多個重定向
<
將文件作爲命令的輸入>
將命令的輸出輸出到文件>>
將命令的輸出追加到文件echo $SHELL
能夠看到當前用戶的shell,對應的配置文件也要相應改變。好比.zshrc
,.bashrc
進入linux,咱們首先關注的是四個元素:內存,cpu,存儲,網絡。Linux提供了足夠的命令,讓你窺探它的每一個角落。接下來的命令都是些最經常使用的,無論精通不精通,想不起來要打屁股。
top
查看cpu的load,使用shift+p按照cpu排序。須要瞭解wa,us等都是什麼意思uptime
查看系統啓動時間和load,load是什麼意思呢?什麼算是系統過載?這是個高頻問題,別怪我沒告訴你ps
命令勃大莖深,除了查進程號外,你還須要知道R、S、D、T、Z、<、N狀態位的含義top
和ps
不少功能是相通的,好比watch "ps -mo %cpu,%mem,pid,ppid,command ax"
至關於top的進程列表;top -n 1 -bc
和ps -ef
的結果類似。kill
殺死進程。對java來講,須要關注kill -9
、kill -15
、kill -3
的含義,kill的信號太多了,能夠用kill -l
查看,搞懂大多數信號大有裨益。&
符號在後臺執行,好比tail -f a.log &
。jobs
命令能夠查看當先後臺的列表,想恢復的話,使用fg
回到幕前。這都是終端做業,當你把term
關了你的後臺命令也會跟着消失,因此想讓你的程序繼續執行的話,須要nohup
命令,此命令須要牢記free -m
命令,瞭解free、used、cached、swap各項的含義cat /proc/meminfo
查看更詳細的內存信息slabtop
用來顯示內核緩存佔用狀況,好比遍歷大量文件形成緩存目錄項。曾在生產環境中遇到因執行find /
形成dentry_cache
耗盡服務器內存。vmstat
命令是我最喜歡也最經常使用的命令之一,能夠以最快的速度瞭解系統的運行情況。每一個參數的意義都要搞懂。df -h
查看系統磁盤使用概況who
命令發現女神正在終端上,能夠求愛網絡方面推薦安裝體驗一下kaliLinux,上面的工具會讓你high到極點。
linux的命令頗有意思,除了各類stat來監控狀態,也有各類trace來進行深刻的跟蹤,也有各類top來統計資源消耗者,也有各類ls來查看系統硬件如lsblk、lsusb、lscpi。基本上跟着你的感受走,就能找到相應的工具,由於約定是系統中最強大的導向。
Linux有個比較另類的目錄/proc
,承載了每一個命令的蹂躪。像sysctl
命令,就是修改的/proc/sys
目錄下的映射項。不信看看find /proc/sys -type f | wc -l
和sysctl -a| wc -l
的結果是否是很像?
/proc文件系統是一個僞文件系統,它只存在內存當中,而不佔用外存空間。只不過以文件系統的方式爲訪問系統內核數據的操做提供接口。系統的全部狀態都逃不過它的火眼金睛。例如:
cat /proc/vmstat
看一下,是否是和vmstat
命令的輸出很像?cat /proc/meminfo
是否是最全的內存信息cat /proc/slabinfo
這不就是slabtop
的信息麼cat /proc/devices
已經加載對設備們cat /proc/loadavg
load avg原來就躺在這裏啊cat /proc/stat
全部的CPU活動信息ls /proc/$pid/fd
靜靜地躺着lsof
的結果通常排查問題也是圍繞着內存cpu等幾個元素去排查。下圖是一張大致的排查故障或者性能問題的過程,看圖,很少說。
下面舉例從具體應用場景來講明各類命令的組合應用,此類場景數不勝數,須要我的積累。但強烈建議將sed和awk練的熟練一些。
獲取進程中佔用CPU最高的線程,計爲n。
top -H -p pid
,肉眼觀察之ps -mo spid,lwp,stime,time,%cpu -p pid
printf 0x%x n
jstack -l pid| grep spid -A 100
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -n -k 1 -r
首先使用netstat查看列表,使用'awk'截取第六列,使用uniq
進行統計,並對統計結果排序。固然,也能夠這樣。netstat -ant | awk '{arr[$6]++}END{for(i in arr){print arr[i]" "i }}' | sort -n -k 1 -r
這和「分析apache日誌,給出當日訪問ip的降序列表」是同樣的問題。
首先要了解/proc/$pid/smaps裏有咱們所須要的各類信息,其中Swap字段便是咱們所須要的。只要循環遍歷一下便可。
for i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'` ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps ;done |sort -k2nr
最後,附上http://www.brendangregg.com/ 的大圖一張
軟件領域有兩種人才,一種是工程型的,一種是研究型的。在Linux領域裏,相對於搞內核研究的來講,搞命令行的就屬於工程型。工程型也有他本身的苦衷,好比,背誦命令就挺痛苦的,通常來講不太推薦背誦,第一覆蓋的面不廣,第二記的快忘的也快,浪費腦細胞。牛逼的記法就是用,用時間來沖淡煙雲,見微知著,並體驗其中的喜悅。愛她並每天抱她上牀,真愛才成。
做者簡介: 小姐姐味道 (xjjdog),一個不容許程序員走彎路的公衆號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高併發世界,給你不同的味道。個人我的微信xjjdog0,歡迎添加好友,進一步交流。