1. 程式人生 > >教老婆學Linux運維(二)Linux常用命令指南【上】

教老婆學Linux運維(二)Linux常用命令指南【上】

目錄

  • 教老婆學Linux(二)Linux常用命令指南【上】
    • 一、概述
    • 二、常用命令

教老婆學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 -fn1000 xxx.log xxx2.log](D:\技術資料\筆記\教老婆學Linux\2\tail -fn1000 xxx.log xxx2.log.png)

與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字元。


公眾號註冊的比較晚,沒有評論功能,所以一般用來發長文。
知識星球相當於技術朋友圈,有問題大家可以提問,討論。

歡迎關注我的公眾號:姚毛毛的部落格

歡迎加入我的知識星球,目前免費哦。
知識星球:姚毛毛的私密花園
--------------------------------------------------------
公眾號註冊的比較晚,沒有評論功能,所以一般用來發長文。
知識星球相當於技術朋友圈,有問題大家可以提問,討論。

歡迎關注我的公眾號:姚毛毛的部落格

歡迎加入我的知識星球,目前免費哦。
知識星球:姚毛毛的私密花園
[知識星球]

相關推薦

老婆LinuxLinux常用命令指南

目錄 教老婆學Linux(二)Linux常用命令指南【上】 一、概述 二、常用命令 教老婆學Linux(二)Linux常用命令指南【上】 作者:姚毛毛的部落格 tips:文

Linux日常

10.4 Linux的防火牆 SELinux SELinux是linux系統特有的安全機制,這種機制限制較多,配置也比較繁瑣,所以一般把SELinux關閉。 檢視selinux的狀態有兩種方法: getenforce 命令是單詞get(獲取)和enforce(

日常

iostat ps top tcpdump netstat iostat iostat 直接查看 iostat 1 iostat -x 磁盤使用 %util:表示I/O等待,占用CPU的等待時間,這個數字大,可能硬盤有故障 iotop iotop 磁盤使用y

Linux初級——Linux檔案查詢詳解

一、檔案查詢     常用命令:locate,find     1、locate         locate:在全系統查詢檔案的命令。非實

自動化——Ansible

23.3 Ansible Ansible和Saltstack比較類似,都是基於Python開發的,Ansible不需要安裝客戶端,通過ssh去通訊。 Ansible有以下優點: 1. 基於模組工作,模組可以由任何語言開發; 2. 支援命令列使用模組,支援編寫ya

PythonDocker虛擬機器

一、Docker 虛擬機器架構 Docker 建立的所有虛擬例項共用同一個Linux核心,對硬體佔用較小,屬於輕量級虛擬機器 二、Docker 映象與容器 容器是從映象中創建出來的虛擬例項 映象是用來安裝程式,是隻讀層 容器是用來執行程式,是隻讀層 倉庫、映象

Linux

1、什麼是關係型資料庫?什麼是非關係型資料庫?他們之間有何優勢和區別?答:(1)關係型資料庫:建立在關係模型基礎上的資料庫,是一張擁有關係名稱的二維表,關係模型由關係資料結構、操作集合、完整性約束三部分組成。如Mysql和Oracle。非關係型資料庫:一種鍵值對形式儲存的資料

Docker環境下的前後端分離項目部署與後端項目下載與配置

win http 圖片 cal jar文件 項目源碼 結果 ces 找到 後端項目下載與配置 部署我們采用的是Linux、Docker虛擬機,我們不需要在Linux上再次去建立一個編譯的環境。 這個編譯的環境只需要在Windows上去完成就可以了,在Windows系統上

java程式設計師菜鳥進階十四linux基礎入門linux檔案及目錄命令管理

大家都知道,熟悉命令操作的開發人員,Linux作業系統命令操作效率要高於圖形介面的操作,所以瞭解和學習linux基本命令操作是學習linux作業系統的首要任務,本文主要介紹以下四個知識點:   1.      She

日常:w命令 vmstat命令 top命令 sar命令 nload命令

一 w檢視當前系統的負載 -f  開啟或關閉顯示使用者從何處登入系統。 -h  不顯示各欄位的標題資訊列。 -l  使用詳細格式列表,此為預設值。 -s  使用簡潔格式列表,不顯示使用者登入時間,終端機

Linux 學習之路常用命令之檔案與目錄管理

ls:顯示目標列表             -a  顯示所有檔案和目錄              -l    單列顯示詳細資訊 cd:切換工作目錄              cd     進入使用者主目錄             cd ~  進入使用者主目錄        

linux學習筆記檔案操作命令

1.rm 命令 使用:rm [引數] 檔案 功能:刪除檔案 常用引數:          -v :顯示執行過程 -i:進行互動式的刪除 -r:遞迴的刪除檔案或目錄 如果rm命令不跟上-r則不能刪除目錄檔案 使用例項: rm -r v    /var/test 刪除var目錄

HDFS——HDFS 常用命令

操作 HDFS 的命令主要分兩種:操作命令,管理命令。 一、操作命令 操作命令以 hdfs dfs ****開頭。 -mkdir:建立目錄。 例 1:hdfs dfs -mkdir /aaa—> 在 HDFS 的根目錄下建立一個目錄aaa。 例 2:hdfs

Docker 常用命令

參考:http://www.runoob.com/docker/docker-command-manual.html 檢視版本號資訊 # docker version Client:  Version:         1.13.1  API version:     1

11. vSphere PowerCLI試用常用命令

通過命令列來管理虛擬化平臺,可以將迴圈操作的任務變得簡單,如需要批量建立多臺虛擬機器時就可以使用命令列工具。 網路上有人整理的常用命令PDF表: PowerCLI常用命令列表: 1、Connect-VIServer  – 連線虛擬化平臺 2、get-vmhost  – 顯示ESXi主機列表 3、get-

centos 常用命令和安裝

安裝   yum install screen           yum install wget           yum install pcre           yum install openssl* 檢視/編輯 網路配置 vi /etc/sysconfig

linux安全

系統 gop shutdown ace sim -s user nbsp 服務 1.刪除特殊的用戶和用戶組: linux提供了各種不同角色的系統賬號,在系統安裝完成後,默認會安裝很多不必要的用戶和用戶組,如果不需要某些用戶或用戶組,應立即刪除他們,因為賬號越多,系統就越不

Linux初級——vim編輯器

一、VIM介紹         vim是一個類似於vi的著名的功能強大的、高度可定製的文字編輯器,在vi的基礎上改進和增加了很多特性。vim是自由軟體。vim是從vi發展出來的一個文字編輯器。程式碼補全、編譯及錯誤跳轉等方面

Linux初級十三——RAID及mdadm命令

一、RAID介紹         RAID(Redundant arrays of Independent Drives),有“獨立磁碟構成的具有冗餘能力的陣列”。磁碟陣是由很多價格較便宜的磁碟,組合成一個容量巨大的磁碟組,

小白 Python 爬蟲3:前置準備Linux基礎入門

人生苦短,我用 Python 前文傳送門: 小白學 Python 爬蟲(1):開篇 小白學 Python 爬蟲(2):前置準備(一)基本類庫的安裝 Linux 基礎 CentOS 官網: https://www.centos.org/ 。 CentOS 官方下載連結: https://www.cent