1. 總結(jié)學(xué)過的文本處理工具,文件查找工具,文本處理三劍客, 文本格式化命令(printf)的相關(guān)命令及選項,示例。
一、文本處理工具
1.查看文本內(nèi)容 cat????????命令格式:cat [OPTION] [FILE]
常見的選項有:
????-E 顯示行結(jié)束符$
????-A 顯示所有控制符
? ? -n 對顯示出的每一行進行編號
示例:

2.逆向顯示文本 tac
示例:

3.同一行內(nèi)容逆向顯示(翻面) rev
示例:

4.分頁查看文本內(nèi)容 less????????命令格式:less [FILE]
less可以實現(xiàn)分頁查看文件,可以在查看文本時使用:
????/文本 搜索文本
????pgup 向上翻頁
????pgdn 向下翻頁
?????q 退出
5.查看文本頭部內(nèi)容 head????????命令格式:head [OPTION] [FILE]
常用選項:
????-n#? ????????指定獲取前#行
? ? -#? ? ? ? ? ? 同上
如果指定位負數(shù)則會獲取首行到倒數(shù)#行
示例:

6.查看文本尾部內(nèi)容 tail? ? ? ? 命令格式:tail [OPTION] [FILE]
常用選項:
? ? -n#? ? ? ? 指定獲取后#行
? ? -#? ? ? ? ? 同上
如果指定為+#則會從#獲取到最后一行
示例:

7.按列抽取文本顯示 cut? ? ? ? 命令格式:cut [OPTION...] [FILE]
常用選項:
? ? -d .? ? ? ? 指定分隔符,默認tab
? ? -f? ?#? ? ? 第幾個字段
示例:

8.合并多個文件 paste? ? ? ? ?命令格式:paste [option] [file..]
常用選項:
? ? -d .? ? ? ? 指定分隔符,默認tab
? ? -s? ? ? ? ? ?所有行合成一行顯示
示例:

9.文本排序 sort? ? ? ? ? ? 命令格式:sort [option] [file]
常用選項:
? ? -r 執(zhí)行反方向整理? ? ? ? ? ? ? ? ? ? ? ? ?
? ? -R 隨機排序
????-n 執(zhí)行按數(shù)字大小整理
? ? -h 人類可讀排序
? ? -u 合并重復(fù)項,即去重
? ? -t? c? ? 使用c作為字段界定字符
示例:

10.文本去重 uniq? ? ? ? 命令格式: uniq [option] [file]
常用選項:
? ? ?-c 顯示每行重復(fù)出現(xiàn)的次數(shù)
?????-d 僅顯示重復(fù)過的行
? ? ?-u 僅顯示不曾重復(fù)的行
示例:

? 11.文本數(shù)據(jù)統(tǒng)計 wc? ?
? 常用選項:? ?
?????-l? ? ? ? 計數(shù)行數(shù)
? ? ?-w? ? ? 計數(shù)單詞總數(shù)
?????-c? ? ? ?計數(shù)字節(jié)總數(shù)
?????-m? ? ? 計數(shù)字符總數(shù)
示例:

二、文件查找工具
1. locate:非實時查找
locate查詢系統(tǒng)上預(yù)建的文件索引數(shù)據(jù)庫/var/lib/mlicate/mlocate.db
索引的構(gòu)建是在系統(tǒng)較為空閑時進行(很消耗資源),執(zhí)行updatedb可以更新數(shù)據(jù)庫
特點:
????查找速度快
????模糊查找
????非實時查找
????搜索的是文件的全路徑,不僅僅是文件名
????可能只搜索用戶具備讀取和執(zhí)行權(quán)限的目錄
命令格式:locate [option] [PATTERN]
常用選項:
-i? ? ? ? 不區(qū)分大小寫的搜索
-n N? ?只列舉前N個匹配項目
-r? ? ? ? 使用基本正則表達式
示例:
2. find:實時查找
find是實時查找工具,通過遍歷指定路徑完成文件查找
工作特點:
????查找速度略慢
????精確查找
????實時查找
????查找條件豐富
????可能只搜索用戶具備讀取和執(zhí)行權(quán)限的目錄
命令格式:find [OPTION]... [查找路徑] [查找條件] [處理動作]
find命令查找條件豐富可以對指定目錄進行查找,根據(jù)文件名和inode,屬主、屬組,文件類型,文件大小,時間戳,權(quán)限來進行查找
3. 參數(shù)替換 xargs
由于很多命令不支持管道|來傳遞參數(shù),xargs用于產(chǎn)生某個命令的參數(shù),xargs可以讀入stdin的數(shù)據(jù),許多命令不能解釋過多參數(shù),命令執(zhí)行可能會失敗,xargs也可以解決
find經(jīng)常和xargs命令進行組合
示例:

