做者:姚毛毛的博客java
tips:文章太長,分兩篇發出,本篇發前三個章節: 一、文件及目錄操做; 二、文件查看及編輯 三、文件查找及統計。linux
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參數含義爲若是沒有這個文件,也不提示。
在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 # 查看當前所在路徑
在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 # 查看有沒有建立成功
此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嗎,也是遞歸刪除。
cat [文件名] # 輸出文件全部內容到屏幕上 cat [文件1] [文件2] # 輸出文件一、文件2全部內容到屏幕上 cat [文件1] [文件2] > [文件3] # 將文件一、文件2合併,輸出到文件3中,若是沒有文件3會自動生成一個新的文件3 cat -n [文件名] # 輸出文件內容時加上行號 cat -A [文件名] # 輸出文件內容時顯示全部隱藏字符
cat的特色就是一次性將全部內容輸出到屏幕上,用得最頻繁的一大功能就是合併文件,並輸出到新文件中。由於若是隻是查看的話,有不少其餘工具均可以查看。
另外cat命令比較經常使用的還有和管道符「|」一塊兒來用。用來做爲管道符的輸入內容,如 cat xxx.log | grep '我要找這個單詞',這個後續說道文件查找時再說。
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差很少。
要說在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。
最後,我們總結下幾種模式的切換:
一、vi/vim [fileName] --> normal模式 二、normal 下 輸入 i、a、o、s 鍵--> 編輯模式 三、normal 下 輸入冒號 : --> 底線命令模式 四、Esc退出到normal模式 五、:q :wq :q! :wq! 退出不保存/保存文件
哦,還有個 normal 下 輸入v 進入視圖模式,這個在之後的進階學習裏能夠說下,通常沒啥用。
說完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嗎,同樣的效果。
文件查看與編輯終於到了最後一節了,此次來講說大殺器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感興趣,想深刻研究的能夠自行探索。
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 /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
只顯示指定目錄第1、二層目錄的大小
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 重複計算硬件連接的文件。
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個字母依照月份的縮寫進行排序;
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 可能有點很差理解,因此截了個示例圖
基本經常使用的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
對於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 下全部文件詳情
區別一:
-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還有不少強大的功能,截兩張圖你們就知道了
這本書就是我開頭推薦的《核心系統命令實戰》。
grep -n '不用' wfy.txt # 查找wfy.txt文件中含有「不用」的字符行 # -n 顯示行號 # -i 不區分大小寫 # -v 反向過濾 # -c 統計匹配行
grep -c '不用' wfy.txt # 統計包含「不用」字符行的行數 grep -v '不用' wfy.txt # 查找不包含「不用」的字符行
# 先來準備數據 cp wfy.txt wfy2.txt # 複製一份文件 sed -i '1i 我是複製的wfy2' wfy2.txt # 使用sed在第一行前加上一行標題區分 cat wfy2.txt # 查看剛纔複製的文件 grep -n '不用' wfy.txt wfy2.txt # 查詢多個文件中包含「不用」字符的文件內容,並顯示行號 # 直接在末尾跟上多個參數
grep -n '不用' * # 查詢當前目錄下全部文件中包含「不用」的文件,並顯示對應行號
# 咱們來先準備下數據 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下文件
grep -A10 '姚毛毛' wfy.txt # 查看「姚毛毛」字符行後10行數據 # -A : after
grep -B5 '5你' wfy.txt # 查看「5你」字符行前5行 # -B:before
grep -A1 -B1 '7你' wfy.txt # 查看"7你"字符先後各1行數據
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進程並關閉
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字符。
公衆號註冊的比較晚,沒有評論功能,因此通常用來發長文。
知識星球至關於技術朋友圈,有問題你們能夠提問,討論。
歡迎關注個人公衆號:姚毛毛的博客
歡迎加入個人知識星球,目前免費哦。
知識星球:姚毛毛的私密花園
--------------------------------------------------------
公衆號註冊的比較晚,沒有評論功能,因此通常用來發長文。
知識星球至關於技術朋友圈,有問題你們能夠提問,討論。
歡迎關注個人公衆號:姚毛毛的博客
歡迎加入個人知識星球,目前免費哦。
知識星球:姚毛毛的私密花園
[知識星球]