第二周小总结

课堂笔记

介绍安全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
按列抽取:cut
按关键字抽取:grep

文件查看;
文件查看命令:
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.178linux.com/95567

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code