三、文本處理三劍客
1. grep 文本過濾
grep 命令主要針對文本的(正則表達式)行基于模式進行過濾,文本搜索工具。
命令格式:?grep [OPTIONS] PATTREN [FILE]
常見選項:
-m # 匹配#次后停止
-v 顯示不被pattren匹配到的行,即取反
-i 忽略大小寫
-n 顯示匹配的行號
-c 統(tǒng)計匹配的行數(shù)
-o 僅顯示匹配到的字符串
-A # 某字符后#行
-B # 某字符前#行
-C # 某字符前后#行
-e 實現(xiàn)多個選項間的邏輯or關(guān)系
-f file 根據(jù)模式文件處理
-r 遞歸,但不處理軟鏈接
-R 遞歸,處理軟鏈接
示例:

2. sed 行編輯器
sed是行編輯器,sed是從文件或管道中讀取一行,處理一行,輸出一行;再讀取一行,再處理一行,再輸出一行,直到最后一行。
命令格式:sed [OPTION] 'script;script;...' [inputfile]
? ? ? ? ? ? ? ? ? sed? 選項? '地址命令;地址命令;...'? 文件
常見選項:
????-n 關(guān)閉自動打印
????-e 多點編輯
????-f 從指定文件中讀取編輯腳本
????-E,-r 使用擴展正則表達式
????-i.bak 備份文件并原處編輯
????-s 將多個文件視為獨立文件,而不是單個連續(xù)的長文件流
地址格式:
可以使用具體的行數(shù),也可以使用正則表達式
命令:
-p 打印當前模式空間內(nèi)容,追加到默認輸出之后
-d 刪除模式空間匹配的行,并立即啟用下一輪循環(huán)
a[#] text 在指定的行后面追加文本,支持實現(xiàn)多行追加
?i[#] text 在指定行前面插入文本
c[#] text 替換行文本內(nèi)容
= 為模式空間中的行打印行號
! 模式空間中匹配行取反處理
查找替代:
格式:s/pattern/string/修飾符? ? 也可以使用其他分隔符,如:s@@@ , s###
替換修飾符:
g 行內(nèi)全部替換
p 顯示替換成功的行
w /PATH/FILE 將替換成功的行保存至文件中
I,i 忽略大小寫
示例:

三、文本格式化命令 printf
printf 增強版echo,實現(xiàn)豐富的格式化輸出,常用于腳本編寫中,命令后續(xù)的文本內(nèi)容樣式會按照命令中的指定格式打印輸出
命令格式:printf? ''指定的格式"? "文本1"? "文本2" ......
常用格式替換符
%s? ? 字符串
%d,%i? ? 十進制整數(shù)
%f? ? 浮點格式
%c? ? ASCII字符
%o? ? 八進制值
%u? ? 不帶正負號的十進制值
%x? ? 十六進制值(a-f)
%X? ?十六進制值(A-F)
%%? ? 表示%本身
常用的轉(zhuǎn)義字符
\a? ? 警告字符
\b? ? 后退
\f? ? 換頁
\n? ? 換行
\r? ? 回車
\t? ? 水平制表符
\v? ? 垂直制表符
\? ? 表示\本身
示例:


2. 總結(jié)文本處理的grep命令相關(guān)的基本正則和擴展正則表達式。
正則表達式的元字符分類:字符匹配,次數(shù)匹配,位置錨定,分組
基本正則表達式:
字符匹配
. ????匹配任意單個字符(除了\n),可以是一個漢字或其他國家的文字
[] ????匹配指定范圍內(nèi)的任意單個字符,示例:[wang] [0-9] [a-z]
[^] ????匹配指定范圍外的任意單個字符。示例:[^wanng]
[:alnum:] ????字母和數(shù)字
[:alpha:] ????代表任何英文大小寫字符,即A-Z,a-z
[:lower:] ????小寫字母
[:upper:] ????大寫字母
[:punct:] ????標點符號
[:blank:] ????空白字符(空格和制表符)
次數(shù)匹配
*? ? ? ? ? ?匹配前面的字符任意次,包括0次,貪婪模式:盡可能長的匹配
.* ???? ????任意長度的任意字符
\????? ???? 匹配其前面的字符出現(xiàn)0次或1次,即:可有可無
\+ ???? ????匹配其前面的字符出現(xiàn)最少1次,即:肯定有且 >=1 次
\{n\} ????????匹配前面的字符n次
\{m.n\} ????匹配前面的字符至少m次,至多n次
\{,n\} ????????匹配前面的字符至多n次,即:<=n
\{n,\} ????????匹配前面的字符至少n次,即:>=n
位置錨定
^ ???? 行首錨定,用于模式的最左側(cè)
$ ???? 行尾錨定,用于模式的最右側(cè)
^PATTREN$ ????用于匹配模式整行
^$ ???? 空行
\< ???? 詞首錨定,用于單詞模式的左側(cè)
\> ???? 詞尾錨定,用于單詞模式的右側(cè)
\<PATTERN\> ????匹配整個單詞
分組
分組:() 將多個字符捆綁在一起,當作一個整體處理
后向引用:分組括號中的模式匹配到的內(nèi)容會被正則表達式引擎記錄于內(nèi)部的變量中,這些變量的命名方式為::\1,\2,\3,...
或者 \|
a\|b ???? a或b
C\|cat ???? C或cat
\(C\|c\)at???? Cat或cat
擴展正則表達式:
使用擴展正則表達式需要加選項 -E,-r
字符匹配
.? 匹配任意單個字符(除了\n),可以是一個漢字或其他國家的文字
[]? 匹配指定范圍內(nèi)的任意單個字符,示例:[wang]? ? [0-9]? [a-z]
[^] 匹配指定范圍外的任意單個字符。示例:[^wanng]
[:alnum:]? 字母和數(shù)字
[:alpha:]? 代表任何英文大小寫字符,即A-Z,a-z
[:lower:]? 小寫字母
[:upper:]? 大寫字母
[:punct:]? 標點符號
次數(shù)匹配
*? ? ? 匹配前面的字符任意次,包括0次,貪婪模式:盡可能長的匹配
.*? ? ? 任意長度的任意字符
?? ? ? 匹配其前面的字符出現(xiàn)0次或1次,即:可有可無
+? ? ? 匹配其前面的字符出現(xiàn)最少1次,即:肯定有且 >=1 次
{n}? ? 匹配前面的字符n次
{m.n}? 匹配前面的字符至少m次,至多n次
{,n}? ? 匹配前面的字符至多n次,即:<=n
{n,}? ? 匹配前面的字符至少n次,即:>=n
位置錨定
^? ? ? ? ? 行首錨定,用于模式的最左側(cè)
$? ? ? ? ? 行尾錨定,用于模式的最右側(cè)
^PATTREN$? 用于匹配模式整行
$? ? ? ? ? 空行
\<? ? ? ? ? 詞首錨定,用于單詞模式的左側(cè)
\>? ? ? ? ? 詞尾錨定,用于單詞模式的右側(cè)
\ 匹配整個單詞
分組其他
()? 分組
后向引用:\1, \2, \3, ...注意: \0 表示正則表達式匹配的所有字符
|? 或者
a|b? ? ? ? a或b
C|cat? ? ? C或cat
(C|c)at? ? Cat或cat
3. 總結(jié)變量命名規(guī)則,不同類型變量(環(huán)境變量,位置變量,只讀變量,局部變量,狀態(tài)變量)如何使用。
變量命名的規(guī)則:
1.區(qū)分大小寫
2.不能使用程序中方保留字和內(nèi)置變量。如:if,for等
3.不能使用數(shù)字,字母及下劃線,且不能以數(shù)字開頭,不支持短橫線 "-",和主機名相反
4.用英文單詞命名,并體現(xiàn)出實際作用,不使用簡寫
5.變量名大寫
6.局部變量小寫
7.函數(shù)名小寫
環(huán)境變量的使用:
1.環(huán)境變量可以使子進程(包括孫子進程)繼承父進程的變量,但是父進程不能使用子進程的變量
2.一旦子進程修改從父進程繼承的變量,會將新的值傳遞給孫子進程
變量聲明和賦值:
export name=VALUE
declare -x name=VALUE
或者分兩步實現(xiàn)
name=VALUE
export name
變量引用:
$name
${name}
刪除變量:
unset name
位置變量的使用
在bash shell中內(nèi)置的變量,在腳本代碼中調(diào)用通過命令行傳遞給腳本參數(shù)
$1,$2,... ????對應(yīng)第1個,第2個參數(shù)
$0? ? 命令本身,包括路徑
$*? ? 傳遞腳本的所有參數(shù),全部參數(shù)合為一個字符串
$@? ? 傳遞給腳本的所有參數(shù),每個參數(shù)為獨立字符串
$#? ? 傳遞給腳本的參數(shù)個數(shù)
只讀變量的使用
只能聲明定義,后續(xù)不能修改和刪除,即常量
聲明只讀變量:
readonly name
declate -r name
狀態(tài)變量
進程執(zhí)行后,將使用變量$?來保存狀態(tài)碼的相關(guān)數(shù)字,不同的值反應(yīng)成功和失敗,$?取值0~255
執(zhí)行$?返回的值為0代表上一個進程執(zhí)行成功,若返回的值是1~255則代表上一個執(zhí)行的進程失敗
4. 通過shell編程完成,30雞和兔的頭,80雞和兔的腳,分別有幾只雞,幾只兔?


5. 結(jié)合編程的for循環(huán),條件測試,條件組合,完成批量創(chuàng)建100個用戶,
1)for遍歷1..100? 2)先id判斷是否存在? ? ?3)用戶存在則說明存在,用戶不存在則添加用戶并說明已添加。


