当前位置: 首页 > news >正文

Linex操作系统-Shell脚本(七)

十一、find命令

find命令可以使用户在文件系统中按照不同的条件查找文件和目录,find命令是系统管理员和开发人员在维护文件系统和查找特定文件时的首选工具

1. find命令基本语法

find [path...] [expression]

其中,path是查找的起始路径,可以是目录名、文件名或通配符。expression是用于指定搜索条件的表达式,它可以包含多个选项和操作符。

2.常用选项

选项作用
-amin<分钟>查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
- anewer<参考文件或目录>查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
- atime<24小时数>查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
- cmin<分钟>查找在指定时间之时被更改过的文件或目录;
- cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
- ctime<24小时数>查找在指定时间之时被更改的文件或目录,单位以24小时计算;
- daystart从本日开始计算时间;
- depth从指定目录下最深层的子目录开始查找;
- expty寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
- exec<执行指令>假设find指令的回传值为True,就执行该指令;
- false将find指令的回传值皆设为False;
- fls<列表文件>此参数的效果和指定“ - ls”参数类似,但会把结果保存为指定的列表文件;
- follow排除符号连接;
- fprint<列表文件>此参数的效果和指定“ - print”参数类似,但会把结果保存成指定的列表文件;
- fprint0<列表文件>此参数的效果和指定“ - print0”参数类似,但会把结果保存成指定的列表文件;
- fprintf<列表文件><输出格式>此参数的效果和指定“ - printf”参数类似,但会把结果保存成指定的列表文件;
- fstype<文件系统类型>只寻找该文件系统类型下的文件或目录;
- gid<群组识别码>查找符合指定之群组识别码的文件或目录;
- group<群组名称>查找符合指定之群组名称的文件或目录;
- help或——help在线帮助;
- ilname<范本样式>此参数的效果和指定“ - lname”参数类似,但忽略字符大小写的差别;
- iname<范本样式>此参数的效果和指定“ - name”参数类似,但忽略字符大小写的差别;
- inum<inode编号>查找符合指定的inode编号的文件或目录;
- ipath<范本样式>此参数的效果和指定“ - path”参数类似,但忽略字符大小写的差别;
- iregex<范本样式>此参数的效果和指定“ - regexe”参数类似,但忽略字符大小写的差别;
- links<连接数目>查找符合指定的硬连接数目的文件或目录;
- iname<范本样式>指定字符串作为寻找符号连接的范本样式;
- ls假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
- maxdepth<目录层级>设置最大目录层级;
- mindepth<目录层级>设置最小目录层级;
- mmin<分钟>查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
- mount此参数的效果和指定“ - xdev”相同;
- mtime<24小时数>查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
- name<范本样式>指定字符串作为寻找文件或目录的范本样式;
- newer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
- nogroup找出不属于本地主机群组识别码的文件或目录;
- noleaf不去考虑目录至少需拥有两个硬连接存在;
- nouser找出不属于本地主机用户识别码的文件或目录;
- ok<执行指令>此参数的效果和指定“ - exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
- path<范本样式>指定字符串作为寻找目录的范本样式;
- perm<权限数值>查找符合指定的权限数值的文件或目录;
- print假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“. / ”字符串;
- print0假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;
- printf<输出格式>假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
- prune不寻找字符串作为寻找文件或目录的范本样式;
-regex<范本样式>指定字符串作为寻找文件或目录的范本样式;
- size<文件大小>查找符合指定的文件大小的文件;
- true将find指令的回传值皆设为True;
- type<文件类型>只寻找符合指定的文件类型的文件;
- uid<用户识别码>查找符合指定的用户识别码的文件或目录;
- used<日数>查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
- user<拥有者名称>查找符和指定的拥有者名称的文件或目录;
- version或——version显示版本信息;
- xdev将范围局限在先行的文件系统中;
- xtype<文件类型>此参数的效果和指定“ - type”参数类似,差别在于它针对符号连接检查

示例:查找大于1M的文件

find /path/to/search -type f -size +1M

示例:查找七天内修改的文件

find /path/to/search -mtime -7

