教老婆學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字元。
公眾號註冊的比較晚,沒有評論功能,所以一般用來發長文。
知識星球相當於技術朋友圈,有問題大家可以提問,討論。
歡迎關注我的公眾號:姚毛毛的部落格
歡迎加入我的知識星球,目前免費哦。
知識星球:姚毛毛的私密花園
--------------------------------------------------------
公眾號註冊的比較晚,沒有評論功能,所以一般用來發長文。
知識星球相當於技術朋友圈,有問題大家可以提問,討論。
歡迎關注我的公眾號:姚毛毛的部落格
歡迎加入我的知識星球,目前免費哦。
知識星球:姚毛毛的私密花園
[知識星球]
相關推薦
教老婆學Linux運維(二)Linux常用命令指南【上】
目錄 教老婆學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
Python運維(二)Docker虛擬機器
一、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