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

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

做者:姚毛毛的博客java

tips:文章太長,分兩篇發出,本篇發前三個章節: 一、文件及目錄操做; 二、文件查看及編輯 三、文件查找及統計。linux


1、概述

1.1寫在前面 & 學習指南正則表達式

本文目的:主要是做爲一張給初學者入門Linux的學習地圖。shell

因此我只會講一些咱們生產過程當中經常使用的命令及操做,對於命令的一些偏門用法本文會一帶而過甚至不講。vim

對於Linux命令詳解能夠參考網站
https://man.linuxde.net/windows

實體書的話推薦《跟老男孩學linux運維-核心系統命令實戰》。oracle

1.2 經常使用命令概述app

我將Linux下的經常使用命令分爲幾類:less

一、文件及目錄操做

二、文件查看及編輯

三、文件查找及統計

四、文件解壓與壓縮

五、用戶與文件權限

六、資源監控與管理

爲何列的幾個章節都是跟文件相關的?

由於在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 注意事項

一、本文使用Linux環境爲centOs 7,其餘發行版可能會有輕微不一致狀況。Mac的命令行也一樣如此。

二、在linux中全部命令都要使用空格隔開,如cd xx文件,在第二章節學習時需注意。

三、命令通常都有參數,可以使用man或help查看其參數做用。參數寫法通常爲-開頭。如ls -l查看當前目錄下全部文件。rm -f xxx文件,刪除xxx文件,-f參數含義爲若是沒有這個文件,也不提示。

2、經常使用命令

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
# 批量建立空文件

mark

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]
# 輸出文件一、文件2全部內容到屏幕上

cat [文件1] [文件2] > [文件3]
# 將文件一、文件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行的灰灰替換成了小力。

mark

從第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。

最後,我們總結下幾種模式的切換:

mark

一、vi/vim [fileName] --> normal模式

二、normal 下 輸入 i、a、o、s 鍵--> 編輯模式

三、normal 下 輸入冒號 : --> 底線命令模式

四、Esc退出到normal模式

五、: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 參數的含義爲計算行數時,以實際上行數爲準(有些單行字數太長的會被認爲兩行或以上)

mark

mark

能夠看到,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

在文件末尾追加了「我是姚毛毛」這串字符串。

如圖:
mark

那麼,想在指定行或者每行前面或者後面都追加字符呢?

sed -i '20a 哦,我是姚毛毛20 append' 放學後utf-8.txt
# 追加「哦,我是姚毛毛20 append」,在文件【放學後utf-8.txt】第20行字符下一行

如圖:
mark

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,能夠試試,驗證下是否是隻輸出到終端,而沒有實際修改文件內容。

如圖:
mark

使用sed命令在第一行數據後添加了部份內容後,再用cat查看文件,文件內容並無改變。

刪,內置命令字符d:

sed '2d' wfy.txt
# 刪除第2行。d爲sed內置命令,2爲行數

mark

正如上面說的,若是不加-i,只是將刪除後內容輸出到終端,而沒有實際改變文件。那麼,加上-i試試呢?

sed -i '2d' wfy.txt

mark

看,第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 [目錄]
# 只顯示指定目錄第1、二層目錄的大小

圖示:

du -sh

統計當前文件夾內容總大小

du -sh

du -sh

統計當前目錄下的文件夾或文件大小

mark

du -sh /usr/local

顯示指定目錄大小

mark

du -s

顯示當前目錄總大小

mark

du -h

-h會換算成K、M、G等人類易讀結果

mark

du -a

顯示當前目錄下全部文件所佔空間(含隱藏文件)

du -a

du -h --max-depth=1 /home/yao

只顯示指定目錄下第一層目錄的大小

mark

du -h --max-depth=2 /home/yao

只顯示指定目錄第1、二層目錄的大小
mark

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
#  按照文件大小倒序排序(含隱藏文件)

mark

du -h /home/yao | sort -n -r | head -n 10
# 非隱藏文件,篩選前10,可讀方式展示文件大小; 
# sort -n -r 也能夠寫做 sort -rn;
# -n:依照數值的大小排序;
# -r:以相反的順序來排序;

mark

du -h --max-depth=1 /home/yao | sort -n -r | head -n 10
# 指定目錄第一層,篩選前10,可讀方式展示文件大小

mark

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 可能有點很差理解,因此截了個示例圖

mark

2.3.2.2 使用find 組合命令:統計與刪除

基本經常使用的find命令都已經講完了,再說下運維中可能經常使用的一個組合命令,利用find刪除N天之前的文件或日誌。

先用wc -l來統計下log數量,再刪除看看

find / -name '*.log' -mtime +300 | wc -l
# 從根目錄下開始搜索300天以前的log文件,並統計數量
# 「|」:管道符,將前面查到的數據做爲輸入源給後面的命令

