第三章?課程筆記
1、用戶user
u令牌token,identity
uLinux用戶:Username/UID
u管理員:root, 0
u普通用戶:1-65535
系統用戶:1-499, 1-999 (CentOS7)
對守護進程獲取資源進行權限分配
登錄用戶:500+, 1000+(CentOS7)
交互式登錄
1)、查看用戶的身份UID。id -u ;0是管理員。不是0就是不管理員。
2)、1-499、1-999是給服務用的。mysql系統中系統賬號,執行某些程序,是不需要登錄的。linux組也要有id??梢栽试S沖突。
3)、進程所能訪問資源的權限取決于進程的運行者的身份。
2、組group
uLinux組:Groupname/GID
u管理員組:root, 0
u普通組:
系統組:1-499, 1-999(CENTOS7)
普通組:500+, 1000+(CENTOS7)
linux組:主要組(primary group)附加組;(supplementary group)
- 、第一個用戶名,第二個組名。
3、安全上下文
uLinux安全上下文
運行中的程序:進程 (process)
以進程發起者的身份運行:
root: /bin/cat
mage: /bin/cat
進程所能夠訪問資源的權限取決于進程的運行者的身份
4、linux用戶和組的主要配置文件:、etc/passwd。etc/group。/etc/shadow..//etc/gshadow.
5、組的類別
uLinux組的類別
用戶的主要組(primary group)
用戶必須屬于一個且只有一個主組
組名同用戶名,且僅包含一個用戶,私有組
用戶的附加組(supplementary group)
一個用戶可以屬于零個或多個輔助組
6、用戶和組的配置文件
uLinux用戶和組的主要配置文件:
/etc/passwd:用戶及其屬性信息(名稱、UID、主組ID等)
/etc/group:組及其屬性信息
/etc/shadow:用戶密碼及其相關屬性
/etc/gshadow:組密碼及其相關屬性
7、passwd文件格式
ulogin name:登錄用名(wang)
upasswd:密碼 (x)
uUID:用戶身份編號 (1000)
uGID:登錄默認所在組編號 (1000)
uGECOS:用戶全名或注釋
uhome directory:用戶主目錄 (/home/wang)
ushell:用戶默認使用shell (/bin/bash)
1)、七個字段,1、名字。2、口令。3.id。4、描述信息。5、家目錄。6、文件位置。
2)rz在windows里面傳文件。hexdup -c查看二進制文件。
8、shadow文件格式
u登錄用名
u用戶密碼:一般用sha512加密
u從1970年1月1日起到密碼最近一次被更改的時間
u密碼再過幾天可以被變更(0表示隨時可被變更)
u密碼再過幾天必須被變更(99999表示永不過期)
u密碼過期前幾天系統提醒用戶(默認為一周)
u密碼過期幾天后帳號會被鎖定
u從1970年1月1日算起,多少天后帳號失效
9、group文件格式
u群組名稱:就是群組名稱
u群組密碼:通常不需要設定,密碼是被記錄在
/etc/gshadow
uGID:就是群組的 ID
u以當前組為附加組的用戶列表(分隔符為逗號)
10、gshdow文件格式
u群組名稱:就是群組名稱
u群組密碼:
u組管理員列表:組管理員的列表,更改組密碼和成員
u以當前組為附加組的用戶列表:(分隔符為逗號)
11、管理命令:useradd,usermod,wuerdel.groupadd groupmod,groupdel.
12、組和用戶id保持一個樣。添加組之類的可以添加其屬性。
13、用戶創建:useradd
u useradd [options] LOGIN
-u UID
-o 配合-u 選項,不檢查UID的唯一性
-g GID:指明用戶所屬基本組,可為組名,也可以GID
-c “COMMENT”:用戶的注釋信息
-d HOME_DIR: 以指定的路徑(不存在)為家目錄
-s SHELL: 指明用戶的默認shell程序
可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,…]:為用戶指明附加組,組須事先存在
-N 不創建私用組做主組,使用users組做主組
-r: 創建系統用戶 CentOS 6: ID<500,CentOS 7: ID<1000
-m 創建家目錄,用于系統用戶
-M 不創建家目錄,用于非系統用戶
14、創建用戶: useradd
u默認值設定:/etc/default/useradd文件中
u顯示或更改默認設置
useradd -D
useradd –D -s SHELL
useradd –D –b BASE_DIR
useradd –D –g GROUP
15、用戶屬性修改
u usermod [OPTION] login
-u UID: 新UID
-g GID: 新主組
-G GROUP1[,GROUP2,…[,GROUPN]]]:新附加組,原來的附加組將會被覆蓋;
若保留原有,則要同時使用-a選項
-s SHELL:新的默認SHELL
-c ‘COMMENT’:新的注釋信息
-d HOME: 新家目錄不會自動創建;若要創建新家目錄并移動原家數據,同時使
用-m選項
-l login_name: 新的名字;
-L: lock指定用戶,在/etc/shadow 密碼欄的增加 !
-U: unlock指定用戶,將 /etc/shadow 密碼欄的 ! 拿掉
-e YYYY-MM-DD: 指明用戶賬號過期日期
-f INACTIVE: 設定非活動期限
16、刪除用戶
uuserdel [OPTION]… login
-r: 刪除用戶家目錄
17、查看用戶相關的ID信息
uid [OPTION]… [USER]
-u: 顯示UID
-g: 顯示GID
-G: 顯示用戶所屬的組的ID
-n: 顯示名稱,需配合ugG使用
18、去掉輔助組,-G后面加雙引號。
19、切換用戶或以其他用戶身份執行命令
usu [options…] [-] [user [args…]]
u切換用戶的方式:
su UserName:非登錄式切換,即不會讀取目標用戶的配置文件,不改變
當前工作目錄
su – UserName:登錄式切換,會讀取目標用戶的配置文件,切換至家目
錄,完全切換
uroot su至其他用戶無須密碼;非root用戶切換時需要密碼
u換個身份執行命令:
su [-] UserName -c ‘COMMAND’
u選項:-l –login
su -l UserName 相當于 su – UserName
- su wang非登錄切換。。su -wang,重新登錄。
20、設置密碼
upasswd [OPTIONS] UserName: 修改指定用戶的密碼
u常用選項:
-d:刪除指定用戶密碼
-l:鎖定指定用戶
-u:解鎖指定用戶
-e:強制用戶下次登錄修改密碼
-f: 強制操作
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天開始警告
-i inactivedays:非活動期限
–stdin:從標準輸入接收用戶密碼
echo “PASSWORD” | passwd –stdin USERNAME
21、創建組
ugroupadd [OPTION]… group_name
-g GID: 指明GID號;[GID_MIN, GID_MAX]
-r: 創建系統組
CentOS 6: ID<500
CentOS 7: ID<1000
22、修改和刪除組
u組屬性修改:groupmod
groupmod [OPTION]… group
-n group_name: 新名字
-g GID: 新的GID
u組刪除:groupdel
groupdel GROUP
23、更改組密碼
u組密碼:gpasswd
ugpasswd [OPTION] GROUP
-a user 將user添加至指定組中
-d user 從指定組中移除用戶user
-A user1,user2,… 設置有管理權限的用戶列表
unewgrp命令:臨時切換主組
如果用戶本不屬于此組,則需要組密碼
- 文件權限
文件屬性操作
? chown 設置文件的所有者
? chgrp 設置文件的屬組信息
25、修改文件的屬主和屬組
u修改文件的屬主:chown
chown [OPTION]… [OWNER][:[GROUP]] FILE…
用法:
OWNER
OWNER:GROUP
:GROUP
命令中的冒號可用.替換
-R: 遞歸
chown [OPTION]… –reference=RFILE FILE…
u修改文件的屬組:chgrp
chgrp [OPTION]… GROUP FILE…
chgrp [OPTION]… –reference=RFILE FILE…
-R 遞歸
26、文件權限
u文件的權限主要針對三類對象進行定義
owner: 屬主, u
group: 屬組, g
other: 其他, o
u每個文件針對每類訪問者都定義了三種權限
r: Readable
w: Writable
x: eXcutable
27、文件權限
u文件:
r: 可使用文件查看類工具獲取其內容
w: 可修改其內容
x: 可以把此文件提請內核啟動為一個進程
u目錄:
r: 可以使用ls查看此目錄中文件列表
w: 可在此目錄中創建文件,也可刪除此目錄中的文件
x: 可以使用ls -l查看此目錄中文件列表,可以cd進入此目錄
28、文件權限操作命令
u chmod
29、echo $PATH查外部命令的位置。
30、echo centos |passwd –stdin wang.修改口令。
31、newgrp,更改存到組的位置。
32、文件權限;
r讀、w寫、x執行文件。文本腳本,二進制程序。
33、chown改變所有者。chgrp在所在的組就能改變其所屬組。
34、-R 遞歸行為。
35、chmod 修改權限。chmod ?u+x ,g=rw ,o=;
36、修改權限。4r 2w 1x ?o。
r.能看到文件。w、可以添加,刪除。、x、可以打開,執行。
37、文件是否能刪除,取決于文件夾。
38、chmod –reference 參考權限。
39、X對于文件夾加權限,對于文件就不加權限。
40、chomd -R -X。表示遞歸。
41、修改文件權限
uchmod [OPTION]… OCTAL-MODE FILE…
-R: 遞歸修改權限
uchmod [OPTION]… MODE[,MODE]… FILE…
MODE:
修改一類用戶的所有權限:
u= g= o= ug= a= u=,g=
修改一類用戶某位或某些位權限
u+ u- g+ g- o+ o- a+ a- + –
uchmod [OPTION]… –reference=RFILE FILE…
參考RFILE文件的權限,將FILE的修改為同RFILE
42、新建文件和目錄的默認權限
uumask值 可以用來保留在創建文件權限
u新建FILE權限: 666-umask
如果所得結果某位存在執行(奇數)權限,則將其權限+1
u新建DIR權限: 777-umask
u非特權用戶umask是 002
uroot的umask 是 022
uumask: 查看
uumask #: 設定
umask 002
uumask –S 模式方式顯示
uumask –p 輸出可被調用
u全局設置: /etc/bashrc 用戶設置:~/.bashrc
- Linux文件系統上的特殊權限uSUID, SGID, Stickyu三種常用權限:r, w, x user, group, otheru安全上下文u前提:進程有屬主和屬組;文件有屬主和屬組 (1) 任何一個可執行程序文件能不能啟動為進程,取決發起者對程序文件是否擁有執行權限 (2) 啟動為進程之后,其進程的屬主為發起者,進程的屬組為發起者所屬的組 (3) 進程訪問文件時的權限,取決于進程的發起者(a) 進程的發起者,同文件的屬主:則應用文件屬主權限(b) 進程的發起者,屬于文件屬組;則應用文件屬組權限(c) 應用文件“其它”
44、可執行文件上SUID權限
u任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有
執行權限
u啟動為進程之后,其進程的屬主為原程序文件的屬主
uSUID只對二進制可執行程序有效
uSUID設置在目錄上無意義
u權限設定:
chmod u+s FILE…
chmod u-s FILE…
45、可執行文件上SGID權限
u任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有
執行權限
u啟動為進程之后,其進程的屬組為原程序文件的屬組
u權限設定:
chmod g+s FILE…
chmod g-s FILE…
46、目錄上的SGID權限
u默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組
u一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件
所屬的組為此目錄的屬組
u通常用于創建一個協作目錄
u權限設定:
chmod g+s DIR…
chmod g-s DIR…
47、Sticky 位
u具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該
文件的權限或擁有權
u在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件
usticky 設置在文件上無意義
u權限設定:
chmod o+t DIR…
chmod o-t DIR…
- 訪問控制列表
ACL:Access Control List,實現靈活的權限管理
u除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限
uCentOS7 默認創建的xfs和ext4文件系統具有ACL功能
uCentOS7 之前版本,默認手工創建的ext4文件系統無ACL功能,需手動增加
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt/test
uACL生效順序:所有者,自定義用戶,自定義組,其他人
- 訪問控制列表
為多用戶或者組的文件和目錄賦予訪問權限rwx
- mount -o acl /directory
- getfacl file |directory
- setfacl -m u:wang:rwx file|directory
- setfacl -Rm g:sales:rwX directory
- setfacl -M file.acl file|directory
- setfacl -m g:salesgroup:rw file| directory
- setfacl -m d:u:wang:rx directory
- setfacl -x u:wang file |directory
- setfacl -X file.acl directory
50、umask默認權限。
51、umask+default=666file|777directory;奇數具有執行權限。
52、default=666/777-unmask;
對文件,用666減umask結果如有奇數,加1.
53、當用戶運行程序的時候變成程序的所有者了。suid。臨時提升權限的通道。suid只能在二進制上運行。sgid所屬組權限。年至位。sticky.其他人的權限。
54、訪問控制列表;ACL;實現靈活的權限管理。針對特殊的用戶設置特殊的權限。
第四章筆記
- 抽取文本的工具
文件內容:less和 cat
u文件截取:head和tail
u按列抽取:cut
u按關鍵字抽?。篻rep
- cut抽取文本的方式。
1)取分區利用率。df |cut -d”%” -f1 |tr -s ‘ ‘|cut -d” ” -f5
2)df |tr -s ‘ ‘ ‘%’|cut -d “%” -f5
3、文件查看
文件查看命令:
cat,tac,rev
ucat [OPTION]… [FILE]… -E: 顯示行結束符$ -n: 對顯示出的每一行進行編號
-A:顯示所有控制符 -b:非空行編號 -s:壓縮連續的空行成一行u
tac、豎著反著顯示。rev、橫著反著顯示的。
4、分頁查看文件內容
umore: 分頁查看文件
more [OPTIONS…] FILE…
-d: 顯示翻頁及退出提示
uless:一頁一頁地查看文件或STDIN輸出
查看時有用的命令包括:
/文本 搜索 文本
n/N 跳到下一個 或 上一個匹配
less 命令是man命令使用的分頁器
5、顯示文本前或后行內容
uhead [OPTION]… [FILE]…
-c #: 指定獲取前#字節
-n #: 指定獲取前#行
-#: 指定行數
utail [OPTION]… [FILE]…
-c #: 指定獲取后#字節
-n #: 指定獲取后#行
-#:
-f: 跟蹤顯示文件fd新追加的內容,常用日志監控
相當于 –follow=descriptor
-F: 跟蹤文件名,相當于—follow=name –retry
utailf 類似tail –f,當文件不增長時并不訪問文件
6、按列抽取文本cut和合并文件paste
ucut [OPTION]… [FILE]…
-d DELIMITER: 指明分隔符,默認tab
-f FILEDS:
#: 第#個字段
#,#[,#]:離散的多個字段,例如1,3,6
#-#:連續的多個字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
–output-delimiter=STRING指定輸出分隔符
- paste 合并兩個文件同行號的列到一行。paste f1 f2.paste-s
7、cut和paste
u顯示文件或STDIN數據的指定列
cut -d: -f1 /etc/passwd
cat /etc/passwd | cut -d: -f7
cut -c2-5 /usr/share/dict/words
upaste 合并兩個文件同行號的列到一行
paste [OPTION]… [FILE]…
-d 分隔符:指定分隔符,默認用TAB
-s : 所有行合成一行顯示
paste f1 f2
paste -s f1 f2
1)取用戶的uid:cut -d: -f3 /etc/passwd|sort -nr
8、分析文本的工具
u文本數據統計:wc
u整理文本:sort
u比較文件:diff和patch
1)wc.統計出來的三個數依次為,行數、字數、字節數。wc-r執行反方向整理。w-R 隨機排序。w-n執行按照數字大小整理,-f忽略字符串中的字符大小寫。 -t c使用c作為字段界定符,-k x使用c字符分隔的x列來整理能夠使用多少次。
2)、sort排序。sort-t.-n正序,數字大小,-r反方向。
9、收集文本統計數據wc
u計數單詞總數、行總數、字節總數和字符總數
u可以對文件或STDIN中的數據運行
wc story.txt
39 237 1901 story.txt
行數 字數 字節數
u常用選項
?-l只計數行數
?-w 只計數單詞總數
?-c 只計數字節總數
?-m 只計數字符總數
?-L 顯示文件中最長行的長度
10、文本排序sort
u把整理過的文本顯示在STDOUT,不改變原始文件
sort [options] file(s)
u常用選項
?-r 執行反方向(由上至下)整理
?-R 隨機排序
?-n 執行按數字大小整理
?-f 選項忽略(fold)字符串中的字符大小寫
?-u 選項(獨特,unique)刪除輸出中的重復行
?-t c 選項使用c做為字段界定符
?-k X 選項按照使用c字符分隔的X列來整理能夠使用多次
11、抽取隨機數。echo {1..55}|tr ‘ ‘ ‘\n’ |sort -R|head -n1
seq 55|sort -R|head -n1…echo $RANDOM…echo $[PANDOM%55+1]
12、抽取訪問用戶的ip地址,訪問量最多的排序:cut -d ” ” -f1 ?access_log |sort |uniq -c|sort -nr| tr -s ‘ ‘ ?|cut -d” ” -f3
13、sort -t ” ” -k 1 access_log |cut -d ” ” -f1 |uniq -c |sort -nr |tr -s ” ” | cut -d ” ” -f3 |head -n 3
14、uniquuniq命令:從輸入中刪除前后相接的重復的行uuniq [OPTION]… [FILE]…-c: 顯示每行重復出現的次數-d: 僅顯示重復過的行-u: 僅顯示不曾重復的行 注:連續且完全相同方為重復u常和sort 命令一起配合使用: sort userlist.txt | uniq
15、last命令,當前用戶登陸的情況。
16、利用last命令統計用戶登陸的次數。last |sort |cut -d ” ” -f1|uniq -c
17、diff比較兩個文件的不同。diff f1 f2
18、uniq-d僅顯示重復的行。catf1 f2|sort|uniq-u.
19、linux文件處理三劍客:grep文本過濾。sed、文本編輯工具。awk,文本報告生成器。
20、grep
ugrep: Global search REgular expression and Print out the line
作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢
查;打印匹配到的行
模式:由正則表達式字符及文本字符所編寫的過濾條件
ugrep [OPTIONS] PATTERN [FILE…]
grep root /etc/passwd
grep “$USER” /etc/passwd
grep ‘$USER’ /etc/passwd
grep `whoami` /etc/passwd
1)grep用法。grep rooot /etc/passwd…..grep `whoami` /etc/passwd ??…..grep $USER ?/etc/passwd
2)利用grep取分區利用率df -h|grep ‘/dev/sd’|tr -s ‘ ‘ ‘%’|cut -d”%” -f5..
3)grep -q ‘/sbin/nologin’ /etc/passwd ??利用echo¥?查看是否找到,0為有,其余為無。
4)利用grep取ip:ifconfig |grep -o ?“[0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}”
21、grep命令選項u
–color=auto: 對匹配到的文本著色顯示u -v: 顯示不被pattern匹配到的行u -i: 忽略字符大小寫u -n:顯示匹配的行號u -c: 統計匹配的行數u -o: 僅顯示匹配到的字符串u -q: 靜默模式,不輸出任何信息u -A #: after, 后#行u -B #: before, 前#行u -C #:context, 前后各#行u -e:實現多個選項間的邏輯or關系grep –e ‘cat ’ -e ‘dog’ fileu -w:匹配整個單詞u -E:使用EREu -F:相當于fgrep,不支持正則表
22、正則表達式
uREGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)
不表示字符字面意義,而表示控制或通配的功能
u程序支持:grep,sed,awk,vim, less,nginx,varnish等
u分兩類:
基本正則表達式:BRE
擴展正則表達式:ERE
grep -E, egrep
u正則表達式引擎:
采用不同算法,檢查處理正則表達式的軟件模塊
PCRE(Perl Compatible Regular Expressions)
u元字符分類:字符匹配、匹配次數、位置錨定、分組
uman 7 regex
23、基本正則表達式元字符
u 字符匹配:
. 匹配任意單個字符
[] 匹配指定范圍內的任意單個字符
[^] 匹配指定范圍外的任意單個字符
[:alnum:] 字母和數字
[:alpha:] 代表任何英文大小寫字符,亦即 A-Z, a-z
[:lower:] 小寫字母 [:upper:] 大寫字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范圍廣)
[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴…)
[:digit:] 十進制數字 [:xdigit:]十六進制數字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號
正則表達式
u匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數
* 匹配前面的字符任意次,包括0次
貪婪模式:盡可能長的匹配
.* 任意長度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次
正則表達式
u位置錨定:定位出現的位置
^ 行首錨定,用于模式的最左側
$ 行尾錨定,用于模式的最右側
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 詞首錨定,用于單詞模式的左側
\> 或 \b 詞尾錨定;用于單詞模式的右側
\<PATTERN\> 匹配整個單詞
1)、位置錨固。^行首,$行尾。^空行。\<單詞左側。\>單詞右側。
2)、更改網卡查找指定行的命令。grep ‘^[[:space:]]\+linux16’ /boot/grub2/grub.cfg|grep -v rescue
3)利用正則表達式抽取磁盤利用率;df -h |grep “/dev/sd”|grep -o “[[:digit:]]\+%” |grep -o “[[:digit:]]\+”
4)正則表達式分組例子:grep “^\(root\):.*\1.*” /etc/passwd
5)后向引用:grep “\(r..t\).*\1” f1。。取ip地址:ifconfig |grep -wo “\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}”。
24、正則表達式
u分組:\(\) 將一個或多個字符捆綁在一起,當作一個整體進行處理,如:
\(root\)\+
u分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這
些變量的命名方式為: \1, \2, \3, …
u\1 表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符
u示例: \(string1\+\(string2\)*\)
\1 :string1\+\(string2\)*
\2 :string2
u后向引用:引用前面的分組括號中的模式所匹配字符,而非模式本身
u或者:\|
示例:a\|b: a或b C\|cat: C或cat \(C\|c\)at:Cat或cat
25、egrep及擴展的正則表達式
uegrep = grep -E
uegrep [OPTIONS] PATTERN [FILE…]
u擴展正則表達式的元字符:
u字符匹配:
. 任意單個字符
[] 指定范圍的字符
[^] 不在指定范圍的字符
擴展正則表達式
u次數匹配:
*:匹配前面字符任意次
?: 0或1次
+:1次或多次
{m}:匹配m次
{m,n}:至少m,至多n次
擴展正則表達式
u位置錨定:
^ :行首
$ :行尾
\<, \b :語首
\>, \b :語尾
u分組:
()
后向引用:\1, \2, …
u或者:
a|b: a或b
C|cat: C或cat
(C|c)at:Cat或cat
1)擴展的正則表達式。grep -E。。。。取ip地址:ifconfig |grep -Ewo “([0-9]{1,3}\.){3}[0-9]{1,3}”
2)查看光盤中的文件數量;ls *.rpm |rev |cut -d. -f2|rev|sort |uniq -c。。。。
利用正則表達式:ls *.rpm |grep -Eo “\.\<[[:alnum:]_]+\>\.rpm$” |cut -d. -f2|sort |uniq -c
- vim簡介uvi: Visual Interface,文本編輯器u文本:ASCII, Unicodeu文本編輯種類:行編輯器: sed全屏編輯器:nano, vivim – Vi Improvedu其他編輯器:gedit 一個簡單的圖形編輯器gvim 一個Vim編輯器的圖形
vim簡介;文本編輯器。 ?gedit圖形編輯器。
vim各項命令的使用。
27、打開文件
u# vim [OPTION]… FILE…
+#: 打開文件后,讓光標處于第#行的行首,+默認行尾
+/PATTERN:打開文件后,直接讓光標處于第一個被PATTERN匹配到的行的
行首
–b file 二進制方式打開文件
–d file1 file2… 比較多個文件
-m file 只讀打開文件
uex file 或 vim –e 直接進入ex模式
u如果該文件存在,文件被打開并顯示內容
如果該文件不存在,當編輯后第一次存盤時創建它
- vim:一個模式編輯u擊鍵行為是依賴于 vim的 的“模式”u三種主要模式:?命令(Normal)模式:默認模式,移動光標,剪切/粘貼文本?插入(Insert)或編輯模式: 修改文本?擴展命令(extended command )模式: 保存,退出等uEsc鍵 退出當前模式uEsc鍵 Esc鍵 總是返回到命令
29、模式轉換
u命令模式 –> 插入模式
i: insert, 在光標所在處輸入
I:在當前光標所在行的行首輸入
a: append, 在光標所在處后面輸入
A:在當前光標所在行的行尾輸入
o: 在當前光標所在行的下方打開一個新行
O:在當前光標所在行的上方打開一個新行
模式轉換
u插入模式 ——–> 命令模式
ESC
u命令模式 ——–> 擴展命令模式
:
u擴展命令模式 ——–> 命令模式
ESC,enter
30、關閉文件
u擴展模式:
:q 退出
:q! 強制退出,丟棄做出的修改
:wq 保存退出
:x 保存退出
u命令模式
ZZ: 保存退出
ZQ:不保存退出
31、擴展模式
u按“:”進入Ex模式
u創建一個命令提示符: 處于底部的屏幕左側
u命令:
w 寫(存)磁盤文件
wq 寫入并退出
x 寫入并退出
q 退出
q! 不存盤退出,即使更改都將丟失
r filename 讀文件內容到當前文件中
w filename 將當前文件內容寫入另一個文件
!command 執行命令
r!command 讀入命令的輸出
31、命令模式光標跳轉
u字符間跳轉:
h: 左 l: 右 j: 下 k: 上
#COMMAND:跳轉由#指定的個數的字符
u單詞間跳轉:
w:下一個單詞的詞首
e:當前或下一單詞的詞尾
b:當前或前一個單詞的詞首
#COMMAND:由#指定一次跳轉的單詞數
u當前頁跳轉:
H:頁首 M:頁中間行 L:頁底
32、命令模式光標跳轉
u行首行尾跳轉:
^: 跳轉至行首的第一個非空白字符
0: 跳轉至行首
$: 跳轉至行尾
u行間移動:
#G、擴展模式:# :跳轉至由#指定行
G:最后一行
1G, gg: 第一行
u句間移動:
):下一句 (:上一句
u段落間移動:
}:下一段 {:上一段
33、命令模式操作
u字符編輯:
x: 刪除光標處的字符
#x: 刪除光標處起始的#個字符
xp: 交換光標所在處的字符及其后面字符的位置
~:轉換大小寫
J:刪除當前行后的換行符
u替換命令(r, replace)
r: 替換光標所在處的字符
R:切換成REPLACE模式
34、命令模式操作
u刪除命令:
d: 刪除命令,可結合光標跳轉字符,實現范圍刪除
d$: 刪除到行尾
d^:刪除到非空行首
d0:刪除到行首
dw:
de:
db:
#COMMAND
udd: 刪除光標所在的行
#dd:多行刪除
uD:從當前光標位置一直刪除到行尾,留空行,等同于d$
35、命令模式操作
u復制命令(y, yank):
y: 復制,行為相似于d命令
y$
y0
y^
ye
yw
yb
#COMMAND
uyy:復制行
#yy: 復制多行
uY: 復制整行
36、命令模式操作
u粘貼命令(p, paste):
p:緩沖區存的如果為整行,則粘貼當前光標所在行的下方;否則,則粘貼
至當前光標所在處的后面
P:緩沖區存的如果為整行,則粘貼當前光標所在行的上方;否則,則粘貼
至當前光標所在處的前面
37、命令模式操作
u 改變命令(c, change)
c: 修改后切換成插入模式
u 命令模式 –> 插入模式
c$
c^
c0
cb
ce
cw
#COMMAND
u cc:刪除當前行并輸入新內容,相當于S
#cc:
u C:刪除當前光標到行尾,并切換成插入模式
38、擴展命令模式:地址定界
u地址定界
:start_pos,end_pos
# 具體第#行,例如2表示第2行
#,# 從左側#表示起始行,到右側#表示結尾行
#,+# 從左側#表示的起始行,加上右側#表示的行數
:2,+3 表示2到5行
. 當前行
$ 最后一行
.,$-1 當前行到倒數第二行
% 全文, 相當于1,$
39、擴展命令模式:地址定界
u/pat1/,/pat2/
從第一次被pat1模式匹配到的行開始,一直到第一次被pat2匹配到的行結
束
#,/pat/
/pat/,$
u使用方式:后跟一個編輯命令
d
y
w file: 將范圍內的行另存至指定文件中
r file:在指定位置插入指定文件中的所有內容
40、擴展命令模式:查找
u查找
/PATTERN:從當前光標所在處向文件尾部查找
?PATTERN:從當前光標所在處向文件首部查找
n:與命令同方向
N:與命令反方向
41、擴展命令模式:查找并替換
us: 在擴展模式下完成查找替換操作
格式:s/要查找的內容/替換為的內容/修飾符
要查找的內容:可使用模式
替換為的內容:不能使用模式,但可以使用\1, \2, …等后向引用符號;還可
以使用“&”引用前面查找時查找到的整個內容
修飾符:
i: 忽略大小寫
g: 全局替換;默認情況下,每一行只替換第一次出現
gc:全局替換,每次替換前詢問
u查找替換中的分隔符/可替換為其它字符,例如
s@/etc@/var@g
s#/boot#/#i
42、命令模式:撤消更改
uu撤銷最近的更改
u#u撤銷之前多次更改
uU 撤消光標落在這行后所有此行的更改
u按Ctrl – r重做最后的“撤消”更改
- u. 重復前一個操作
un.重復前一個操作n次
43、可視化模式
u允許選擇的文本塊
v 面向字符
V 面向行
ctrl-v 面向塊
u可視化鍵可用于與移動鍵結合使用:
w ) } 箭頭等
u突出顯示的文字可被刪除,復制,變更,過濾,搜索,替換等
44、使用多個“窗口”
u多文件分割
vim -o|-O FILE1 FILE2 …
-o: 水平分割
-O: 垂直分割
在窗口間切換:Ctrl+w, Arrow
u單文件窗口分割:
Ctrl+w,s: split, 水平分割
Ctrl+w,v: vertical, 垂直分割
ctrl+w,q:取消相鄰窗口
ctrl+w,o:取消全部窗口
:wqall 退出
45、定制vim的工作特性
u配置文件:永久有效
全局:/etc/vimrc
個人:~/.vimrc
u擴展模式:當前vim進程有效
u(1) 行號
顯示:set number, 簡寫為set nu
取消顯示:set nonumber, 簡寫為set nonu
u(2) 忽略字符的大小寫
啟用:set ic
不忽略:set noic
u(3) 自動縮進
啟用:set ai
禁用:set noai
46、定制vim的工作特性
u(4) 智能縮進
啟用:smartindent 簡寫 set si
禁用:set nosi
u(5) 高亮搜索
啟用:set hlsearch
禁用:set nohlsearch
u(6) 語法高亮
啟用:syntax on
禁用:syntax off
u(7) 顯示Tab和換行符 ^I 和$顯示
啟用:set list
禁用:set nolist
47、配置 vi and vim
u(8) 文件格式
啟用windows格式:set fileformat=dos
啟用unix格式:set fileformat=unix
簡寫: set ff=dos|unix
u(9) 設置文本寬度
啟用: set textwidth=65 (vim only)
禁用: set wrapmargin=15
u(10) 設置光標所在行的標識線
啟用:set cursorline,簡寫cul
禁用:set no cursorline
u(11) 復制保留格式
啟用: set paste
禁用: set nopaste
48、了解更多
uSet 幫助
?:help option-list
?:set or :set all
uvi/vim內置幫助
:help
:help topic
Use :q to exit help
uvimtutor
- 替換文件:%s/^[^#]/# ?S@/etc@/var@g ?..S#/boot#/#i
- 處理文本的工具sed
uStream EDitor, 行編輯器
used是一種流編輯器,它一次處理一行內容。處理時,把當前
處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern
space),接著用sed命令處理緩沖區中的內容,處理完成后,
把緩沖區的內容送往屏幕。然后讀入下行,執行下一個循環。
如果沒有使諸如‘D’的特殊命令,那會在兩個循環之間清空
模式空間,但不會清空保留空間。這樣不斷重復,直到文件末
尾。文件內容并沒有改變,除非你使用重定向存儲輸出。
u功能:主要用來自動編輯一個或多個文件,簡化對文件的反復
操作,編寫轉換程序等
1)、sed命令。行編輯器。一次處理一行內容,
2)取ip地址。ifconfig |sed -n ‘2p’|tr -s ‘ ‘ ‘ ‘|cut -d ” ” -f3,5,7
3)sed ‘s@quiet@& net.ifnames=0@’ /etc/default/grub
ifconfig eth0 |sed -n ‘2p’|sed ‘s/^.*net //’|sed ‘s/ ?netmask.*//’
4)sed ?‘s/quiet/& net.ifnames=0/’ /etc/default/grub
5)sed ?‘/GRUB_CMDLINE_LINUX/s/”$/ net.ifnames=0 &/’ /etc/default/grub
6)sed -r ‘/GRUB_CMDLINE_LINUX/s/(.*)”/\1 net.ifnames=0″/’ /etc/default/grub
7)sed -r -e ?‘s/^#(NameVirtualHost)/\1/’ -e ‘/^#<VirtualHost/,/^#<\/VirtualHost/s/#//’ /etc/httpd/conf/httpd.conf
51、sed工具
u用法:
sed [option]… ‘script’ inputfile…
u常用選項:
-n:不輸出模式空間內容到屏幕,即不自動打印
-e: 多點編輯
-f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本
-r: 支持使用擴展正則表達式
-i.bak: 備份文件并原處編輯
uscript:
‘地址命令
52、sed工具
u地址定界:
(1) 不給地址:對全文進行處理
(2) 單地址:
#: 指定的行,$:最后一行
/pattern/:被此處模式所能夠匹配到的每一行
(3) 地址范圍:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步進
1~2 奇數行
2~2 偶數行
- sed工具u 編輯命令:d: 刪除模式空間匹配的行,并立即啟用下一輪循環p:打印當前模式空間內容,追加到默認輸出之后a [\]text:在指定行后面追加文本支持使用\n實現多行追加i [\]text:在行前面插入文c [\]text:替換行為單行或多行文w /path/somefile: 保存模式匹配的行至指定文件r /path/somefile:讀取指定文件的文本至模式空間中匹配到的行后=: 為模式空間中的行打印行號!:模式空間中匹配行取反
54、sed工具
us///:查找替換,支持使用其它分隔符,s@@@,s###
u替換標記:
g: 行內全局替換
p: 顯示替換成功的行
w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
55、高級編輯命令
uP:打印模式空間開端至\n內容,并追加到默認輸出之前
uh: 把模式空間中的內容覆蓋至保持空間中
uH:把模式空間中的內容追加至保持空間中
ug: 從保持空間取出數據覆蓋至模式空間
uG:從保持空間取出內容追加至模式空間
ux: 把模式空間中的內容與保持空間中的內容進行互換
un: 讀取匹配到的行的下一行覆蓋至模式空間
uN:讀取匹配到的行的下一行追加至模式空間
ud: 刪除模式空間中的行
uD:如果模式空間包含換行符,則刪除直到第一個換行符的模式空間中的文本,
并不會讀取新的輸入行,而使用合成的模式空間重新啟動循環。如果模式空間
不包含換行符,則會像發出d命令那樣啟動正常的新循環
56、awk介紹
u awk:Aho, Weinberger, Kernighan,報告生成器,格式化文本輸出
u 有多種版本:New awk(nawk),GNU awk( gawk)
u gawk:模式掃描和處理語言
u 基本用法:
awk [options] ‘program’ var=value file…
awk [options] -f programfile var=value file…
awk [options] ‘BEGIN{ action;… } pattern{ action;… } END{ action;… }’ file …
awk 程序通常由:BEGIN語句塊、能夠使用模式匹配的通用語句塊、END語句塊,共3部
分組成
program通常是被單引號或雙引號中
u 選項:
-F 指明輸入時用到的字段分隔符
-v var=value: 自定義變量
57、awk語言
u基本格式:awk [options] ‘program’ file…
uprogram:pattern{action statements;..}
upattern和action:
- pattern部分決定動作語句何時觸發及觸發事件
BEGIN,END
- action statements對數據進行處理,放在{}內指明
print, printf
u分割符、域和記錄
- awk執行時,由分隔符分隔的字段(域)標記$1,$2..$n稱為
域標識。$0為所有域,注意:和shell中變量$符含義不同
- 文件的每一行稱為記錄
- 省略action,則默認執行 print $0 的操作
58、awk工作原理
u 第一步:執行BEGIN{action;… }語句塊中的語句
u 第二步:從文件或標準輸入(stdin)讀取一行,然后執行
pattern{ action;… }語句塊,它逐行掃描文件,從第一行到最后一
行重復這個過程,直到文件全部被讀取完畢。
u 第三步:當讀至輸入流末尾時,執行END{action;…}語句塊
u BEGIN語句塊在awk開始從輸入流中讀取行之前被執行,這是一個
可選的語句塊,比如變量初始化、打印輸出表格的表頭等語句通常
可以寫在BEGIN語句塊中
u END語句塊在awk從輸入流中讀取完所有的行之后即被執行,比如
打印所有行的分析結果這類信息匯總都是在END語句塊中完成,它
也是一個可選語句塊
u pattern語句塊中的通用命令是最重要的部分,也是可選的。如果沒
有提供pattern語句塊,則默認執行{ print },即打印每一個讀取到的
行,awk讀取的每一行都會執行該語句塊
59、awk
u print格式:print item1, item2, …u 要點:? (1) 逗號分隔符? (2) 輸出的各item可以字符串,也可以是數值;當前記錄的字段、變量或awk的表達式? (3) 如省略item,相當于print $0u 示例: awk ‘{print “hello,awk”}’ awk –F: ‘{print}’ /etc/passwd awk –F: ‘{print “wang”}’ /etc/passwd awk –F: ‘{print $1}’ /etc/passwdawk –F: ‘{print $0}’ /etc/passwdawk –F: ‘{print $1”\t”$3}’ /etc/passwdtail –3 /etc/fstab |awk ‘{print $2,$4
60、awk變量
u 變量:內置和自定義變量
u FS:輸入字段分隔符,默認為空白字符
awk -v FS=’:’ ‘{print $1,FS,$3}’ /etc/passwd
awk –F: ‘{print $1,$3,$7}’ /etc/passwd
u OFS:輸出字段分隔符,默認為空白字符
awk -v FS=‘:’ -v OFS=‘:’ ‘{print $1,$3,$7}’ /etc/passwd
u RS:輸入記錄分隔符,指定輸入時的換行符
awk -v RS=’ ‘ ‘{print }’ /etc/passwd
u ORS:輸出記錄分隔符,輸出時用指定符號代替換行符
awk -v RS=’ ‘ -v ORS=’###’‘{print }’ /etc/passwd
u NF:字段數量
awk -F: ‘{print NF}’ /etc/fstab,引用內置變量不用$
awk -F: ‘{print $(NF-1)}’ /etc/passwd
u NR:記錄號
awk ‘{print NR}’ /etc/fstab ; awk END'{print NR}’ /etc/fstab
61、awk
uFNR:各文件分別計數,記錄號
awk ‘{print FNR}’ /etc/fstab /etc/inittab
uFILENAME:當前文件名
awk ‘{print FILENAME}’ /etc/fstab
uARGC:命令行參數的個數
awk ‘{print ARGC}’ /etc/fstab /etc/inittab
awk ‘BEGIN {print ARGC}’ /etc/fstab /etc/inittab
uARGV:數組,保存的是命令行所給定的各參數
awk ‘BEGIN {print ARGV[0]}’ /etc/fstab /etc/inittab
awk ‘BEGIN {print ARGV[1]}’ /etc/fstab /etc/inittab
62、awk變量
u自定義變量(區分字符大小寫)
(1) -v var=value
(2) 在program中直接定義
u示例:
awk -v test=’hello gawk’ ‘{print test}’ /etc/fstab
awk -v test=’hello gawk’ ‘BEGIN{print test}’
awk ‘BEGIN{test=”hello,gawk”;print test}’
awk –F:‘{sex=“male”;print $1,sex,age;age=18}’
/etc/passwd
cat awkscript
{print script,$1,$2}
awk -F: -f awkscript script=“awk” /etc/passwd
63、printf命令
u 格式化輸出:printf “FORMAT”, item1, item2, …
(1) 必須指定FORMAT
(2) 不會自動換行,需要顯式給出換行控制符,\n
(3) FORMAT中需要分別為后面每個item指定格式符
u 格式符:與item一一對應
%c: 顯示字符的ASCII碼
%d, %i: 顯示十進制整數
%e, %E:顯示科學計數法數值
%f:顯示為浮點數
%g, %G:以科學計數法或浮點形式顯示數值
%s:顯示字符串
%u:無符號整數
%%: 顯示%自身
u 修飾符:
#[.#]:第一個數字控制顯示的寬度;第二個#表示小數點后精度,%3.1f
-: 左對齊(默認右對齊) %-15s
+:顯示數值的正負符號 %+d
64、操作符
u算術操作符:
x+y, x-y, x*y, x/y, x^y, x%y
-x: 轉換為負數
+x: 轉換為數值
u字符串操作符:沒有符號的操作符,字符串連接
u賦值操作符:
=, +=, -=, *=, /=, %=, ^=
++, —
?下面兩語句有何不同
- awk ‘BEGIN{i=0;print ++i,i}’
- awk ‘BEGIN{i=0;print i++,i}’
65、操作符
u比較操作符:
==, !=, >, >=, <, <=
u模式匹配符:
~:左邊是否和右邊匹配包含 !~:是否不匹配
?示例:
awk –F: ‘$0 ~ /root/{print $1}‘ /etc/passwd
awk ‘$0~“^root”‘ /etc/passwd
awk ‘$0 !~ /root/‘ /etc/passwd
awk –F: ‘$3==0’ /etc/passwd
66、操作符u 邏輯操作符:與&&,或||,非!u 示例:? awk –F: ‘$3>=0 && $3<=1000 {print $1}’ /etc/passwd? awk -F: ‘$3==0 || $3>=1000 {print $1}’ /etc/passwd? awk -F: ‘!($3==0) {print $1}’ /etc/passwd? awk -F: ‘!($3>=500) {print $3}’ /etc/passwdu 函數調用: function_name(argu1, argu2, …)u 條件表達式(三目表達式):selector?if-true-expression:if-false-expression? 示例:awk -F: ‘{$3>=1000?usertype=”Common User”:usertype=”Sysadmin or SysUser”;printf
“%15s:%-s\n”,$1,usertype}’ /etc/pass
- awk PATTERNu PATTERN:根據pattern條件,過濾匹配的行,再做處理(1)如果未指定:空模式,匹配每一行(2) /regular expression/:僅處理能夠模式匹配到的行,需要用/ /括起來awk ‘/^UUID/{print $1}’ /etc/fstabawk ‘!/^UUID/{print $1}’ /etc/fstab(3) relational expression: 關系表達式,結果為“真”才會被處理真:結果為非0值,非空字符串假:結果為空字符串或0值u 示例:? awk -F: ‘i=1;j=1{print i,j}’ /etc/passwd awk ‘!0’ /etc/passwd ; awk ‘!1’ /etc/passwd? awk –F: ‘$3>=1000{print $1,$3}’ /etc/passwd? awk -F: ‘$3<1000{print $1,$3}’ /etc/passwd? awk -F: ‘$NF==”/bin/bash”{print $1,$NF}’ /etc/passwd? awk -F: ‘$NF ~ /bash$/{print $1,$NF}’ /etc/pass
68、awk PATTERN
u4) line ranges:行范圍
startline,endline:/pat1/,/pat2/ 不支持直接給出數字格
式
awk -F: ‘/^root\>/,/^nobody\>/{print $1}’
/etc/passwd
awk -F: ‘(NR>=10&&NR<=20){print NR,$1}’
/etc/passwd
u(5) BEGIN/END模式
BEGIN{}: 僅在開始處理文件中的文本之前執行一次
END{}:僅在文本處理完成之后執行一次
69、awk action
u常用的action分類
- (1) Expressions:算術,比較表達式等
- (2) Control statements:if, while等
- (3) Compound statements:組合語句
- (4) input statements
- (5) output statements:print等
70、awk控制語句
u{ statements;… } 組合語句
uif(condition) {statements;…}
uif(condition) {statements;…} else {statements;…}
uwhile(conditon) {statments;…}
udo {statements;…} while(condition)
ufor(expr1;expr2;expr3) {statements;…}
ubreak
ucontinue
udelete array[index]
udelete array
uexit
71、awk控制語句if-else
u 語法:if(condition){statement;…}[else statement]
if(condition1){statement1}else if(condition2){statement2}
else{statement3}
u 使用場景:對awk取得的整行或某個字段做條件判斷
u 示例:
awk -F: ‘{if($3>=1000)print $1,$3}’ /etc/passwd
awk -F: ‘{if($NF==”/bin/bash”) print $1}’ /etc/passwd
awk ‘{if(NF>5) print $0}’ /etc/fstab
awk -F: ‘{if($3>=1000) {printf “Common user: %s\n”,$1} else {printf “root or
Sysuser: %s\n”,$1}}’ /etc/passwd
awk -F: ‘{if($3>=1000) printf “Common user: %s\n”,$1;
else printf “root or Sysuser: %s\n”,$1}’ /etc/passwd
df -h|awk -F% ‘/^\/dev/{print $1}’|awk ‘$NF>=80{print $1,$5}‘
awk ‘BEGIN{ test=100;if(test>90){print “very good”}
else if(test>60){ print “good”}else{print “no pass”}}
72、awk控制語句
uwhile循環
u語法:while(condition){statement;…}
u條件“真”,進入循環;條件“假”,退出循環
u使用場景:
對一行內的多個字段逐一類似處理時使用
對數組中的各元素逐一處理時使用
u示例:
awk ‘/^[[:space:]]*linux16/{i=1;while(i<=NF)
{print $i,length($i); i++}}’ /etc/grub2.cfg
awk ‘/^[[:space:]]*linux16/{i=1;while(i<=NF) {if(length($i)>=10)
{print $i,length($i)}; i++}}’ /etc/grub2.cfg
73、awk控制語句
udo-while循環
u語法:do {statement;…}while(condition)
u意義:無論真假,至少執行一次循環體
u示例:
- awk ‘BEGIN{ total=0;i=0;do{ total+=i;i++;}while(i<=100);print total}‘
74、awk控制語句
ufor循環
u語法:for(expr1;expr2;expr3) {statement;…}
u常見用法:
for(variable assignment;condition;iteration process)
{for-body}
u特殊用法:能夠遍歷數組中的元素
語法:for(var in array) {for-body}
u示例:
awk ‘/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}’
/etc/grub2.cfg
75、awk控制語句
ubreak [n]
ucontinue [n]
unext:
提前結束對本行處理而直接進入下一行處理(awk自身循環)
awk -F: ‘{if($3%2!=0) next; print $1,$3}’ /etc/passwd
76、awk數組
u若要遍歷數組中的每個元素,要使用for循環
ufor(var in array) {for-body}
u注意:var會遍歷array的每個索引
u示例:
- awk ‘BEGIN{weekdays[“mon”]=”Monday”;weekdays[“tue”]
=”Tuesday”;for(i in weekdays) {print weekdays[i]}}‘
- netstat -tan | awk ‘/^tcp/{state[$NF]++}END
{for(i in state) { print i,state[i]}}’
- awk ‘{ip[$1]++}END{for(i in ip) {print i,ip[i]}}’
/var/log/httpd/access_log
77、awk函數
u 數值處理:
rand():返回0和1之間一個隨機數
awk ‘BEGIN{srand(); for (i=1;i<=10;i++)print int(rand()*100) }’
u 字符串處理:
- length([s]):返回指定字符串的長度
- sub(r,s,[t]):對t字符串進行搜索r表示的模式匹配的內容,并將第一個匹配的內容替換為s
echo “2008:08:08 08:08:08” | awk ‘sub(/:/,“-“,$1)’
- gsub(r,s,[t]):對t字符串進行搜索r表示的模式匹配的內容,并全部替換為s所表示的內容
echo “2008:08:08 08:08:08” | awk ‘gsub(/:/,“-“,$0)’
- split(s,array,[r]):以r為分隔符,切割字符串s,并將切割后的結果保存至array所表示的數組中,
第一個索引值為1,第二個索引值為2,…
netstat -tan | awk ‘/^tcp\>/{split($5,ip,”:”);count[ip[1]]++}
END{for (i in count) {print i,count[i]}}
78、附錄:1、FS輸入分隔符用法。awk -v FS=”:” ‘{print$1,FS $2}’ f1
awk -v FS=”$D” ‘{print$1FS$2}’ f1
D=”:”;awk -v FS=”$D” ‘{print $1FS$2}’ f1
2、OFS輸出分隔符。D=”:”;awk -v FS=”$D” -v OFS=”——-” ‘{print $1,$2}’ f1
輸入記錄分隔符RS:awk -v FS=”,” -v ?RS=”;” ‘{print$1}’ f3
輸出記錄分隔符ORS:awk -v FS=”,” -v ?RS=”;” -v ORS=”|” ‘{print$1}’ f3
3、字段數量NF:awk -F: ‘{print NF}’ f1
4、記錄號NR的記錄:awk -F: ‘{print NR,$NF}’ f1
5、各文件分別計數,記錄號awk -F: ‘{print FNR,$NF}’ f1
6、當前文件名awk -F: ‘{print FILENAME}’ f1
7、查看幾個參數。awk -F: ‘{print ARGC}’ f1。。。awk后面的路徑算參數。
8、變量賦值:awk -v test=”hello awk” ‘{print test}’ f1///awk ‘{test=”hello awk”;print test}’ f1
9、awk ‘{print test;test=”hello awk”}’ f1
10、-f可以調用。
11、printf輸出格式。printf”FORMAT”.item1,item2;
awk -F: ‘{printf”%s \n”,$1}’ f1
awk -F: ‘{printf”%s:%d\n”,$1,$3}’ f1/////awk -F: ‘{printf”%-10s:%6.3f\n”,$1,$3}’ f1
12、表達式;awk -F: ‘BEGIN{print”user ???userid\n——————–“}{printf “%-10s:%3.2d \n”,$1,$3}’ f1
13、操作符:算數操作符;x+y,
14、賦值操作符,++,–,+=,%=取模。^=指數運算。
15、wk ‘BEGIN{i=0;print ++i,i}’先加后輸出;
awk ‘BEGIN{i=0;print i++,i}’先輸出后加;
16、比較操作符;==,!=,>,<.<=,>=;
17、模式匹配符;~左右兩邊匹配,,~!左右兩邊不匹配。
awk -F: ‘$0~ /wang/{print $1}’ f1
18、awk -F: ‘$3==29’ f1
19、邏輯操作符:與&& 或|| !
awk -F: ‘$3>=100{print $0}’ f1
df |awk ‘$1~/^\/dev\/sd/ {print $1,$5}’|awk -F% ‘{print $1}’
df |awk ‘$1~ /^\/dev\/sd/ {print $1,$5 }’ |awk -F% ‘{print$1,$5}’|awk ‘$2 >5 {print $1}’
20、或,awk -F: ‘$1==0||$3>=100 {print $1,$3}’ f1
21、非..awk -F: ‘$1==0|| !($3>=100) {print $1,$3}’ f1
22、0和“”為假,,,其余為真。
23、三目表達式。awk -F: ‘{$3>=1000?usertype=”common user”:usertype=”system user”;printf”%-12s:%-20s:%6d\n”,usertype,$1,$3}’ f1
24、正則表達式寫法。awk -F: ‘/bash$/{print $1}’ f1
25、awk ‘/^#/{print $0}’ /etc/fstab
26、awk -v i=” ” ‘i{print $1}’ f1為真執行,為假不執行
27、行范圍;awk ‘/^root/,/^wang/{print $1,$3}’ f1/////awk ‘NR>=10&&NR<=20{print $1,$3}’ f1
28、seq 10 |awk ‘i=!i’打印奇數行。seq 10 |awk ‘!(i=!i)’
29、awk控制語句,循環語句,數組語句。
if語句;awk -F: ‘{if($3>=1000)print$1,$3}’ f1
30、awk ‘BEGIN{test=65;if(test>90){print”very good”}else if(test>60){print”good”}else{print”no pass”}}’
31、while循環語句,,字符串長度用length標示;awk -F: ‘{i=1;while(i<=NF){print $1,length($1);i++}}’ f1
32、while循環語句:awk -F: ‘NR<=3{i=1;while(i<=NF){print $1,length($1);i++}}’ f1
33、awk -F: ‘NR<=3{i=1;while(i<=NF){if(length($1)>=6)print $1,length($1);i++}}’ f1
34、awk ‘BEGIN{sum=0;i=1;while(i<=100){sum+=i;i++};print”sum=”sum}’
sum=5050 ??算法。。echo {1..100}|tr ‘ ‘ ‘+’ |bc..seq -s”+” 100|bc
35、for循環。for(1;2;3)awk ‘BEGIN{sum=0;for(i=1;i<=100;i++){sum+=i};print sum}’
36、break語句:awk ‘BEGIN{sum=0;for(i=1;i<=100;i++){if(i==50)continue;sum+=i};print sum}’
37、awk ‘BEGIN{sum=0;for(i=1;i<=100;i++){if(i==50)break;sum+=i};print sum}’
38、next結束了本行的循環,下行循環繼續,
39、awk數組。同一類型多個變量的集合。awk ‘BEGIN{weekdays[“mon”]=”Monday”;weekdays[“tue”]=”Tuesday”;for(i in weekdays){print weekdays[i]}}’
30、取ip地址;cat access_log |awk ‘{ips[$1]++}END{for(ip in ips){print ip,ips[ip]}}’
31、函數:awk ‘BEGIN{print rand ()}’;
32、awk ‘BEGIN{srand();print rand()*100}’;
33、替換。echo “2008:08.08 08:08:08″|awk ‘sub(/:/,”-“,$1)’
34、全部替換echo “2008:08.08 08:08:08″|awk ‘gsub(/:/,”-“,$0)’
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/92646