1、Shell基礎git
在計算機科學中,Shell俗稱殼(用來區別於核),是指「提供使用者使用界面」的軟件(命令解析器)。它相似於DOS下的command和後來的cmd.exe。它接收用戶命令,而後調用相應的應用程序。正則表達式
一、history:命令歷史shell
!!:執行上一次命令bash
!$:上一命令的最後一個參數編輯器
Ctrl+r:輸入關鍵字查找歷史命令函數
!number:執行指定命令歷史中的指定順序的命令工具
!vi:執行以vi爲開頭的最近的命令歷史中的一條命令regexp
history -c:清空命令歷史【實際就是清空~/.bash_history】htm
hsitory n:列出包含history n在內的最近n條命令排序
二、Tab:補全文件或命令
三、alias:別名,主要用於簡化命令
alias lin='cd /home'
unalias lin:取消別名
【幾個環境配置文件】
~/.bashrc:用戶的我的的配置文件,從新打開shell就會執行一次。
~/.bash_profile:
~/.bash_history:
~/.bashrc:
~/.bash_logout:退出終端時執行
/etc/profile:全部用戶的環境變量的配置文件
/etc/bashrc:運行bash就會執行
不建議改/etc/bashrc,緣由:每打開一個shell就執行一次。作別名這類環境變量的更改時才放入bashrc中。命令的執行必定不要放這裏。
四、Shell特殊字符
*:0個或多個任意字符
?:一個任意字符
#:註釋
\:脫義符號
~:用戶家目錄
[]:任選裏面的其一
$var:引用變量var的值
``(反引號):先執行反引號內的命令,並用器結果代替該部分
>:重定向
>>追加劇定向
2>:錯誤重定向
2>>:錯誤追加劇定向
<:反向重定向【2.txt < 1.txt:從1中重定向到2】
ls /data >>1.log 2>&1【追加,&1也是1.log】
|:將標準輸出做爲後一個命令的參數
command &:將前面的命令丟到後臺執行
;:命令的邏輯行的結束
&&:與
jobs:查看後臺命令
jobs -l:詳細查看後臺命令,顯示PID
Ctrl+z:暫停當前的命令
fg num:恢復指定num的後臺命令到前臺
bg num:將暫停的命令放入後臺運行
Ctrl+c:終止進程
五、變量
默認系統變量用大寫,自定義用小寫。
env:打印出系統的內置的變量
set:打印出全部的變量,包括自定義的變量
export a=1:全局變量的聲明,聲明的變量a在子shell中任然保持有效
local b=1:局部變量聲明,經常使用戶函數中。使函數的變量做用侷限於函數內
變量名規則:a=1.................. 賦值符號左右不能有空格;
變量名命名規則同C
變量的值:有可能須要用''或""包含,注意雙引""號中會解析其中的特殊字符
變量可疊加:a=1;b=$a'123':此時$b爲1123
unset a:取消變量
六、Shell工具包
1)cut【剪切】
語法:cut -d':' -f3 文件名【指定分隔符,選擇第三段】
cut -c4 文件名【選擇每行的第4個字符,不能指定分隔符。還可指定區間-c2-10】
2)sort【排序】
語法:sort [參數] 文件名
參數:
-n:指定按照數字排序【默認用的是ASCII碼】
-r:reversel反向排序
-u:(uniq)排序時去除重複
-t':' -k3:指定將文件用指定符號分隔後按某一段排序【-t':' -k3,6:指定3-6段都排序】
3)wc【統計】
語法:wc [參數] 文件名
參數:
-l:統計行數
-m:統計字符數,每每多出一個特殊字符
-w:統計單詞數
4)uniq【去重】
語法:sort ...|uniq【使用前必須排序】
uniq -c:輸出時顯示重複的次數。
5)tr【從標準輸出讀取字符(也就是說要用管道),替換一個或多個字符】
語法:tr [參數] 字符串1 字符串2
參數:
-d:刪除字符串1中的全部字符
-s:刪除重複出現的字符序列
-c:使用字符串1的補集中的字符替換字符串2,要求爲ASCII字符集
空:使用字符串1替換字符串2
6)split【切割文件】【主要目的是把大文件切小,減小查看時的內存佔用】
7)tee【重定向加標準輸出】語法:split [參數] 文件
參數:
-b5:每一個文件5b切割文件
-l10:每一個文件10行切割文件
注意:切割後文件名有規律變化
語法:輸入 | tee 目的文件
二:正則表達式與強大的正則工具
一、正則表達式
正則表達式,又稱正規表示法、常規表示法(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在不少文本編輯器裏,正則表達式一般被用來檢索、替換那些符合某個模式的文本。
在這糾正一個錯誤:^表示行的起始位置,$表示行的結束位置
二、grep【過濾】【強烈建議作別名:alias grep='grep --color=auto'】
語法:grep [參數] [正則表達式] 文件名
參數:
示例:-v:取反,即過濾出不含正則表達式的行
-c:打印出符合的行數,而不是內容
-n:打印行號
-i:不區分大小寫
-q:不輸出過濾後的文本結果,只返回真假
-Anum:打印該行及下面的num行
-Bnum:打印該行及上面的num行
-Cnum:打印該行及上面和下面的各num行
grep -r 'root' /etc/*:遍歷目錄,找出含有正則字符的文件
grep '[0-9]':過濾出包含數字的行。[:digit:]:表示全部的數字
grep -v '^#':過濾以'#'開頭的行。【'^#':表示以#開頭,'3$':表示以3結尾】
grep -v '^$':去除全部空行。
grep '[^[:digit:]]':過濾出全部非數字開頭的行。【[^]:表示取反正則表達式】
grep 'ro.t':過濾出全部符合的行,正則的點表示任一字符
grep的正則符號:
.:任意一個字符
*:表示0個或多個前導字符
-E:擴展正則字符
?:表示0我的或1個前導的字符。
+:表示1個或多個前導字符
():表示將括號內的部分做爲一個總體
|:表示或者,即符合|左右兩邊之一的都行
{}:表示前導符出現的次數【{}內能夠是單數字或者範圍{2-3}】
三、sed【替換】
語法:sed [參數] '/正則表達式/' 文件名【分隔符//也可用##代替】
參數:
表達式命令:-n:安靜模式,和p選項一塊兒輸出符合的項目
-i:直接操做文件!!!!!強烈不建議使用,貌似只能在替換時使用
-r:正則表達式不須要脫義
-e:用於鏈接多個正則表達式,它是一個一個的匹配。也就是可能會出現兩次
示例:p:打印
d:刪除
s:替換
g:全局做用,常與s同用
sed '15,$'d /etc/passwd:刪除15行及之後的行
sed 's/root/ROOT/g' /etc/passwd:將文件中的小寫root所有替換爲ROOT
sed -n '/root/p ; /gdm/p' 1.txt:用分好間隔多個正則字段
sed -r 's/(^.*)(:.*:)(\/.*$)/\3\2\1/' /etc/passwd:調換順序,注意表達式中出現間隔符時必須脫義!
sed的正則符號:
-r擴展正則符號:*:表示0個或多個任意字符
.:表示一個任意字符
?:表示
+:表示1個或多個前導字符
():將括號內的字符變爲一個總體
三、awk【按段進行操做】
語法:awk [參數] '正則表達式' 文件名
參數:
-F:指定分隔符
示例:
awk -F':' '{print $3'--'$4}' 1.txt:打印指定的段,並在段之間添加普通符號
awk '/root/' 1.txt:過濾指定的字符串root
awk -F':' '$1=="root"' 1.txt:按段精確過濾,數字時不能用引號包圍!
awk -F':' '$3=="'$a'"' 1.txt:awk中使用外部變量精確匹配
awk -F':' '$3~/oo/' 1.txt:awk中模糊匹配
awk -F':' '/root/; $1~/lin/; $3~/50/' 1.txt:逗號分隔多個條件。每一個條件匹配完再匹配下一條件。有可能會重複...
條件操做符:
awk的邏輯操做符:>:大於
>=:大於等於
==:等於
!=:不等於
<=:小於等於
<:小於
awk -F':' '$7!="/sbin/nologin"' 1.txt:
awk -F':' '$3<$4' 1.txt
awk內置變量:&&:而且
||:或者,區別於逗號。過濾後不會出現重複
awk特殊操做:$0:表示整行
NF:段數
NR:行號
OFS:分隔符
awk -F':' '{print $NF}' 1.txt
awk -F':' '{if ($1~/root/) print $0}' 1.txt:if條件操做
awk -F':' '$2="abc"' 1.txt:賦值操做,非數值加雙引【右值能夠是某一段】
awk -F':' '{(sum=sum+$3)}; END {print sum}' 1.txt:awk中定義變量
awk -F':' '$1=="root"&&$1="toor {OFS=':' ; print}"' 1.txt:OFS指定操做後的分隔符,賦值後默認分隔符爲空格