更多精彩文章。java
《微服務不是所有,只是特定領域的子集》mysql
這麼多監控組件,總有一款適合你nginx
《程序員畫像,十年沉浮》vim
最有用系列:centos
《Linux生產環境上,最經常使用的一套「vim「技巧》bash
《Linux生產環境上,最經常使用的一套「Sed「技巧》服務器
Linux這麼多命令,一般會讓初學者望而生畏。下面是我結合平常工做,以及在公司的內部培訓中,針對對Linux不是很熟悉的同窗,精選的一批必需要搞懂的命令集合。
任何一個命令其實都是能夠深刻的,好比tail -f
和tail -F
的區別。咱們不去關心,只使用最多見的示例來講明。本文不會教你具體的用法,那是搶man
命令的飯碗。這只是個引導篇,力求簡潔。
學習方式:多敲多打,用條件反射替代大腦記憶--若是你未來或者如今要用它來吃飯的話。 其中,也有一些難啃的骨頭,關注小姐姐味道微信公衆號,咱們一塊兒用鋒利的牙齒,來把它嚼碎。
內容:
✔ 目錄操做
✔ 文本處理
✔ 壓縮
✔ 平常運維
✔ 系統狀態概覽
✔ 工做經常使用
工做中,最常打交道的就是對目錄和文件的操做。linux提供了相應的命令去操做他,並將這些命令抽象、縮寫。
多是這些命令太經常使用了,多打一個字符都是罪過。因此它們都很短,不用阿拉伯數字,一個剪刀手就能數過來。
例子:
# 建立目錄和父目錄a,b,c,d
mkdir -p a/b/c/d
# 拷貝文件夾a到/tmp目錄
cp -rvf a/ /tmp/
# 移動文件a到/tmp目錄,並重命名爲b
mv -vf a /tmp/b
# 刪除tmp目錄的全部文件
rm -rvf /tmp/
複製代碼
linux上是黑漆漆的命令行,依然要面臨人生三問:我是誰?我在哪?我要去何方?
ls
命令可以看到當前目錄的全部內容。ls -l
可以看到更多信息,判斷你是誰。
pwd
命令可以看到當前終端所在的目錄。告訴你你在哪。
cd
假如你去錯了地方,cd命令可以切換到對的目錄。
find
find命令經過篩選一些條件,可以找到已經被遺忘的文件。
至於要去何方,可能就是主宰者的意志了。
這是是很是很是加分的技能。get到以後,也能節省更多時間來研究面向對象。小姐姐味道已經輸出了「最經常使用的vim、sed、awk技巧系列」。下面附上連接。
《Linux生產環境上,最經常使用的一套「vim「技巧》
《Linux生產環境上,最經常使用的一套「Sed「技巧》
《Linux生產環境上,最經常使用的一套「AWK「技巧》
cat
最經常使用的就是cat
命令了,注意,若是文件很大的話,cat命令的輸出結果會瘋狂在終端上輸出,能夠屢次按ctrl+c
終止。
# 查看文件大小
du -h file
# 查看文件內容
cat file
複製代碼
less
既然cat有這個問題,針對比較大的文件,咱們就可使用less
命令打開某個文件。 相似vim,less能夠在輸入/
後進入查找模式,而後按n
(N)向下(上)查找。
有許多操做,都和vim相似,你能夠類比看下。
tail
大多數作服務端開發的同窗,都瞭解這麼命令。好比,查看nginx的滾動日誌。
tail -f access.log
複製代碼
tail命令能夠靜態的查看某個文件的最後n行,與之對應的,head命令查看文件頭n行。但head沒有滾動功能,就像尾巴是往外長的,不會反着往裏長。
tail -n100 access.log
head -n100 access.log
複製代碼
sort和uniq常常配對使用。 sort可使用-t
指定分隔符,使用-k
指定要排序的列。
下面這個命令輸出nginx日誌的ip和每一個ip的pv,pv最高的前10
# 2019-06-26T10:01:57+08:00|nginx001.server.ops.pro.dc|100.116.222.80|10.31.150.232:41021|0.014|0.011|0.000|200|200|273|-|/visit|sign=91CD1988CE8B313B8A0454A4BBE930DF|-|-|http|POST|112.4.238.213
awk -F"|" '{print $3}' access.log | sort | uniq -c | sort -nk1 -r | head -n10
複製代碼
grep
grep用來對內容進行過濾,帶上--color
參數,能夠在支持的終端能夠打印彩色,參數n
則輸出具體的行數,用來快速定位。
好比:查看nginx日誌中的POST請求。
grep -rn --color POST access.log
複製代碼
推薦每次都使用這樣的參數。
若是我想要看某個異常先後相關的內容,就可使用ABC參數。它們是幾個單詞的縮寫,常常被使用。 A after 內容後n行 B before 內容前n行 C count? 內容先後n行
就像是這樣:
grep -rn --color Exception -A10 -B2 error.log
複製代碼
diff
diff命令用來比較兩個文件是否的差別。固然,在ide中都提供了這個功能,diff只是命令行下的原始折衷。對了,diff和patch仍是一些平臺源碼的打補丁方式,你要是不用,就pass吧。
爲了減少傳輸文件的大小,通常都開啓壓縮。linux下常見的壓縮文件有tar、bzip二、zip、rar等,7z這種用的相對較少。
最經常使用的就是.tar.gz
文件格式了。實際上是通過了tar打包後,再使用gzip壓縮。
建立壓縮文件
tar cvfz archive.tar.gz dir/
複製代碼
解壓
tar xvfz. archive.tar.gz
複製代碼
快去弄清楚它們的關係吧。
開機是按一下啓動按鈕,關機總不至因而長按啓動按鈕吧。對了,是shutdown命令,不過通常也沒權限-.-!。passwd命令能夠用來修改密碼,這個權限仍是能夠有的。
mount /dev/sdb1 /xiaodianying
複製代碼
chown
chown
用來改變文件的所屬用戶和所屬組。
chmod
用來改變文件的訪問權限。
這兩個命令,都和linux的文件權限777有關。
示例:
# 毀滅性的命令
chmod 000 -R /
# 修改a目錄的用戶和組爲 xjj
chown -R xjj:xjj a
# 給a.sh文件增長執行權限(這個太經常使用了)
chmod a+x a.sh
複製代碼
yum
假定你用的是centos,則包管理工具就是yum。若是你的系統沒有wget命令,就可使用以下命令進行安裝。
yum install wget -y
複製代碼
systemctl
固然,centos管理後臺服務也有一些套路。service
命令就是。systemctl
兼容了service
命令,咱們看一下怎麼重啓mysql服務。 推薦用下面這個。
service mysql restart
systemctl restart mysqld
複製代碼
對於普通的進程,就要使用kill命令進行更加詳細的控制了。kill命令有不少信號,若是你在用kill -9
,你必定想要了解kill -15
以及kill -3
的區別和用途。
su
su用來切換用戶。好比你如今是root,想要用xjj用戶作一些勾當,就可使用su切換。
su xjj
su - xjj
複製代碼
-
可讓你乾淨純潔的降臨另外一個帳號,不出意外,推薦。
登錄一臺linux機器,有些命令可以幫助你快速找到問題。這些命令涵蓋內存、cpu、網絡、io、磁盤等。如須要更多瞭解,參考五件套。比較高階一些。
Linux之《荒島餘生》(一)準備篇
Linux之《荒島餘生》(二)CPU篇
Linux之《荒島餘生》(三)內存篇
Linux之《荒島餘生》(四)I/O篇
Linux之《荒島餘生》(五)網絡篇
uname uname命令能夠輸出當前的內核信息,讓你瞭解到用的是什麼機器。
uname -a
複製代碼
ps
ps命令可以看到進程/線程狀態。和top有些內容重疊,經常使用。
# 找到java進程
ps -ef|grep java
複製代碼
top 系統狀態一覽,主要查看。cpu load負載、cpu佔用率。使用內存或者cpu最高的一些進程。下面這個命令能夠查看某個進程中的線程狀態。
top -H -p pid
複製代碼
free
top也能看內存,但不友好,free是專門用來查看內存的。包括物理內存和虛擬內存swap。
df
df命令用來查看系統中磁盤的使用量,用來查看磁盤是否已經到達上限。參數h
能夠以友好的方式進行展現。
df -h
複製代碼
ifconfig
查看ip地址,不囉嗦,替代品是ip addr
命令。
ping
至於網絡通不通,可使用ping來探測。(不包括那些禁ping的網站)
netstat 雖然ss命令能夠替代netstat了,但現實中netstat仍然用的更普遍一些。好比,查看當前的全部tcp鏈接。
netstat -ant
複製代碼
此命令,在找一些本地起了什麼端口
之類的問題上,做用很大。
還有一些在工做中常常會用到的命令,它們的出現頻率是很是高的 ,都是些熟面孔。
export
不少安裝了jdk的同窗找不到java命令,export
就能夠幫你辦到它。export用來設定一些環境變量,env命令能看到當前系統中全部的環境變量。好比,下面設置的就是jdk的。
export PATH=$PATH:/home/xjj/jdk/bin
複製代碼
有時候,你想要知道所執行命令的具體路徑。那麼就可使用whereis命令,我是假定了你裝了多個版本的jdk。
crontab
這就是linux本地的job工具。不是分佈式的,你要不是運維,就不要用了。好比,每10分鐘提醒喝茶上廁所。
*/10 * * * * /home/xjj/wc10min
複製代碼
date date命令用來輸出當前的系統時間,可使用-s參數指定輸出格式。但設置時間涉及到設置硬件,因此有另一個命令叫作hwclock
。
xargs xargs讀取輸入源,而後逐行處理。這個命令很是有用。舉個栗子,刪除目錄中的全部class文件。
find . | grep .class$ | xargs rm -rvf
#把全部的rmvb文件拷貝到目錄
ls *.rmvb | xargs -n1 -i cp {} /mount/xiaodianying
複製代碼
linux是一個多做業的網絡操做系統,因此網絡命令有不少不少。工做中,最常和這些打交道。
ssh
這個,就不囉嗦了。你必定但願瞭解ssh隧道
是什麼。你要是想要詳細的輸出過程,記得加參數-v
。
scp
scp用來進行文件傳輸。也能夠用來傳輸目錄。也有更高級的sftp
命令。
scp a.txt 192.168.0.12:/tmp/a.txt
scp -r a_dir 192.168.0.12:/tmp/
複製代碼
wget
你想要在服務器上安裝jdk,不會先在本地下載下來,而後使用scp傳到服務器上吧(有時候不得不這樣)。wget命令可讓你直接使用命令行下載文件,並支持斷點續傳。
wget -c http://oracle.fuck/jdk2019.bin
複製代碼
mysql
mysql應用普遍,並非每一個人都有條件用上navicat
的。你須要瞭解mysql的鏈接方式和基本的操做,在異常狀況下才能遊刃有餘。
mysql -u root -p -h 192.168.1.2
複製代碼
不要以爲複雜,命令是有限的,但激情無限;都會也不要驕傲,一個vim就夠折騰一生。捷徑就是總結,深刻只有探索。白馬過隙,終會行雲流水,手到擒來。
物是人非,年華易老。惟有時光,不會辜負。