介紹安全3A;
資源分派:
Authentication:認證
Authorization:授權
Accouting|Audition:審計
用戶user;
令牌token,identity
Linux用戶:Username/UID
管理員:root, 0
普通用戶:1-65535
系統用戶:1-499(centOS6) ,1-999 (CentOS7)
對守護進程獲取資源進行權限分配
登錄用戶:500+(centOS6), 1000+(CentOS7)
交互式登錄
組group;
Linux組:Groupname/GID
管理員組:root, 0
普通組:
系統組:1-499(centOS6), 1-999(CENTOS7)
普通組:500+(centOS6), 1000+(CENTOS7)
安全上下文;
Linux安全上下文
運行中的程序:進程 (process)
以進程發起者的身份運行:
root: /bin/cat
mage: /bin/cat
進程所能夠訪問資源的權限取決于進程的運行者的身份
組的類別;
Linux組的類別
用戶的主要組(primary group)
用戶必須屬于一個且只有一個主組
組名同用戶名,且僅包含一個用戶,私有組
用戶的附加組(supplementary group)
一個用戶可以屬于零個或多個輔助組
用戶和組的配置文件;(查看加; cat )
Linux用戶和組的主要配置文件:
/etc/passwd:用戶及其屬性信息(名稱、 UID、主組ID等)
/etc/group:組及其屬性信息
/etc/shadow:用戶密碼及其相關屬性 (用戶口令)
/etc/gshadow:組密碼及其相關屬性 (組口令)
passwd文件格式;
login name:登錄用名(wang)
passwd:密碼 (x)
UID:用戶身份編號 (1000)
GID:登錄默認所在組編號 (1000)
GECOS:用戶全名或注釋
home directory:用戶主目錄 (/home/wang)
shell:用戶默認使用shell (/bin/bash)
group文件格式;
群組名稱:就是群組名稱
群組密碼:通常不需要設定,密碼是被記錄在 /etc/gshadow
GID:就是群組的 ID
以當前組為附加組的用戶列表(分隔符為逗號)
gshdow文件格式;
群組名稱:就是群組名稱
群組密碼:
組管理員列表:組管理員的列表,更改組密碼和成員
以當前組為附加組的用戶列表:(分隔符為逗號)
用戶和組管理命令;
用戶管理命令
useradd (創建)
usermod (修改)
userdel (刪除)
組帳號維護命令
groupadd (創建)
groupmod (修改)
groupdel (刪除)
密碼加密;
單向加密:哈希算法,原文不同,密文必不同
md5: message digest, 128bits
sha1: secure hash algorithm, 160bits
sha224: 224bits
sha256: 256bits
sha384: 384bits
sha512: 512bits
更改加密算法; authconfig –passalgo=sha256 –update
cat /etc/login.defs (查看)
用戶創建:useradd
-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 不創建家目錄,用于非系統用戶
創建用戶: useradd
默認值設定:/etc/default/useradd文件中
? 顯示或更改默認設置
useradd -D
useradd –D -s SHELL
useradd –D –b BASE_DIR
useradd –D –g GROUP
新建用戶的相關文件和命令;
/etc/default/useradd
/etc/skel/*
/etc/login.defs
newusers passwd格式文件 批量創建用戶
chpasswd 批量修改用戶口令
用戶屬性修改;
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: 設定非活動期限
刪除用戶;
userdel [OPTION]… login
-r: 刪除用戶家目錄
查看用戶相關的ID信息;
id [OPTION]… [USER]
-u: 顯示UID
-g: 顯示GID
-G: 顯示用戶所屬的組的ID
-n: 顯示名稱,需配合ugG使用
切換用戶或以其他用戶身份執行命令;
切換用戶的方式:
su UserName:非登錄式切換,即不會讀取目標用戶的配置文件,不改變
當前工作目錄
su – UserName:登錄式切換,會讀取目標用戶的配置文件,切換至家目
錄,完全切換
root su至其他用戶無須密碼;非root用戶切換時需要密碼
換個身份執行命令:
su [-] UserName -c ‘COMMAND’
選項:-l –login
su -l UserName 相當于 su – UserName
設置密碼;
passwd;修改指定用戶的密碼
常用選項:
-d:刪除指定用戶密碼
-l:鎖定指定用戶
-u:解鎖指定用戶
-e:強制用戶下次登錄修改密碼
-f: 強制操作
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天開始警告
修改用戶密碼策略;
chage [OPTION]… LOGIN
選項 登錄
-d LAST_DAY
-E –expiredate EXPIRE_DATE
-I –inactive INACTIVE
-m –mindays MIN_DAYS
-M –maxdays MAX_DAYS
-W –warndays WARN_DAYS
–l 顯示密碼策略
? 示例:
chage -d 0 tom 下一次登錄強制重設密碼
chage -m 0 –M 42 –W 14 –I 7 tom
chage -E 2016-09-10 tom
用戶相關的其它命令;
chfn 指定個人信息
chsh 指定shell
finger
創建組;
groupadd [OPTION]… group_name
-g GID: 指明GID號;[GID_MIN, GID_MAX]
-r: 創建系統組
CentOS 6: ID<500
CentOS 7: ID<1000
修改和刪除組;
組屬性修改:groupmod
groupmod [OPTION]… group
-n group_name: 新名字
-g GID: 新的GID
組刪除:groupdel
groupdel GROUP
更改組密碼;
組密碼:gpasswd
gpasswd [OPTION] GROUP
-a user 將user添加至指定組中
-d user 從指定組中移除用戶user
-A user1,user2,… 設置有管理權限的用戶列表
newgrp命令:臨時切換主組
如果用戶本不屬于此組,則需要組密碼
更改和查看組成員;
groupmems [options] [action]
options:
-g, –group groupname 更改為指定組 (只有root)
Actions:
-a, –add username 指定用戶加入組
-d, –delete username 從組中刪除用戶
-p, –purge 從組中清除所有成員
-l, –list 顯示組成員列表
?groups [OPTION].[USERNAME]… 查看用戶所屬組列表
文件權限;
文件屬性操作
chown 設置文件的所有者
chgrp 設置文件的屬組信息
修改文件的屬主和屬組;
修改文件的屬主:CHOWN
chown [OPTION] … [OWNER] [:[GROUP]] FILE …
用法:
所有者
OWNER:GROUP
:組
命令中的冒號可用。替換
-R:遞歸
chown [OPTION] … –reference = RFILE FILE …
?修改文件的屬組:chgrp命令
chgrp [選項] … GROUP FILE …
chgrp [OPTION] … –reference = RFILE FILE …
-R遞歸
文件權限;
文件的權限主要針對三類對象進行定義
owner: 屬主, u
group: 屬組, g
other: 其他, o
每個文件針對每類訪問者都定義了三種權限
r: Readable
w: Writable
x: eXcutable
文件:
r: 可使用文件查看類工具獲取其內容
w: 可修改其內容
x: 可以把此文件提請內核啟動為一個進程
目錄:
r: 可以使用ls查看此目錄中文件列表
w: 可在此目錄中創建文件,也可刪除此目錄中的文件
x: 可以使用ls -l查看此目錄中文件列表,可以cd進入此目錄
X:只給目錄x權限,不給文件x權限
數字法:
u g o
rwx rw- r–
111 110 100
chmod 764 file
r:4
w:2
x:1
0 1 2 3 4 5 6 7
000 001 010 011 100 101 110 111
— –x -w- -wx r– r-x rw- rwx
例如:
640: rw-r—–
755: rwxr-xr-x
常用:
file:6rw,4r,0,x1
dir:7rwx,5r-x,0
修改文件權限;
chmod [OPTION]… OCTAL-MODE FILE…
-R: 遞歸修改權限
?chmod [OPTION]… MODE[,MODE]… FILE…
MODE:
修改一類用戶的所有權限:
u= g= o= ug= a= u=,g=
修改一類用戶某位或某些位權限
u+ u- g+ g- o+ o- a+ a- + –
?chmod [OPTION]… –reference=RFILE FILE…
參考RFILE文件的權限,將FILE的修改為同RFILE
權限設置示例;
chgrp sales testfile
chown root:admins testfile
chmod u+wx,g-r,o=rx file
chmod -R g+rwX /testdir
chmod 600 file
chown mage testfile
新建文件和目錄的默認權限;
umask值 可以用來保留在創建文件權限
新建FILE權限: 666-umask
如果所得結果某位存在執行(奇數)權限,則將其權限+1
新建DIR權限: 777-umask
非特權用戶umask是 002
root的umask 是 022
umask: 查看
umask #: 設定
umask 002
umask –S 模式方式顯示
umask –p 輸出可被調用
全局設置: /etc/bashrc 用戶設置:~/.bashrc
Linux文件系統上的特殊權限;
UID, SGID, Sticky
三種常用權限:r, w, x user, group, other
可執行文件上SUID權限;
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
啟動為進程之后,其進程的屬主為原程序文件的屬主
SUID只對二進制可執行程序有效
SUID設置在目錄上無意義
權限設定:
chmod u+s FILE…
chmod u-s FILE…
可執行文件上SGID權限;
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有
執行權限
啟動為進程之后,其進程的屬組為原程序文件的屬組
權限設定:
chmod g+s FILE…
chmod g-s FILE…
目錄上的SGID權限;
默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組
?一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件
所屬的組為此目錄的屬組
?通常用于創建一個協作目錄
?權限設定:
chmod g+s DIR…
chmod g-s DIR…
Sticky 位;
具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權
在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件
sticky 設置在文件上無意義
權限設定:
chmod o+t DIR…
chmod o-t DIR…
?例如:
?ls -ld /tmp drwxrwxrwt 12 root root 4096 Nov 2 15:44 /tmp
權限位映射;
SUID: user,占據屬主的執行權限位
s: 屬主擁有x權限
S:屬主沒有x權限
SGID: group,占據屬組的執行權限位
s: group擁有x權限
S:group沒有x權限
Sticky: other,占據other的執行權限位
t: other擁有x權限
T:other沒有x權限
設定文件特定屬性;
chattr +i 不能刪除,改名,更改
chattr +a 只能追加內容
lsattr 顯示特定屬性
訪問控制列表;
ACL:Access Control List,實現靈活的權限管理
CentOS7 默認創建的xfs和ext4文件系統具有ACL功能
CentOS7 之前版本,默認手工創建的ext4文件系統無ACL功能,需手動增加
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt/test
ACL生效順序:所有者,自定義用戶,自定義組,其他人
ACL文件上的group權限是mask 值(自定義用戶,自定義組,擁有組的最大權限),而非傳統的組權限
getfacl 可看到特殊權限:flags
通過ACL賦予目錄默認x權限,目錄內文件也不會繼承x權限
base ACL 不能刪除
setfacl -k dir 刪除默認ACL權限
setfacl –b file1清除所有ACL權限
getfacl file1 | setfacl –set-file=- file2 復制file1的acl權限給file2
mask只影響除所有者和other的之外的人和組的最大權限
Mask需要與用戶的權限進行邏輯與運算后,才能變成有限的權限(EffectivePermission)
用戶或組的設置必須存在于mask權限設定范圍內才會生效 setfacl -mmask::rx file
–set選項會把原有的ACL項都刪除,用新的替代,需要注意的是一定要包含
UGO的設置,不能象-m一樣只是添加ACL就可以
示例:
setfacl –set u::rw,u:wang:rw,g::r,o::- file1
備份和恢復ACL
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 參數。但是
tar等常見的備份工具是不會保留目錄和文件的ACL信息
[root@zi data]# pwunconv (查看原口令)
[root@zi data]# pwconv (隱藏原口令)
[root@zi data]# cat /etc/passwd (查看)
[root@zi data]# nano /etc/passwd (編輯文檔器)
suid:繼承二進制程序所有者的權限
sgid:
1)繼承二進制程序所有組的權限
2)作用于目錄,此目錄新建的文件繼承目錄的所屬組
sticky:作用于目錄,此目錄的文件只能被所有者刪除
對于目錄
default權限=777-umask
對于文件
default權限=666-umask:對結果觀察,如果有奇數+1,偶數不變
管道;
cmd1 | cmd2
命令1 命令2
cmd1 |& cmd2
cmd1 2>&1| cmd2
cmd1 輸出
cmd2 輸入
抽取文本的工具;
文件內容:less和 cat
文件截取:head和tail
按列抽?。篶ut
按關鍵字抽?。篻rep
文件查看;
文件查看命令:
cat,tac,rev
cat [OPTION]… [FILE]…
(選項) (文件)
-E: 顯示行結束符$
-n: 對顯示出的每一行進行編號
-A:顯示所有控制符
-b:非空行編號
-s:壓縮連續的空行成一行
分頁查看文件內容;
more: 分頁查看文件
more [OPTIONS…] FILE…
-d: 顯示翻頁及退出提示
less:一頁一頁地查看文件或STDIN輸出
查看時有用的命令包括:
/文本 搜索 文本
n/N 跳到下一個 或 上一個匹配
less 命令是man命令使用的分頁器
顯示文本前或后行內容;
head [OPTION]… [FILE]…
-c #: 指定獲取前#字節
-n #: 指定獲取前#行
-#: 指定行數
tail [OPTION]… [FILE]…
-c #: 指定獲取后#字節
-n #: 指定獲取后#行
-#:
-f: 跟蹤顯示文件fd新追加的內容,常用日志監控
相當于 –follow=descriptor
-F: 跟蹤文件名,相當于—follow=name –retry
?tailf 類似tail –f,當文件不增長時并不訪問文件
按列抽取文本cut和合并文件paste;
cut [OPTION]… [FILE]…
-d DELIMITER: 指明分隔符,默認tab
-f FILEDS:
#: 第#個字段
#,#[,#]:離散的多個字段,例如1,3,6
#-#:連續的多個字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
–output-delimiter=STRING指定輸出分隔符
cut和paste;
顯示文件或STDIN數據的指定列
cut -d: -f1 /etc/passwd
cat /etc/passwd | cut -d: -f7
cut -c2-5 /usr/share/dict/words
paste 合并兩個文件同行號的列到一行
paste [OPTION]… [FILE]…
-d 分隔符:指定分隔符,默認用TAB
-s : 所有行合成一行顯示
paste f1 f2
paste -s f1 f2
分析文本的工具;
文本數據統計:wc
整理文本:sort
比較文件:diff和patch
收集文本統計數據wc;
計數單詞總數、行總數、字節總數和字符總數
可以對文件或STDIN中的數據運行
wc story.txt
39 237 1901 story.txt
行數 字數 字節數
常用選項
? -l只計數行數
? -w 只計數單詞總數
? -c 只計數字節總數
? -m 只計數字符總數
? -L 顯示文件中最長行的長度
文本排序sort;
把整理過的文本顯示在STDOUT,不改變原始文件sort [options] file(s)
常用選項
? -r 執行反方向(由上至下)整理
? -R 隨機排序
? -n 執行按數字大小整理
? -f 選項忽略(fold)字符串中的字符大小寫
? -u 選項(獨特,unique)刪除輸出中的重復行
? -t c 選項使用c做為字段界定符
? -k X 選項按照使用c字符分隔的X列來整理能夠使用多次
uniq;
uniq命令:從輸入中刪除前后相接的重復的行
uniq [OPTION]… [FILE]…
-c: 顯示每行重復出現的次數
-d: 僅顯示重復過的行
-u: 僅顯示不曾重復的行
注:連續且完全相同方為重復
?常和sort 命令一起配合使用:
sort userlist.txt | uniq -c
比較文件;
比較兩個文件之間的區別
diff foo.conf foo2.conf
5c5
< use_widgets = no
—
> use_widgets = yes
?注明第5行有區別(改變)
復制對文件改變patch;
diff 命令的輸出被保存在一種叫做“補丁”的文件中
使用 -u 選項來輸出“統一的(unified)” diff格式文件,最適用于補丁文件
?patch 復制在其它文件中進行的改變(要謹慎使用)
適用 -b 選項來自動備份改變了的文件
$ diff -u foo.conf foo2.conf > foo.patch
$ patch -b foo.conf foo.patch
reset?(恢復;重置字符)
[root@localhost data]# getent group??(查看組列表)
[dai@localhost ~]$ exit?(退出切換用戶)
[dai@localhost ~]$ su root (切換用戶)
?
更改文件所有者;
[root@localhost data]# touch?f1 (新建)
[root@localhost data]#?ll?f1 ????(查看)
[root@localhost data]# id???????(查看)
[root@[root@localhost data]#?chown?dai f1 ?(更改所有者)
localhost data]# ll?f1 ??????(查看)
-rw-r–r–. 1 dai root 0 Apr ?5 09:08 f1
?
更改組;
[root@localhost data]# ll?f1
-rw-r–r–. 1 dai root 0 Apr ?5 09:08 f1
[root@localhost data]# chgrp?rpc f1(跟文件名)
[root@localhost data]#?ll?f1
-rw-r–r–. 1 dai rpc 0 Apr ?5 09:08 f1
?
創建新組;
[root@localhost data]# groupadd?g1
加組;
[root@localhost data]# groupmems?-a?dai -g?g1
[root@localhost data]# id?dai
uid=1000(dai) gid=1000(dai) groups=1000(dai),1003(g1)(顯示加的組)
方法2;
[root@localhost data]#?usermod?-aG g2 dai
(a;增加新的輔助組)因為dai已經加入g1;加a老的組不會被破壞
[root@localhost data]# id?dai
uid=1000(dai) gid=1000(dai) groups=1000(dai),1003(g1),1004(g2)(顯示加的組)
?
創建賬號;
#改組只能改屬于的組,不屬于的組不能改
[dai@localhost data]$ # useradd ming ?(創建)
[dai@localhost data]$ # su?ming ???(切換)
[dai@localhost data]$ chgrp?g1 f1 ??(改屬組)
[dai@localhost data]$?ll f1 ??????????(查看)
-rw-r–r–. 1 dai g1 0 Apr ?5 09:08 f1
?
文本處理;
?
文件查看;Cat;
[root@localhost data]# cat -n acl.txt ???(對顯示出的每一行進行編號)
[root@localhost data]#?cat -ns acl.txt ??(壓縮空行加 s?)
[root@localhost data]# cat?-A?acl.txt ???(查看文件空格)
tac;
[root@localhost data]#?seq?10 > f1.log ???(創建)
[root@localhost data]# cat?f1.log ????????(多行正向)
[root@localhost data]# tac?f1.log ????????(多行反向顯示)
rve;
[root@localhost data]#?echo?{1..10}
1 2 3 4 5 6 7 8 9 10
[root@localhost data]#?echo {1..10} > f2.log (創建)
[root@localhost data]# cat?f2.log ??????????(多行正向)
1 2 3 4 5 6 7 8 9 10
?[root@localhost data]# rev f2.log ???????(一行反向顯示)
分頁查看文件內容;
[root@localhost /]#more?anaconda_ks.cfg ?????(加選項)
[root@localhost /]# ls -R /etc/ |more ???
q??(退出)??? -d: 顯示翻頁及退出提示
[root@localhost /]# less?anaconda_ks.cfg ????(加選項)
[root@localhost /]# ls -R /etc/ |?less
q??(退出) ????????????????????n/N 跳到下一個 或 上一個匹配
顯示文本前或后行內容;
[root@localhost /]#?ifconfig ?????(查看)
[root@localhost /]#?ifconfig |head?-n2(取前兩行)
[root@localhost /]# echo abcd?| head?-c3
abc[root@localhost /]#
[root@localhost data]# echo {1..10} ?????(創建)
1 2 3 4 5 6 7 8 9 10
[root@localhost data]# echo {1..10} |tail -c3??(查看后三個字符)3;可改
[root@localhost data]#?tail -f /data/f2.log ????(追加內容)
[root@localhost data]# ifconfig ens33 |head?-n2?(先取前兩行)
[root@localhost data]# ifconfig ens33 |head?-n2 |tail?-n1?(在取最后一行)
[root@localhost data]# tail -f?/data/f1 (-f: 跟蹤顯示文件fd新追加的內容,常用日志監控相當于 –follow=descriptor)
[root@localhost data]# tail -F?/data/f2.log (-F: 跟蹤文件名,相當于—follow=name –retry)
tailf 類似tail –f,當文件不增長時并不訪問文件
(通過ip地址校正時間);
[root@localhost data]# ntpdate?172.20.0.1 ?
[root@localhost data]# date????(今天時間)
Thu Apr ?5 17:16:13 CST 2018
[root@localhost data]# date?-d ‘-1 day’ ??(昨天時間)
Wed Apr ?4 17:16:21 CST 2018
按列抽取文本cut和合并文件paste;
cut [OPTION]… [FILE]…
-d DELIMITER: 指明分隔符,默認tab
-f FILEDS:
[root@localhost data]# cat?/etc/passwd ???(查看)??
[root@localhost data]# cut -d: -f 1,3 /etc/passwd (第一列;第三列)(系統中所有的用戶名及UID)?????
[root@localhost data]# cut -d: -f 1.3,5-7?/etc/passwd [第五列到第七列(系統中所有的用戶名及UID)
[root@localhost data]# cut -d:?-f 1 /etc/passwd (單個數;1列)
[root@localhost data]# who |cut -c1-9 ?(-c 按字符切割)
Root
[root@localhost ~]# cut -d: -f 1,3 ?–output-delimiter=”=” /etc/passwd (–output-delimiter=STRING指定輸出分隔符)
[root@localhost data]# df ??(查看)
[root@localhost data]# df|tr -s?” ” % ?(取)
[root@localhost data]# df|tr -s ” ” % |cut -d % -f5 ?(取列)
取IP地址;
centos6;
ifconfig eth0 |head -n2|tail -n1 |tr -s ” ” : |cut -d: -f4
centos7;
ifconfig ens33|head -n2 |tail -n1 |tr -s ” ” |cut -d” ” ?-f3
cut和paste;
[root@zi ~]#?seq 1 10 > f1???(創建)
[root@zi ~]# seq?10 20 > f2
[root@zi ~]# paste?f1 f2 ??(paste 合并兩個文件同行號的列到一行)
[root@zi ~]# cat f1 2 ??(查看)
[root@zi ~]# paste?-s f1 f2 (放一行)
[root@zi ~]# paste?-d?“:” f1 f2 (指定分隔符)
分析文本的工具;
收集文本統計數據wc;
#計數單詞總數、行總數、字節總數和字符總數
#可以對文件或STDIN中的數據運行
wc story.txt
39 237 1901 story.txt
行數 字數 字節數
[root@zi ~]# ls |wc??(行數 字數 字節數)
-[root@zi ~]# ls ?-1?|wc
??13 ?????13 ????120
[root@zi ~]# wc -1 ?/etc/passwd (-l只計數行數)
-w 只計數單詞總數
-c 只計數字節總數
-m 只計數字符總數
-L 顯示文件中最長行的長度)
Linux文本處理三劍客;
grep:文本過濾(模式:pattern)工具
grep, egrep, fgrep(不支持正則表達式搜索)
sed:stream editor,文本編輯工具
awk:Linux上的實現gawk,文本報告生成器
grep;
作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行
模式:由正則表達式字符及文本字符所編寫的過濾條件
?
cengtos7:
[root@localhost data]# grep?abc
abcdf ?(輸入) ?
abcdf
centos6:
[root@localhost data]# alias grep?(查看別名)
[root@zi ~]# nano?.bashrc ???????(定義別名編輯器)
[root@zi ~]# . .bashrc ???????????(別名生效命令)
[root@zi ~]# grep?abc ????????????
Abcdf (輸入)
abcdf
?
[root@localhost data]# grep?root?/etc/passwd (root.寫好的固定字符串)
root:x:0:0:root:/root:/bin/bash
#grep?“$USER” /etc/passwd
#grep?‘$USER’ /etc/passwd
#grep?`whoami` /etc/passwd
grep命令選項;
–color=auto: 對匹配到的文本著色顯示??(加顏色)
[root@localhost ~]#?grep –v?“root” /etc/passw (-v: 顯示不被pattern匹配到的行)
[root@localhost ~]# grep?–i?“root” /etc/passwd (-i: 忽略字符大小寫)
[root@localhost ~]# grep?–n?“root” /etc/passwd
[root@localhost ~]# cat –n?/etc/passwd
[root@localhost ~]# cat -n /etc/passwd |grep root
(-n:顯示匹配的行號)
[root@localhost ~]# ls |grep?ks(過慮文件名)
[root@localhost ~]#?grep?–c?“root” /etc/passwd (-c: 統計匹配的行數)
[root@localhost ~]# grep?–o?“root” /etc/passwd (-o: 僅顯示匹配到的字符串)
[root@localhost ~]# grep –q?“root” /etc/passwd ?(-q: 靜默模式,不輸出任何信息)
[root@localhost ~]# grep?-nA3 root /etc/passwd (-A #: after, 后#行)
[root@localhost ~]# grep?-nB3 root /etc/passwd (-B #: before, 前#行)
[root@localhost ~]# grep?-nC3 root /etc/passwd (-C #:context, 前后各#行)
[root@localhost ~]# grep?root /etc/passwd |grep?bash ?(-e:實現多個選項間的邏
[root@localhost ~]# grep?-e?root -e?bash /etc/passwd ???or關系;grep –e ‘cat ’ -e ‘dog’ file )
[root@localhost ~]# echo?xabcy |grep abc ????????
[root@localhost ~]# echo?x22.abc.y |grep -w ?abc ????(-w:匹配整個單詞)
#?-E:使用ERE
#?-F:相當于fgrep,不支持正則表達式
正則表達式;英語單詞(REGEXP)
#由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能
分兩類: ?基本正則表達式:BRE
擴展正則表達式:ERE
grep -E, egrep
正則表達式引擎:??采用不同算法,檢查處理正則表達式的軟件模塊PCRE ?
元字符分類:字符匹配、匹配次數、位置錨定、分組
基本正則表達式元字符;
字符匹配:?
[root@localhost ~]# echo?abc | grep?a.c
[root@localhost ~]# echo abbc | grep?a..c?(. 匹配任意單個字符?)
[root@localhost ~]# grep?“r..t”?/etc/passwd
[root@localhost ~]# echo axcdef |grep?“a[xyz]”c?( [?] 匹配指定范圍內的任意單個字符?)
[^] 匹配指定范圍外的任意單個字符
????????????[:alnum:] 字母和數字
????????????[:alpha:] 代表任何英文大小寫字符,亦即 A-Z, a-z
????????????[:lower:] 小寫字母 [:upper:] 大寫字母
????????????[:blank:] 空白字符(空格和制表符)
????????????[:space:] 水平和垂直的空白字符(比[:blank:]包含的范圍廣)
????????????[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴…)
????????????[:digit:] 十進制數字 [:xdigit:]十六進制數字
????????????[:graph:] 可打印的非空白字符
????????????[:print:] 可打印字符
????????????[:punct:] 標點符號?
?
正則表達式;
?匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數?
[root@localhost ~]# echo axb |grep x*
[root@localhost ~]# echo ab |grep “ax*b”?
(* 匹配前面的字符任意次,包括0次貪婪模式:盡可能長的匹配?)
[root@localhost ~]# ls |grep?“.*\.log” ????????????( .* 任意長度的任意字符?)
[root@localhost ~]# echo abccddc |grep?“a[a-c]*c” ??(貪婪模式)
[root@localhost ~]# echo abccdd |grep?“a[a-c]\?c” ?(\? 匹配其前面的字符0或1次?)
[root@localhost ~]# grep?“go\+gle” ?google.txt ????(\+ 匹配其前面的字符至少1次??)
????????????????????\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/95567