第三章 课程笔记
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。可以允许冲突。
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按关键字抽取:grep
- 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.178linux.com/92646