示例:查找属主为user1的文件

find /path/to/search -user user1

示例:执行自定义命令

find /path/to/search -name "*.log" -exec rm {} \;

这个例子将删除指定路径下所有扩展名为.log的文件

3.高级用法

1.使用逻辑操作符

find命令支持逻辑操作符,如-a(与)、-o(或)、!(非),用于组合多个条件。

示例:查找大于1MB且是普通文件的文件

find /path/to/search -type f -size +1M -a -type f

示例:查找修改时间在7天前或文件名以.bak结尾的文件

find /path/to/search \( -mtime +7 -o -name "*.bak" \)

2.搜索多个路径

示例:查找多个目录下的所有文件

find /path/to/dir1 /path/to/dir2 -type f

3.将find结果用于其他命令

示例:在搜索结果中执行grep

find /path/to/search -type f -name "*.txt" -exec grep "pattern" {} \;

示例:将搜索结果输出到文件

find /path/to/search -type f -name "*.log" > logfiles.txt

4.find命令的性能优化

尽量减少-exec选项的使用,因为每个匹配的文件都会执行一次命令

使用-print选项代替-exec,将结果输出到标准输出,然后使用管道将结果传递给其他命令

使用-maxdepth选项限制递归的深度,以减少搜索的范围

十二、sed编辑器

sed编辑器用法

命令格式

sed -e '操作' 文件l 文件2 ...
sed -n -e '操作' 文件1 文件2 ...
sed -f 脚本文件 文件1 文件2 ...
sed -i -e '操作' 文件1 文件2 ...sed -e 'n{				#n意为:指定行
操作l
操作2
...
}' 文件1 文件2 ...

常用选项

选项含义
-e--expression=表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用。
-f--file=表示用指定的脚本文件来处理输入的文本文件。
-h--help显示帮助。
-n--quietsilent禁止sed编辑器输出,但可以与p命令一起使用完成输出。
-i直接修改目标文本文件。
-r, --regexp-extended支持正则表达式

常用操作

操作含义
s替换,替换指定字符。
d删除,删除选定的行。
a增加,在当前行下面增加一行指定内容。
i插入,在选定行上面插入一行指定内容。
c替换,将选定行替换为指定内容。
y字符转换,转换前后的字符长度必须相同。
p打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容,如果有非打印字符,则以ASCII码输出。其通常与-n选项一起使用。
=打印行号。
l(小写L)打印数据流中的文本和不可打印的AscII字符(比如结束符$、制表符\t)

常用方式:

打印内容

[root@localhost ~]# sed -n -e 'p' testfile1			#打印内容[root@localhost ~]# sed -n -e '=' testfile1			#打印行号[root@localhost ~]# sed -n -e 'l' testfile1			#打印隐藏特殊符号[root@localhost ~]# sed -n -e '=;p' testfile1		#打印行号和内容
[root@localhost ~]# sed -n -e '=' -e 'p'testfile1	#打印行号和内容

sed编辑器的寻址方式

以数字形式表示行区间

用文本模式来过滤出行

[root@localhost ~]# sed -n '1p' testfile1					#打印第1行[root@localhost ~]# sed -n '$p' testfile1					#打印最后一行[root@localhost ~]# sed -n '1,3p' testfile1					#打印1到3行[root@localhost ~]# sed -n '3,$p' testfile1					#从第3行开始打印,直到最后一行结束[root@localhost ~]# sed -n '1,+3p' testfile1				#打印第1行之后的连续3行,即1-4行[root@localhost ~]# sed '5q' testfile1						#打印前5行信息后退出,q表示退出[root@localhost ~]# sed -n 'p;n' testfile1					#打印奇数行,n表示移动到下一行
[root@localhost ~]# sed -n '3{p;n;n;p}' testfile1			#打印第3,5行[root@localhost ~]# sed -n 'n;p' testfile1					#打印偶数行

删除行内容