6. 磁盤存儲術(shù)語總結(jié): head, track, sector, sylinder.
head :磁頭
track:磁道
sector:扇區(qū)
sylinder:柱面
7. 總結(jié)MBR,GPT結(jié)構(gòu)。
MBR分區(qū)模式:fdisk管理MBR分區(qū),支持最多3個主分區(qū),至少1一個擴展分區(qū),擴展分區(qū)內(nèi)的邏輯分區(qū)數(shù)字是以5開始,適合于2T以內(nèi)的磁盤使用
GPT分區(qū)模式:gdisk管理GPT分區(qū),支持分128個主分區(qū),適用于存儲空間大的硬盤
8. 總結(jié)學(xué)過的分區(qū),文件系統(tǒng)管理,SWAP管理相關(guān)的命令及選項,示例
分區(qū)管理:
lsblk:查看本機的硬盤
fdisk [磁盤路徑]? ? ?進入MBR模式分區(qū)
? 選項:
? ? p? ? 打印現(xiàn)有分區(qū)
? ? n? ? 新建分區(qū)
? ? d? ? 刪除分區(qū)
? ? w? ? 存盤退出
? ? q? ? 不存盤退出
? partprobe:將硬盤的分區(qū)表與內(nèi)存同步

文件系統(tǒng)管理:
xfs:SGI,支持最大8EB的文件系統(tǒng),不支持縮減,只支持擴展
ext4:是ext文件系統(tǒng)的最新版,提供了很多新的特性,包括秒級時間戳、創(chuàng)建和使用巨型文件(16TB)、最大1EB的文件系統(tǒng),相對成熟的文件系統(tǒng)