教老婆學Linux運維(二)Linux常用命令指南【上】
- 2019 年 10 月 8 日
- 筆記
教老婆學Linux(二)Linux常用命令指南【上】
作者:姚毛毛的博客
tips:文章太長,分兩篇發出,本篇發前三個章節: 1、文件及目錄操作; 2、文件查看及編輯 3、文件查找及統計。
一、概述
1.1寫在前面 & 學習指南
本文目的:主要是作為一張給初學者入門Linux的學習地圖。
所以我只會講一些我們生產過程中常用的命令及操作,對於命令的一些偏門用法本文會一帶而過甚至不講。
對於Linux命令詳解可以參考網站
https://man.linuxde.net/。
實體書的話推薦《跟老男孩學linux運維-核心系統命令實戰》。
1.2 常用命令概述
我將Linux下的常用命令分為幾類:
1、文件及目錄操作
2、文件查看及編輯
3、文件查找及統計
4、文件解壓與壓縮
5、用戶與文件權限
6、資源監控與管理
為什麼列的幾個章節都是跟文件相關的?
因為在Linux中一切皆是文件,cpu、內存、磁盤、外設、驅動等等,都是以文件形式存在我們的Linux系統中。
1.3 常用快捷鍵
在Linux下有幾個我操作命令的快捷鍵,基本上我們會在與Linux打交道時時時刻刻都用到,即:
enter 執行命令。輸入命令後記得回車,命令才生效。
tab 自動補全。在寫文件夾路徑的時候,打出首字母直接將後續名稱補全,遇到首字母相同的文件夾會展示出列表
↑ 使用方向鍵的up鍵,可以找回上個執行的命令,並且可以一直向上查找歷史命令,想查看所有歷史命令使用 history命令
ctrl + c 中斷命令。在linux上執行命令遇到卡死、報錯等執行不下去又無法退出的情況,請使用此命令。
ctrl + z 中斷命令。一般ctrl + c 無法進行中斷操作的時候可以嘗試下此命令。
ctrl + insert 複製。複製選中內容。
shift + insert 粘貼。粘貼剪切板中內容。
ctrl + Backspace 向前刪除。
在輸入命令時,有時退格鍵Backspace無法刪除字符,它本身被當做一個字符輸入了,使用此命令進行退格刪除操作
delete 向後刪除。
另外在查看滾動文件時有兩個好用的命令,一般在查看日誌文件時使用:
ctrl + s 停止滾屏
ctrl + q 恢復滾屏
1.4 幫助命令
man 全方位的幫助命令,使用方式為 man [命令],如
man ls
使用 :q 命令退出幫助界面
help 常用幫助命令,使用方式為 [命令] –help,如
ls --help
對於本文出現命令,還有一些其他用法,感興趣可以自行探索。
1.5 歷史命令查看
history # 查看已經敲過的命令
可用方向鍵上下鍵翻頁曾敲出的linux命令。
1.5 注意事項
1、本文使用Linux環境為centOs 7,其他發行版可能會有輕微不一致情況。Mac的命令行也同樣如此。
2、在linux中所有命令都要使用空格隔開,如cd xx文件,在第二章節學習時需注意。
3、命令一般都有參數,可使用man或help查看其參數作用。參數寫法一般為-開頭。如ls -l查看當前目錄下所有文件。rm -f xxx文件,刪除xxx文件,-f參數含義為如果沒有這個文件,也不提示。
二、常用命令
2.1 文件及目錄操作
2.1.1 路徑切換的好基友:cd、ls、ll、pwd
在linux中,cd命令是永遠陪伴我們的小夥伴,也是所有基礎操作的王者命令,不是「給你一張過去的cd」,而是路徑切換,即Change Directory。
ls 、ll則是跟着 cd 的一對好伴侶,使用它們可以看看當前文件夾下有哪些文件和目錄。為什麼可以這麼屌?因為他們是list嘛,了解下。
為啥ll也是list?因為它是ls -l的馬甲呀。
如果cd來cd去的,已在雲深不知處,不識廬山真面目,且用pwd來一窺迷徑,看看自己的絕對路徑,即Print Working Directory。
以下是命令簡釋:
cd / # 進入主機根目錄 cd ~ # 進入用戶根目錄 cd .. # 返回爸爸(上級)目錄 cd ../.. # 返回爺爺(上級的上級)目錄,可以以此類推。 cd - # 返回上次目錄 cd /yaomaomao/wfy/123/456 # 使用絕對路徑,從根目錄開始,一層層找到456這個目錄。/ 為根目錄 ls # 橫向展示當前目錄下所有文件及目錄 ls -a # 顯示隱藏文件 + ls命令展示的內容 ls -l # 等同於ll,一般直接用ll命令。 ll # 縱向展示當前目錄下所有文件及目錄,及權限信息 ll -a # 顯示隱藏文件 + ll命令展示的內容 ll -h # 將文件大小從單位bit轉換為合適的單位展現,如kb、Mb、Gb,根據實際大小來。 # -h 這個參數在linux中很有用,基本所有需要統計大小的命令中都可以用它,如df -h, du -h,free -h。 pwd # 查看當前所在路徑
2.1.2 文件創建好夥伴:touch、mkdir
在linux中,創建文件有很多方法,但是touch是最簡潔的一個,輕輕一碰,一個空文件產生了。
而想創建一個目錄,則是mkdir,即make directory。
touch wfy.txt # 在當前目錄下創建一個wfy.txt空文件 touch /var/www/yaojiaxiaoyuan{01..10}.html # 批量創建空文件
mkdir [目錄名] # 在當前目錄下創建一個空目錄 mkdir yaomaomao wfy 123 456 # 多個目錄同時創建,目錄間以空格隔開,創建同級的多個目錄 # 如果想要創建一個多級子目錄怎麼辦,那就使用下面的mkdir -p。 mkdir -p /yaomaomao/wfy/123/456 # 多層目錄同時創建,一次性在當前目錄下創建yaomaomao目錄,在yaomaomao目錄下創建wfy目錄,在wfy目錄下創建123目錄,在123目錄下創建456目錄。
使用 mkdir -p /yaomaomao/wfy/123/456 創建成功了,還記得上面的命令嗎?cd進去看看。
cd yaomaomao/wfy/123/456
再pwd看下路徑,然後touch個文件看下
touch yaomaomao.txt ll # 查看有沒有創建成功
2.1.3 複製、移動和刪除:cp、mv、rm
此cp非彼「CP」,因為我們不是大寫的,飯圈女孩請走開,我們只是copy的縮寫而已。
mv 即 move,這個很好理解吧。
rm顧名思義就是remove咯。當然,這個命令請謹慎使用。尤其不要用 rm -rf /*。如果你沒忍住打了這個命令,ok,等着重裝系統吧。
cp [待拷貝文件名] [拷貝後文件名] # 將前者拷貝一份出來,變為後者。 cp [待拷貝目錄] [目標目錄] # 將前者拷貝一份出來,變為後者。文件如此,目錄也是如此。 # 但是有時候目錄下還有子目錄,這個命令就不好用了,得用下面這個命令,cp -r/R。 cp -r [待拷貝目錄] [目標目錄] # -r/R 是什麼意思?即遞歸。無限尋找當前目錄下所有子目錄。傾其所有,拷貝到目標路徑下。 mv [待拷貝文件名] [拷貝後文件名] # 將前者的文件名改為後者的文件名 mv [待移動目錄] [目標目錄] # 將前者的文件名改為後者的文件名
好了,說完cp、mv,我們來看看rm。rm使用守則:
千萬不要單獨用星號符 「」,更不要用斜杠加星 「/」
千萬不要單獨用星號符 「」,更不要用斜杠加星 「/」
千萬不要單獨用星號符 「」,更不要用斜杠加星 「/」
重要的事說三遍。
常用命令如下
rm [文件名] # 刪除文件。文件不存在會有報錯提示。 rm -f [文件名] # 刪除文件。-f,忽略信息,不提示。 rm -rf [目錄名] # 遞歸刪除目錄 rm -rf [文件1] [文件2] [目錄1] [目錄2] # 刪除多個文件和目錄 rm -rf *.log # 刪除當前目錄所有.log後綴結尾的文件 rm -i *.log # 刪除所有log文件時會一一詢問,這個命令一般不會用到,但有些情況下可能會需要。 # 詢問時,按 y 確認刪除,n 不刪除。
-r/R 參數,還記得上面的cp -r/R嗎,也是遞歸刪除。
2.2 文件查看與編輯
2.2.1 合併文件好幫手:cat
cat [文件名] # 輸出文件所有內容到屏幕上 cat [文件1] [文件2] # 輸出文件1、文件2所有內容到屏幕上 cat [文件1] [文件2] > [文件3] # 將文件1、文件2合併,輸出到文件3中,如果沒有文件3會自動生成一個新的文件3 cat -n [文件名] # 輸出文件內容時加上行號 cat -A [文件名] # 輸出文件內容時顯示所有隱藏字符
cat的特點就是一次性將所有內容輸出到屏幕上,用得最頻繁的一大功能就是合併文件,並輸出到新文件中。因為如果只是查看的話,有很多其他工具都可以查看。
另外cat命令比較常用的還有和管道符「|」一起來用。用來作為管道符的輸入內容,如 cat xxx.log | grep ‘我要找這個單詞’,這個後續說道文件查找時再說。
2.2.2 觀察日誌小能手:tail
tail 一般用來查看日誌使用,顯示文件最新追加的內容
tail -f xxx.log # 不停地追加顯示log文件的最後10行 tail -fn1000 xxx.log # 加上-n參數,不停地追加顯示log文件的最後1000行
tail也可以同時顯示多個文件內容,但是不推薦使用,如
tail -fn1000 xxx.log xxx2.log
如果顯示文件不止一個,則在顯示的每個文件前面加一個文件名標題

與tail 相對的還有個head,是從開頭顯示文件內容,一般用法為 head -n [文件名],用法與tail差不多。
2.2.3 編輯文件我拿手:vi/vim
要說在linux中最強大的編輯器是什麼,10個人有10個人會說,是vim。
那麼,我們這裡說的vi跟vim啥區別,嗯,其實沒啥區別,vim就是vi的增強版。喜歡黑白的用vi,喜歡彩色的用vim就行了。
vim用起來很逆天,但只是個工具而已,不必那麼極客,會一些常用命令就好了。
好了,我們先用 vim [文件名] 進入文件吧。
vim有幾種模式,即normal模式、編輯模式、命令模式。
哦,還有個visual模式,不常用,normal模式下按v可以進入,沒啥用。
normal模式顧名思義是正常模式,我更願意稱呼為無狀態模式,使用vi/vim [文件] 進入文件時,默認就是這個模式,在進入其他模式後,可以使用 Esc 鍵返回這個模式。
vim [文件名] # 默認進入normal模式
normal模式下按下i、a、o、s,進入編輯模式,使用頻度一般也是這個順序。編輯模式下,輸入內容就跟我們windows下打開寫字板操作沒什麼區別。
i # insert,光標當前字符前插入 a # append, 光標當前字符後插入 o # 下一行插入 s # 不常用,刪除當前字符並插入
此外,進入編輯模式還有這幾個鍵的大寫模式I、A、O、S,不常用,具體可以自行探索。
光標移動
← # 向左移動 ↓ # 向下移動 ↑ # 向上移動 → # 向右移動 ctrl + f # 向下翻頁 ctrl + b # 向上翻頁 0 # 行首 $ # 行尾 space # 空格鍵,一直向下移動一個字符。跟左方向鍵(→)的區別是,左方向鍵(→)只能在本行移動。
如果覺得上下左右方向鍵不方便,還要移動手臂,可以在normal模式下,使用h、j、k、l鍵依次進行左、下、上、右操作。
退出、保存,在normal模式下使用冒號(:) 進入底線命令模式
:q # 退出不保存 :q! # 強制退出不保存 :wq # 退出保存 :wq! # 強制退出保存
你可能已經發現了,在vim中,感嘆號(!)就是強制的意思。
最基本的文本操作說完了,如果vim僅僅是這樣,那便當不上linux上最牛逼的文本編輯器這一稱號了。那麼下面說下提升咱們文本操作效率的一些快捷鍵。
normal模式下的一些快捷鍵
G # 大寫g,移動到文末。 nG # n,數字,代表行號。100G則是移動到第100行。1G則是行首。 gg # 移動到文首。同樣效果還有1G。 H、M、L # 分別代表high、middle、low,即移動當前屏幕頁的最上方、中間、最下方。 dd # 刪除當前行,可連續按d刪除。 ndd # n,數字,代表行號。ndd,刪除當前行及之後的多少行,如100dd,刪除當前及之後的100行 u # 撤銷操作。如果上面使用dd刪除錯了,可按一下u進行撤銷。編輯模式下撤銷需要按Esc進入normal模式,按 u 撤銷。 y 進入複製模式。 yy # 複製當前行。 nyy # n,數字,代表行號。聰明的你相比已經知道了,如16yy,即複製當前行至16行的內容。 p # 粘貼當前vim剪切板中內容。 yyp # 常用組合鍵,即在上面使用yy複製後,可立即使用p粘貼,或者移動到指定地點後按個 p,即把剛才的內容粘貼過來了。 ggyG # 全選複製。看這個命令,到行首,按y進入複製模式,再移動光標到文末,然後可以按p粘貼了。當然,如果你的光標已經移動到相應位置,可以直接ggyGp。 # 這裡有個缺陷,這樣的複製內容只能在vim中進行粘貼,一旦退出vim,剪切板中則無此內容了。那怎麼辦呢? 看下面這個命令。 gg"*yG、gg"+yG # 這兩個全選複製的命令,可以將內容帶出到vim之外。當然,一般用不到,只有某些特殊情況下會用到。
說完移動、刪除、複製、粘貼,再來說說查找。normal模式下輸入 / 或 ? 。
/yaomaomao # 即向下尋找yaomaomao這個字符串。按n會一直向下找。 ?姚毛毛 # 即向上尋找 姚毛毛 這個字符串。按n會一直向上找。 n、N # 配合/、?則會很有趣,/ + n,一直向下找,/ + N,一直向上找, ? + n,一直向上找, ? + N,一直向下找。
替換,則是要進入底線命令模式了,上面說過了,即在normal模式下使用冒號 : 進入此模式。
:%s/old/new/g # 全局替換,將old字符替換成new
如果不想全局替換,而是指定行數,可以使用此命令:
:[n1],[n2]s/old/new/g
如下圖所示,將1到10行的灰灰替換成了小力。
從第N行到最後一行的替換怎麼做?相信聰明的你應該已經想到了:
:[n1],%s/old/new/g
另外命令模式下還有些有趣的命令,如:
:set number # 顯示行號 :set nonumber # 不顯示行號 :set nu :set nonu # 同上,nu即是number的簡寫 :set ff # 查看文件格式,可能會展示foramt=dos,在windows下編輯然後上傳到linux下的文件可能會存在一些格式問題,所以需要轉換下文本格式,即下面的命令:set ff=unix :set ff=unix # 設置文件格式,ff即format, 即文件設置為unix。可以設置後再用:set ff命令再看下
此外還有諸如分割窗口【:split】、重載文件【:e!】等命令。
底線命令當然不只這麼幾種,如果還想要了解更多的命令,可以參考。
菜鳥教程的linux-vim教程https://www.runoob.com/linux/linux-vim.html。
及我剛剛推薦的linux命令大全https://man.linuxde.net/vi。
最後,咱們總結下幾種模式的切換:
1、vi/vim [fileName] --> normal模式 2、normal 下 輸入 i、a、o、s 鍵--> 編輯模式 3、normal 下 輸入冒號 : --> 底線命令模式 4、Esc退出到normal模式 5、:q :wq :q! :wq! 退出不保存/保存文件
哦,還有個 normal 下 輸入v 進入視圖模式,這個在以後的進階學習里可以說下,一般沒啥用。
2.2.4 vim小兄弟:more、less
說完vim,再來看看more與less,這是基於vim的一對好基友。
這兩個命令類似cat,不過是以一頁一頁的方式顯示閱讀。
more可以顯示百分比,一般從頭排查問題日誌可以用more。
而less則在查看大文件時有奇效,據說是部分加載到內存中。
先看看more
more [文件名] more -f [文件名] # 加參數f,-f 參數的含義為計算行數時,以實際上行數為準(有些單行字數太長的會被認為兩行或以上)
可以看到,more打開文件是能看到你當前查看文件的百分比的。
使用more查看文件或日誌,有些快捷命令可以提高我們的效率:
空格鍵 # 向下滾動一屏,f鍵效果一樣,但一般使用空格鍵,比較方便 b # 向上滾動一屏 = # 查看當前行號 :f # 輸出當前文件名 及 行號 q # 退出more命令, ctrl + c也可以退出
如果不用 -f 參數查看命令,可以試試來回用b、空格上下翻頁,會發現來回查看的內容可能不一樣。因為不用-f強制顯示行數,有些單行字數太長的會被認為兩行或以上。
more 還有個命令叫做指定行查看,即:
more +[num] [文件名] # 查看指定行號以後的內容 more -[num] [文件名] # 查看指定行號以前的內容,這個命令一般不用,主要用+num。這個命令如果用的話一般會作為導出使用。
示例為
more +1000 放學後.txt more -1000 放學後.txt
less的好處是查看文件之前不會加載整個文件,所以在查看大文件時有奇效。如果文件特別大,例如超過1G,可以使用less,提高效率。
less [文件名] # 基本查看命令 less -m [文件名] # 類似more命令,顯示百分比 less -N [文件名] # 顯示行號
與more 命令相似,less也有相同的快捷鍵,只是不能用ctrl + c退出
q # 退出less命令 d # 向下移動半屏 u # 向上移動半屏 j # 向下移動一行 k # 向上移動一行 空格鍵 # 向下滾動一屏,f鍵效果一樣,但一般使用空格鍵,比較方便 b # 向上滾動一屏 = # 輸出當前文件名 及 行號、百分比 : f # 輸出當前文件名 及 行號、百分比
並且less不只是more可以查看,還可以用使用vi編輯器的查找命令
/[查找字符] # 配合n鍵,從上往下查所有 ?[查找字符] # 配合n鍵,從下往下查所有
還記得vim的n和N嗎,一樣的效果。
2.2.5 我是外掛我驕傲,不打開文件也編輯:sed
文件查看與編輯終於到了最後一節了,這次來說說大殺器sed。
使用vim需要在文件內部編輯,有時只是想在文件底部添加一句話或一個參數,需要經歷
vim [文件] ->
G (移動到底部)->
o 下一行添加 ->
shift + insert(插入剪切板中內容)或自行編輯
這一整套步驟,比較繁瑣。
那有沒有輕便一點的方法呢?
sed (Stream Editor),你值得擁有。
Ps.其實還有個echo命令也有這個功能。
echo 「追加內容」 >> [文件名]
案例:
sed -i '$a 我是姚毛毛' 放學後utf-8.txt
在文件末尾追加了「我是姚毛毛」這串字符串。
如圖:
那麼,想在指定行或者每行前面或者後面都追加字符呢?
sed -i '20a 哦,我是姚毛毛20 append' 放學後utf-8.txt # 追加「哦,我是姚毛毛20 append」,在文件【放學後utf-8.txt】第20行字符下一行
如圖:
sed -i '20i 哦,我是姚毛毛20 insert' 放學後utf-8.txt # 插入「哦,我是姚毛毛20 insert」,在文件【放學後utf-8.txt】第20行字符上一行 sed -i 'a 我是姚毛毛 append' 放學後utf-8.txt # 追加「我是姚毛毛 append」,在文件【放學後utf-8.txt】每行字符下一行 sed -i 'i 我是妖生 insert' 放學後utf-8.txt # 插入「我是妖生 insert」,在文件【放學後utf-8.txt】每行字符上一行
所以,還有種簡單的追加字符法
sed -i '1i 哦,我是姚毛毛,在開頭 insert' 放學後utf-8.txt # 意思是第一行前插入字符 sed -i '9999a 哦,我是姚毛毛,在結尾 append' 放學後utf-8.txt # 意思是第9999行後追加字符
上面說的都是增。那增刪改查四兄弟的刪、改、查呢,sed也可以做嗎?
看了上面的內容,我們先小結下sed的基本格式:
sed [參數選項] [sed內置命令字符 更新內容] [輸入文件]
改,內置命令字符s:
sed 's/book/books/' file # 替換文本中的字符串 sed -n 's/test/TEST/p' file # -n選項和p命令一起使用表示只打印那些發生替換的行 sed -i 's/book/books/g' file # 直接編輯文件選項-i,會匹配file文件中每一行的第一個book替換為books
這裡特別注意的是參數-i,這個意思是直接修改文件內容。如果不用-i,可以試試,驗證下是不是只輸出到終端,而沒有實際修改文件內容。
如圖:
使用sed命令在第一行數據後添加了部分內容後,再用cat查看文件,文件內容並沒有改變。
刪,內置命令字符d:
sed '2d' wfy.txt # 刪除第2行。d為sed內置命令,2為行數
正如上面說的,如果不加-i,只是將刪除後內容輸出到終端,而沒有實際改變文件。那麼,加上-i試試呢?
sed -i '2d' wfy.txt
看,第2行是不是已經被刪掉了。
如果要刪除多行怎麼辦?
sed -i '1,3d' 放學後utf-8.txt # 刪除1到3行 sed -i '//sbin/nologin/d' passwd # 刪除不能登錄的用戶,千萬不要在我機器上執行,我的ftp用戶就是這個 sed -i '/^姚毛毛/,/$2019/d' passwd # 刪除以 「姚毛毛」 開頭一直到以 2019結尾的行
現在我們總結下sed常用的參數跟內置命令字符:
無參數,只顯示修改後內容在終端,不修改真實文件內容,一般可與管道符「|」一同使用作為輸入源。
參數 -i,必須品,加上此參數才能真正修改文件。
參數 -n,一般與內置命令字符p共用,顯示修改行。
內置命令字符 i、a,插入、追加。
內置命令字符 s、d,替換、刪除。
$代表文件末尾,^代表文件開頭。
作為shell三劍客之一(另外兩個是grep、awk),sed還有很強大的正則表達式功能,但是我列舉的是在一般運維中最常用的幾個功能。對sed感興趣,想深入研究的可以自行探索。
2.3 文件查找及統計
2.3.1 文件大小統計與排序:du、sort
2.3.1.1 du常用命令
du -sh # 統計當前文件夾內容總大小 du -sh [文件夾1] [文件1] # 統計當前目錄下的文件夾或文件大小 du -sh /usr/local # 顯示指定目錄大小 du -a # 顯示當前目錄下所有文件所佔空間(含隱藏文件) du -s # 顯示當前目錄總大小 du -h # 展示當前目錄下所有文件及目錄(包含子目錄下內容)大小,-h會換算成K、M、G等人類易讀結果 du -h * # 統計當前目錄下,非隱藏文件及目錄的大小 du -h --max-depth=1 [目錄] # 只顯示指定目錄下第一層目錄的大小 du -h --max-depth=2 [目錄] # 只顯示指定目錄第一、二層目錄的大小
圖示:
du -sh
統計當前文件夾內容總大小
du -sh
統計當前目錄下的文件夾或文件大小
du -sh /usr/local
顯示指定目錄大小
du -s
顯示當前目錄總大小
du -h
-h會換算成K、M、G等人類易讀結果
du -a
顯示當前目錄下所有文件所佔空間(含隱藏文件)
du -h –max-depth=1 /home/yao
只顯示指定目錄下第一層目錄的大小
du -h –max-depth=2 /home/yao
只顯示指定目錄第一、二層目錄的大小
du 常用參數總結:
-a或-all 顯示目錄中個別文件的大小。 -b或-bytes 顯示目錄或文件大小時,以byte為單位。 -c或--total 除了顯示個別目錄或文件的大小外,同時也顯示所有目錄或文件的總和。 -k或--kilobytes 以KB(1024bytes)為單位輸出。 -m或--megabytes 以MB為單位輸出。 -s或--summarize 僅顯示總計,只列出最後加總的值。 -h或--human-readable 以K,M,G為單位,提高信息的可讀性。
此外,還有些參數用以參考,一般用於區分軟硬鏈接才適用:
-x或--one-file-xystem 以一開始處理時的文件系統為準,若遇上其它不同的文件系統目錄則略過。 -L<符號鏈接>或--dereference<符號鏈接> 顯示選項中所指定符號鏈接的源文件大小。 -S或--separate-dirs 顯示個別目錄的大小時,並不含其子目錄的大小。 -X<文件>或--exclude-from=<文件> 在<文件>指定目錄或文件。 --exclude=<目錄或文件> 略過指定的目錄或文件。 -D或--dereference-args 顯示指定符號鏈接的源文件大小。 -H或--si 與-h參數相同,但是K,M,G是以1000為換算單位。 -l或--count-links 重複計算硬件鏈接的文件。
2.3.1.2 文件排序: du + sort + head 常用命令
du -a /home/yao | sort -n -r # 按照文件大小倒序排序(含隱藏文件)
du -h /home/yao | sort -n -r | head -n 10 # 非隱藏文件,篩選前10,可讀方式展現文件大小; # sort -n -r 也可以寫作 sort -rn; # -n:依照數值的大小排序; # -r:以相反的順序來排序;
du -h --max-depth=1 /home/yao | sort -n -r | head -n 10 # 指定目錄第一層,篩選前10,可讀方式展現文件大小
du -h --max-depth=1 /home/yao | sort -rn -o 'sort.txt' | head -n 10 # 使用sort -o 參數將排序結果存入指定文件
另外,sort還有些其他參數,例如根據文件名排序而不是大小。
# sort基本參數如下 -n:依照數值的大小排序; -r:以相反的順序來排序; -o<輸出文件>:將排序後的結果存入制定的文件; -b:忽略每行前面開始出的空格字符; -c:檢查文件是否已經按照順序排序; -f:排序時,將小寫字母視為大寫字母; -m:將幾個排序號的文件進行合併; # 以下幾個參數與 -n 排序方式互斥 -i:排序時,除了040至176之間的ASCII字符外,忽略其他的字符; -d:排序時,處理英文字母、數字及空格字符外,忽略其他的字符; -M:將前面3個字母依照月份的縮寫進行排序;
2.3.2 查找文件我最強:find
2.3.2.1 find查找常用命令示例
find / -name 'wfy.txt' # 從根目錄下開始查找文件wfy.txt find . -name '*fy.txt' # 當前目錄下,查找fy.txt後綴的文件 # 「.」表示當前目錄,"*"表示任意長度字符 find / -type f -size +500M # 從根目錄開始查找,500M以上文件 # / :根目錄 # . : 當前目錄 # -type f: f為普通文件類型,f改為d則是目錄文件,l則是符號鏈接文件,-type 還有其他參數,不在這裡一一列舉 # -size +500M :500MB以上 # 一般磁盤空間不夠,刪除垃圾文件時會使用到此命令 find . -type f -size +1k # 查找當前文件夾下超過1k的文件,注意k是小寫。 find . -type f -mtime -30 # 查找當前目錄下30天之內修改過的文件 # -mtime:代表修改時間,最常用,類似參數有-atime、-ctime # -atime:代表訪問時間,查看過就算 # -ctime:文件狀態改變時間 # -30:代表30天以內,30為n,數字自己填寫 # +30:30天以前 # 30:距今第30天 find /var/log/ -mtime +30 -name '*.log' # 查找指定目錄/var/log/ 下30天以前的log文件 find /etc ! -type f # 查找 /etc 目錄下不是普通文件的 文件 # "!":感嘆號,取反 find /etc ! -type l -mtime -30 # 查找/etc 目錄下不是符號鏈接文件,並在30天內被修改過的文件 find /etc -maxdepth 1 ! -type l -mtime -30 # 查找/etc 第一層目錄下不是符號鏈接文件的文件,並在30天內被修改過 # -maxdepth : 前面du學過,指定目錄層級,-maxdepth 1代表第1層,-maxdepth 2代表延伸到第二層
-maxdepth 可能有點不好理解,所以截了個示例圖
2.3.2.2 使用find 組合命令:統計與刪除
基本常用的find命令都已經講完了,再說下運維中可能常用的一個組合命令,利用find刪除N天以前的文件或日誌。
先用wc -l來統計下log數量,再刪除看看
find / -name '*.log' -mtime +300 | wc -l # 從根目錄下開始搜索300天之前的log文件,並統計數量 # 「|」:管道符,將前面查到的數據作為輸入源給後面的命令
第一種刪除方式:-exec
find / -name '*.log' -mtime +300 -exec rm {} ; # 查找30天以前的log文件,使用-exec加rm將其刪除 # 再使用上面的命令重新查看一次 find / -name '*.log' -mtime +300 | wc -l
第二種刪除方式:-ok
find / -name '*.log' -mtime +200 -ok rm {} ; # -ok : 詢問刪除,y刪除,n不刪除,回車默認不刪除
第三種刪除方式:xargs
依次執行查看結果
find / -name '*.log' -mtime +100 | wc -l find / -name '*.log' -mtime +100 | xargs rm -f # xargs : 命令傳遞參數過濾器,與管道符「|」一同使用,將前面的命令傳遞給後面的命令使用 find / -name '*.log' -mtime +100 | wc -l
2.3.2.3 find與xargs的組合使用
對於50天前的log文件進行詳情查看
find / -name '*.log' -mtime +50 | xargs ls -l # 利用xargs + ls -l 命令來進行文件的詳細屬性查看
移除50天前的文件
mkdir /logback # 創建根目錄下的 /logback文件夾 find / -name '*.log' -mtime +50 | xargs -i mv {} /logback # 將50天前的所有log文件移動到 /logback 文件夾下 # xargs -i + {},將前面查找到的文件都作為參數給mv命令執行 ls -l /logback # 查看 /logback 下所有文件詳情
2.3.2.4 find下xargs與exec的區別
區別一:
-exec,是將查找到的結果文件名逐個傳遞給後面的命令執行,文件多會導致效率低;
xargs,則是一次性傳遞,效率較高,並可使用-n參數控制傳遞文件個數。
區別二:
-exec,文件名有空格等特殊字符也照常處理;
xargs,處理特殊的文件名(例如文件名有空格)需要採用特殊的處理方式(find . -name "*edu" -pringt0| xargs -0 ls -l)
驗證區別一,示例如下:
find /logback -name '*.log' -exec echo yaomaomao {} ; find /logback -name '*.log' | xargs echo yaomaomao
可以看到使用-exec每次獲得一個文件輸出一次,xargs則只輸出了一行。
xargs還可以用-n參數控制每次輸出的文件個數
find /logback -name '*.log' | xargs -n5 echo yaomaomao
可以看到,每行輸出5個參數(文件名),不足的行輸出剩下的。
驗證區別二,示例如下:
touch yaomaomao.txt;touch "yaomaomao centOS 7";ll yaomaomao* # 小技巧:使用「;」分號可以一次性執行多個命令 # 注意:查看和創建帶有空格的文件時,使用引號括起來
find . -name "yaomaomao*" -exec ls -lh {} ; # 正常查找出來 find . -name "yaomaomao*" | xargs ls -lh # 可以看到使用此命令報找不到那個文件或目錄 find . -name "yaomaomao*" -print0 | xargs -0 ls -lh # 正常查找
其實find還有很多強大的功能,截兩張圖大家就知道了
這本書就是我開頭推薦的《核心系統命令實戰》。
2.3.3 shell三劍客之二:grep,字符查找有一手
2.3.3.1 grep 常用命令示例:
grep -n '不用' wfy.txt # 查找wfy.txt文件中含有「不用」的字符行 # -n 顯示行號 # -i 不區分大小寫 # -v 反向過濾 # -c 統計匹配行
grep -c '不用' wfy.txt # 統計包含「不用」字符行的行數 grep -v '不用' wfy.txt # 查找不包含「不用」的字符行
2.3.3.2 grep同時查找多個文件
# 先來準備數據 cp wfy.txt wfy2.txt # 複製一份文件 sed -i '1i 我是複製的wfy2' wfy2.txt # 使用sed在第一行前加上一行標題區分 cat wfy2.txt # 查看剛才複製的文件 grep -n '不用' wfy.txt wfy2.txt # 查詢多個文件中包含「不用」字符的文件內容,並顯示行號 # 直接在末尾跟上多個參數
grep -n '不用' * # 查詢當前目錄下所有文件中包含「不用」的文件,並顯示對應行號
2.3.3.3 grep遞歸查找
# 我們來先準備下數據 mkdir dirwfy ; cp wfy.txt dirwfy/wfy3.txt;sed -i '1i 我是wfy3,注意看' dirwfy/wfy3.txt;cat dirwfy/wfy3.txt # 創建目錄dirwfy,在dirwfy目錄下創建wfy3.txt文件,並修改標題
# 使用上面的grep -n 看下效果 grep -n '不用' * # 查不到dirwfy下文件 grep -rn '不用' * # 如圖,可以查到dirwfy下文件
2.3.3.4 grep查找對應字符前後n行
grep -A10 '姚毛毛' wfy.txt # 查看「姚毛毛」字符行後10行數據 # -A : after
grep -B5 '5你' wfy.txt # 查看「5你」字符行前5行 # -B:before
grep -A1 -B1 '7你' wfy.txt # 查看"7你"字符前後各1行數據
2.3.3.5 grep組合命令
history|grep rm # 查找歷史命令中執行了哪些刪除命令
rpm -qa |grep yum # 查詢linux下是否有安裝過此rpm包 ps -ef|grep java # 此命令為一般運維中最常用命令,查詢linux進程中是否運行了此程序 pgrep -java # 查找java進程,與上面查找功能相同,但是只顯示進程號 pgrep -l java # 查找java進程,與上面查找功能相同,但是顯示進程號及進程名 kill –9 'pgrep java' # 批量關閉java進程 # pgrep:查找正在運行的程序;pgrep是grep的擴展功能,同樣的還有egrep、fgrep,用的不多了解下就行 # egrep:擴展正則表達式 # fgrep:不識別正則表達式 ps -ef |grep $ORACLE_SID|grep -v grep|awk '{print $2}' | xargs kill -9 # 得到所有oracle進程並關閉
2.3.4 wc
wc最常用命令一般為組合命令,如:
ls | wc -l # 統計當前文件夾下有多少文件 ls *.txt | wc -l find . -maxdepth 1 -name '*.txt' | wc -l # 統計當前文件夾、第一層目錄下所有的txt文件數量 # 上面兩個命令都可以
wc基本命令:
wc -l /etc/inittab # 統計文件內容行數 # -l :統計行數 # -w :統計單詞數 # -m :統計字符數 # -c : 統計位元組數 # -L : 打印最長行的長度 # 全部執行下看看 wc -l /etc/inittab;wc -c /etc/inittab; wc -m /etc/inittab;wc -w /etc/inittab; wc -L /etc/inittab wc /etc/inittab # 不加參數則默認輸出行數、單詞數、位元組數 # 等同參數為-lwc # 位元組數跟字符數怎麼一樣的?因為都是英文,我們加個中文字進去看看 sed -i '1a #中' /etc/inittab wc -lcmwL /etc/inittab # 注意:輸出內容並不是按照我們敲出的命令行中參數來排序的,它有其固定順序--> lwmcL # 按照lwmcl的順序排列後,可以看到位元組數比字符數多了兩位,因為一個#符號1位元組,一個英文字符代表2位元組,一個中文字符4位元組,我們添加了#中,所以是添加了5位元組,但是只增加了2字符。
公眾號註冊的比較晚,沒有評論功能,所以一般用來髮長文。
知識星球相當於技術朋友圈,有問題大家可以提問,討論。
歡迎關注我的公眾號:姚毛毛的博客
歡迎加入我的知識星球,目前免費哦。
知識星球:姚毛毛的私密花園
——————————————————–
公眾號註冊的比較晚,沒有評論功能,所以一般用來髮長文。
知識星球相當於技術朋友圈,有問題大家可以提問,討論。
歡迎關注我的公眾號:姚毛毛的博客
歡迎加入我的知識星球,目前免費哦。
知識星球:姚毛毛的私密花園
[知識星球]