Linux基礎學習個人筆記,方便查找,加深印象

第三章,第四章

第三章?課程筆記

 

 

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重做最后的“撤消”更改

  1. 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

(0)
604603701@qq.com604603701@qq.com
上一篇 2018-03-18
下一篇 2018-03-18

相關推薦

  • vsphere虛擬機下的Linux在線移除硬盤后的報錯處理(基于LVM)

    1)故障描述( vmware虛擬機,在線移除一塊被設置為pv格式的硬盤后,提示unknown device錯誤): 說明:/dev/sdb1 /dev/sdc1 /dev/sdd1是組成/dev/vg_test/lvm_test的PV,這里我們模擬/dev/sdd1硬盤被直接斷電了 [root@docker mnt]# pvdisplay…

    Linux干貨 2016-07-29
  • Linux基礎知識之命令的語法通用格式

    #COMMAND OPTIONS ARGUMENTS 1.COMMAND:   (1)發起一命令:請求內核將某個二進制程序運行為一個進程: 程序–>進程 靜態–>動態 (有聲明周期)   (2)命令本身是一個可執行的程序文件:二進制格式的文件,有時候會調用共享庫文件 多數系統程序文件都存放在:/bin,…

    Linux干貨 2016-07-07
  • grub安裝

    創建兩塊磁盤分區 創建boot目錄和根本目錄rootfs mkdir /mnt/boot mkdir /mnt/rootfs mount /dev/sdb1 /mnt/boot mount /dev/sdb2 /mnt/rootfs 安裝gurb gurb-install –root-directory=/mnt /dev/sdb1 在/mnt/…

    Linux干貨 2017-11-14
  • Linux系統啟動流程、內核及模塊管理、linux啟動故障排除和自制linux

    Linux系統啟動流程、內核及模塊管理 Linux系統的組成部分組成:內核+根文件系統(kernel+rootfs)內核(kernel): 進程管理(創建、調度、銷毀等)、內存管理、網絡管理(網絡協議棧)、驅動程序、文件系統、安全功能IPC:Inter Process Communication機制本地進程間通信機制:消息隊列、semerphor、shm(共…

    2016-09-29
  • Linux的哲學思想

    Linux的哲學思想 一切皆文件 在linux中所有的一切,都是可以通過ls進行查詢的到的,甚至可以說ll查看詳細信息時表現形式為文件,所有的設備,所有的文件不論后綴,只是一個單純文件通過vim可以編輯一切 單一目的的小程序,組合小程序完成復雜任務 在linux中,每一個命令都是對應一個功能,通過不同的參數來完成不同的要求,通過繁多的小的命令來完成大型的要求…

    Linux干貨 2016-10-30
  • 圖解LVM(邏輯卷管理)

    圖解LVM 1 什么是LVM?為什么要使用LVM? lvm(Logical Volume Manager)邏輯卷管理,是一種更為靈活彈性的磁盤管理工具。 通過邏輯卷管理,能夠解決傳統磁盤管理管理困難的問題,比如靈活的增刪磁盤容量,增刪磁盤分區等。 LVM由pv(Physical Volume),vg(Volume Group),lv(logical volu…

    2017-04-23
欧美性久久久久