Linux這麼多命令,通常會讓初學者望而生畏。下面是我結合日常工作,以及在公司的內部培訓中,針對對Linux不是很熟悉的同學,精選的一批必須要搞懂的命令集合。

任何一個命令其實都是可以深入的,比如tail -ftail -F的區別。我們不去關心,只使用最常見的示例來說明。本文不會教你具體的用法,那是搶man命令的飯碗。這只是個引導篇,力求簡潔。

學習方式:多敲多打,用條件反射替代大腦記憶—如果你將來或者現在要用它來喫飯的話。 其中,也有一些難啃的骨頭,關注小姐姐味道微信公眾號,我們一起用鋒利的牙齒,來把它嚼碎。

內容:

? 目錄操作

? 文本處理

? 壓縮

? 日常運維

? 系統狀態概覽

? 工作常用

目錄操作

工作中,最常打交道的就是對目錄和文件的操作。linux提供了相應的命令去操作他,並將這些命令抽象、縮寫。

基本操作

可能是這些命令太常用了,多打一個字元都是罪過。所以它們都很短,不用阿拉伯數字,一個剪刀手就能數過來。

看命令。

mkdir 創建目錄 make dir

cp 拷貝文件 copy

mv 移動文件 move

rm 刪除文件 remove

例子:

# 創建目錄和父目錄a,b,c,d

mkdir -p a/b/c/d

# 拷貝文件夾a到/tmp目錄

cp -rvf a/ /tmp/

# 移動文件a到/tmp目錄,並重命名為b

mv -vf a /tmp/b

# 刪除機器上的所有文件

rm -rvf /

漫遊

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、bzip2、zip、rar等,7z這種用的相對較少。

.tar 使用tar命令壓縮或解壓

.bz2 使用bzip2命令操作

.gz 使用gzip命令操作

.zip 使用unzip命令解壓

.rar 使用unrar命令解壓

最常用的就是.tar.gz文件格式了。其實是經過了tar打包後,再使用gzip壓縮。

創建壓縮文件

tar cvfz archive.tar.gz dir/

解壓

tar xvfz. archive.tar.gz

快去弄清楚它們的關係吧。

日常運維

開機是按一下啟動按鈕,關機總不至於是長按啟動按鈕吧。對了,是shutdown命令,不過一般也沒許可權-.-!。passwd命令可以用來修改密碼,這個許可權還是可以有的。

mount

mount命令可以掛在一些外接設備,比如u盤,比如iso,比如剛申請的ssd。可以放心的看小電影了。

mount /dev/sdb1 /xiaodianying

chown

chown 用來改變文件的所屬用戶和所屬組。

chmod 用來改變文件的訪問許可權。

這兩個命令,都和linux的文件許可權777有關。

示例:

# 毀滅性的命令

chmod 000 -R /

# 修改a目錄的用戶和組為 xjj

chown -R xjj:xjj a

# 給a.sh文件增加執行許可權(這個太常用了)

chmod a+x This is a premium name

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

End

不要覺得複雜,命令是有限的,但激情無限;都會也不要驕傲,一個vim就夠折騰一輩子。捷徑就是總結,深入只有探索。白馬過隙,終會行雲流水,手到擒來。

物是人非,年華易老。唯有時光,不會辜負。


推薦閱讀:
相關文章