mark

第一種刪除方式:-exec

find / -name '*.log' -mtime +300 -exec rm {} \;
# 查找30天之前的log文件,使用-exec加rm將其刪除
# 再使用上面的命令從新查看一次
find / -name '*.log' -mtime +300 | wc -l


mark

第二種刪除方式:-ok

find / -name '*.log' -mtime +200 -ok rm {} \;
# -ok : 詢問刪除,y刪除,n不刪除,回車默認不刪除

mark
mark

第三種刪除方式:xargs

依次執行查看結果

find / -name '*.log' -mtime +100 | wc -l

find / -name '*.log' -mtime +100 | xargs rm -f
# xargs : 命令傳遞參數過濾器,與管道符「|」一同使用,將前面的命令傳遞給後面的命令使用

find / -name '*.log' -mtime +100 | wc -l

mark

2.3.2.3 find與xargs的組合使用

對於50天前的log文件進行詳情查看

find / -name '*.log' -mtime +50 | xargs ls -l
# 利用xargs + ls -l 命令來進行文件的詳細屬性查看

mark

移除50天前的文件

mkdir /logback
# 建立根目錄下的 /logback文件夾

find / -name '*.log' -mtime +50 | xargs -i mv {} /logback
# 將50天前的全部log文件移動到 /logback 文件夾下
# xargs -i + {},將前面查找到的文件都做爲參數給mv命令執行

ls -l /logback
# 查看 /logback 下全部文件詳情

mark

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

mark

能夠看到使用-exec每次得到一個文件輸出一次,xargs則只輸出了一行。

xargs還能夠用-n參數控制每次輸出的文件個數

find /logback -name '*.log'  | xargs -n5 echo yaomaomao

mark

能夠看到,每行輸出5個參數(文件名),不足的行輸出剩下的。

驗證區別二,示例以下:

touch yaomaomao.txt;touch "yaomaomao centOS 7";ll yaomaomao*
# 小技巧:使用「;」分號能夠一次性執行多個命令
# 注意:查看和建立帶有空格的文件時,使用引號括起來

mark

find . -name "yaomaomao*" -exec ls -lh {} \;
# 正常查找出來

find . -name  "yaomaomao*" | xargs ls -lh
# 能夠看到使用此命令報找不到那個文件或目錄

find . -name  "yaomaomao*" -print0 | xargs -0  ls -lh
# 正常查找

mark

其實find還有不少強大的功能,截兩張圖你們就知道了
find1
find2

這本書就是我開頭推薦的《核心系統命令實戰》。

2.3.3 shell三劍客之二:grep,字符查找有一手
2.3.3.1 grep 經常使用命令示例:
grep -n '不用' wfy.txt
# 查找wfy.txt文件中含有「不用」的字符行
# -n 顯示行號
# -i 不區分大小寫
# -v 反向過濾
# -c 統計匹配行

mark

grep -c '不用' wfy.txt
# 統計包含「不用」字符行的行數

grep -v '不用' wfy.txt
# 查找不包含「不用」的字符行

mark

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
# 查詢多個文件中包含「不用」字符的文件內容,並顯示行號
# 直接在末尾跟上多個參數

mark

grep -n '不用' *
# 查詢當前目錄下全部文件中包含「不用」的文件,並顯示對應行號

mark

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文件,並修改標題

mark

# 使用上面的grep -n 看下效果
grep -n '不用' *
# 查不到dirwfy下文件

grep -rn '不用' *
# 如圖,能夠查到dirwfy下文件

mark

2.3.3.4 grep查找對應字符先後n行
grep -A10 '姚毛毛' wfy.txt
# 查看「姚毛毛」字符行後10行數據
# -A : after

mark

grep -B5 '5你' wfy.txt
# 查看「5你」字符行前5行
# -B:before

mark

grep -A1 -B1 '7你' wfy.txt
# 查看"7你"字符先後各1行數據

mark

2.3.3.5 grep組合命令
history|grep rm
# 查找歷史命令中執行了哪些刪除命令

mark

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文件數量
# 上面兩個命令均可以

mark

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字符。

mark
公衆號註冊的比較晚,沒有評論功能,因此通常用來發長文。
知識星球至關於技術朋友圈,有問題你們能夠提問,討論。

歡迎關注個人公衆號:姚毛毛的博客
公衆號

歡迎加入個人知識星球,目前免費哦。
知識星球:姚毛毛的私密花園
--------------------------------------------------------
公衆號註冊的比較晚,沒有評論功能,因此通常用來發長文。
知識星球至關於技術朋友圈,有問題你們能夠提問,討論。

歡迎關注個人公衆號:姚毛毛的博客
公衆號

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

相關文章
相關標籤/搜索