[root@localhost ~]# sed 'd' testfile1						#全删[root@localhost ~]# sed '3d' testfile1						#删除第3行[root@localhost ~]# sed '2,4d' testfile1					#删除第2到4行[root@localhost ~]# sed '$d' testfile1						#删除最后一行[root@localhost ~]# sed '/^$/d' testfile1					#删除空行[root@localhost ~]# sed '/nologin$/d' /etc/passwd			#删除以nologin结尾的文件[root@localhost ~]# sed '/nologin$/!d' /etc/passwd			#"!"表示取反[root@localhost ~]# sed '/2\|3/d' testfile2					#删除第2行和第3行
[root@localhost ~]# sed '/2/,/3/d' testfile2				#从第一个位置打开行删除功能,到第二个位置关闭行删除功能
[root@localhost ~]# sed '/1/,/3/d' testfile2				#从第一个包含1的行打开删除功能,到第一个包含3的行关闭删除功能,然后接着往下扫描重复之前操作,若包含3的行不存在,则一删到底。

替换内容

命令格式

行范围 s/旧字符/新字符串/替换标记

替换标记

数字表明新字符串将替换第几处匹配的地方
g表明新字符串将会替换所有匹配的地方
p打印与替换命令匹配的行,与-n一起使用
w 文件将替换的结果写到文件中

使用方式

[root@localhost ~]# sed -n 's/root/admin/p' /etc/passwd					#将匹配行中第一个root替换为admin然后打印替换的行[root@localhost ~]# sed -n 's/root/admin/2p' /etc/passwd				#将匹配行中第二个root替换为admin然后打印替换的行[root@localhost ~]# sed -n 's/root/admin/gp' /etc/passwd				#将匹配行所有root替换为admin然后打印替换的行
[root@localhost ~]# sed -n 's/root/admin/gw file' /etc/passwd			#将匹配行所有root替换为admin然后保存替换的行至file
[root@localhost ~]# sed -n 's/root/admin/gp' /etc/passwd > file			#将匹配行所有root替换为admin然后保存替换的行至file[root@localhost ~]# sed 's/root//g' /etc/passwd							#将匹配行所有root替换为空的[root@localhost ~]# sed 'l,20 s/^/#/' /etc/passwd						#在第1到20行进行注释

插入内容

基本使用

[root@localhost ~]# sed '/45/c ABC' testfile2							#将含有45的行都替换为ABC[root@localhost ~]# sed 'y/145/ABC/' testfile2							#使所有的1字符转换成a,所有的2字符转换成B,所有的3字符转换成c[root@localhost ~]# sed '1,3a ABC' testfile2							#在第1行到第3行后都插入ABC新的一行[root@localhost ~]# sed '1i ABC' testfile2								#在第一行前插入ABC新的一行[root@localhost ~]# sed '5r /etc/resolv.conf' testfile2					#在第5行读取/etc/resolv.conf文件

保持空间的使用

[root@localhost ~]# sed '/root/{H;d};$G’ /etc/passwd					#将包含root的行剪切到末尾,H表示复制到剪切板,G表示粘贴到指定行后[root@localhost ~]# sed '1,2H;3,4G' /etc/passwd	

高级使用

[root@localhost ~]# echo "111222333" | sed -r 's/(111)(222)/\2\1/'		#将字符111和 222互换位置
[root@localhost ~]# echo "111222333" | sed -r 's/^(.)(.*)(.)$/\3\2\1/'	#将第一个字符和最后一个字符互换

十三、awk编辑器

1.概念

sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个"字段"然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。

  在使用awk命令的过程中,可以使用逻辑操作符&&表示与、||表示或、!表示非,还可以进行简单的数学运算,如+、-、*、\、%、^、表示加、减、乘、除、取余和乘方。

2.工作原理

逐行读取文本,默认以空格或tab进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。

3.命令用法

命令格式

awk 选项 '模式或条件 {操作}' 文件1 文件2 ...
awk -f 脚本文件 文件l 文件2 ...

常用选项

-F  指定分隔符
awk -F ',' '{print}' file1

常见的内建变量

内建变量含义
FS列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与-F作用相同。
NF当前处理的行的字段个数。$NF代表最后一个字段。
NR当前处理的行的行号(序数)。
$0当前处理的行的整行内容。
$n当前处理行的第n个字段(第n列)。
FILENAME被处理的文件名。
RS

行分隔符。awk从文件上读取资料时,将根据Rs的定义把资料切割成许多条记录,而awk比较倾向于将一行分成多个一次仅读入一条记录,以进行处理。预设值是\n

常用方式

按行输出文本

[root@localhost opt]# awk '{print}' testfile1 
one
two
three
four
five
six
seven
eight
nine
ten
eleven
twelve
[root@localhost opt]# awk '{print $0}' testfile1 
one
two
three
four
five
six
seven
eight
nine
ten
eleven
twelve

输出指定行内容

###输出第1行内容
[root@localhost opt]# awk 'NR==1 {print}' testfile1 
one###输出第3行内容
[root@localhost opt]# awk 'NR==3 {print}' testfile1 
three###输出第1~3行内容
[root@localhost opt]# awk 'NR==1,NR==3 {print}' testfile1 
one
two
three
[root@localhost opt]# awk '(NR>=1)&&(NR<=3){print}' testfile1
one
two
three###输出第1行、第3行的内容
[root@localhost opt]# awk 'NR==1||NR==3 {print}' testfile1 
one
three

输出奇偶数行的内容

###输出偶数行的内容
[root@localhost opt]# awk '(NR%2)==0{print}' testfile1 
two
four
six
eight
ten
twelve###输出奇数行的内容
[root@localhost opt]# awk '(NR%2)==1{print}' testfile1 
one
three
five
seven
nine
eleven

输出含有字符串的行

###输出含有root的行
[root@localhost opt]# awk '/root/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin###输出以root开头的行
[root@localhost opt]# awk '/^root/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash###输出以nologin结尾的行
[root@localhost opt]# awk '/nologin$/{print}' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
...
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin

按字段输出文本

[root@localhost opt]# awk -F":" '{print $3}' /etc/passwd
0
1
2
3
4
5
6
...
38
42
29
65534
98
74
70
89
72
1000

http://www.dtcms.com/a/569915.html

相关文章:

  • Linux系统编程——守护进程
  • 【打靶日记】VulNyx 之 Fing
  • 个人简历模板电子版可填写郑州专业seo哪家好
  • 开发与测试的微妙平衡:从“对立”到“合作”的实战经验
  • 开源网站代码濮阳市城乡建设管理局网站
  • C++ 贪心算法(Greedy Algorithm)详解:从思想到实战
  • 新手从零开始学电脑,0元学会重装系统
  • 六安网站制作公司排名网站 绝对路径
  • AMF、SMF 和 UPF在5G网中的位置
  • 门户网站创新的方式有神马搜索seo优化排名
  • ubuntu系统中 jupyter Kernel 频繁崩溃原因
  • 返佣贵金属交易所网站建设工作组赴河南协助
  • 班级网站 模板温州网站策划
  • 笛卡尔坐标系转换(外参矩阵原理与用途)
  • 如何搭建一个简单的网站网站标题psd
  • 黑马JAVAWeb-03 SpringBootWeb-分层解耦-三层架构-@SpringBootApplication注解-IOC控制反转-DI依赖注入
  • 网站评论列表模板公司logo图标
  • Linux_Socket_TCP
  • 拼多多福利券小程序怎么赚钱潍坊seo管理
  • JAVA国际版同城外卖跑腿团购到店跑腿多合一APP系统源码支持Android+IOS+H5
  • 做电锯电音的网站古董手表网站
  • 电力工程设计AI推荐:良策金宝AI以“六大智能”重塑行业效率
  • Yolo12改进策略:下采样改进|IPFA,下采样|信息保留特征聚合模块|即插即用
  • 网站seo内部优化怎么推广平台
  • 零陵区住房和城乡建设局网站百度网址域名大全
  • 0基础学舞蹈,学习计划
  • Redis_4_常见命令(完)+认识数据类型和编码方式
  • 代码交易网站邯郸网站建设费用
  • 黑色网站源码三河市网站建设
  • 20251104让AIO-3576Q38开发板跑Rockchip的原厂Android14之后适配GPIO扩展芯片PCA9555