系统相关
首页 > 系统相关> > Linux四剑客

Linux四剑客

作者:互联网

一、find

作用:用来查找文件
格式:find dir -exec cmd {} ;

-name:按名字查找,可结合通配符使用

-iname:忽略大小写

-type:按文件类型
f:查找文件
d:查找目录

-mtime:文件修改时间
n表示文件更改时间距离为n天, -n表示文件更改时间距离在n天以内,+n表示文件更改时间距离在n天以前。
例如:
-mtime n 按照文件的更改时间来找文件,n为整数。
-mtime 0 表示文件修改时间距离当前为0天的文件,即距离当前时间不到1天(24小时)以内的文件。
-mtime 1 表示文件修改时间距离当前为1天的文件,即距离当前时间1天(24小时-48小时)的文件。
-mtime+1 表示文件修改时间为大于1天的文件,即距离当前时间2天(48小时)之外的文件
-mtime -1 表示文件修改时间为小于1天的文件,即距离当前时间1天(24小时)之内的文件
为什么-mtime+1 表示文件修改时间为大于1天的文件,即距离当前时间48小时之外的文件,而不是24小时之外的呢?
因为n值只能是整数,即比1大的最近的整数是2,所有-mtime+1不是比当前时间大于1天(24小时),而是比当前时间大于2天(48小时)。


-size:查看文件大小
+10k:大于10k
-10k:小于10k
+30M:大于30M



-exec:匹配所有搜索的结果
一个-exec只能执行一个命令,而且必须在命令后面加上终结符,终结符有两个,";"和"+",其中";"表示一个-exec的cmd命令结束,而"+"表示一次性执行完cmd命令。
* 为什么必须有终结符呢,因为一个find后面可以有多个-exec cmd,所以必须要有终结符分割他们。
* 为什么要加"\",因为";"是shell命令的分隔符,如果只有";",那么这条命令就会被shell截断。因为shell发现了末尾的";",就把前面的当成了一个命令,但是,因为没有终结符,所以无法执行,所以要加一个转义符"\",让shell知道这个";"有特殊含义。

因为单行命令-exec参数中无法使用多个命令,可以使用脚本的形式来执行多个命令
-exec ./test.sh {};
{}也称占位符,代表前面find查找出来的文件名



-ok:和-exec的作用相同,只不过是一种更为安全的模式来执行该参数所给出的shell命令,执行每一个命令之前,都会给出提示,让用户确定是否继续执行

-perm:按文件权限来查找

*:通配符代表所有
.:代表当前目录


例1:根据文件类型查找

例2:根据文件名查找

例3:根据mtime文件的修改时间查找10天内的文件

例4:根据mtime文件的修改时间查找30天前的文件

例5:根据mtime文件的修改时间查找当天的文件

例6:结合exec执行删除文件
注:将前面执行的结果作为exec后面的输入

例7:结合exec执行拷贝文件

例8:查找30天前以.txt结尾且大于50k的文件

例9:将某些文件的权限设置为644

例10:将某些目录的权限设置为755

例11:查找当天以.txt结尾的文件并列出详细信息

二、grep

作用:用来过滤文件中的内容
格式:grep [选项] "模式" [文件]
支持扩展正则:egrep

-E :开启扩展(Extend)的正则表达式。

-i :忽略大小写(ignore case)。

-v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。

-n :显示行号

-w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker

-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。

-o :只显示被模式匹配到的字符串。

--color :将匹配到的内容以颜色高亮显示。

-A  n:显示匹配到的字符串所在的行及其后n行,after

-B  n:显示匹配到的字符串所在的行及其前n行,before

-C  n:显示匹配到的字符串所在的行及其前后各n行,context

例1:过滤/etc/passwd文件中的root用户

例2:过滤nginx配置文件,并且去掉#号和空行

例3:过滤一个文件中的ip地址
方式一:

方式二:

例4:过滤一个服务占用的进程数
方式一:

方式二:
这是因为正则的特性,它会依次匹配中括号里的内容,并巧妙的过滤掉grep进程本身

三、sed

作用:用来查找或修改文件中的内容
格式:sed [选项] "s#1#2#g" [文件]

-s:替换
-p:显示print
-d:删除delete
-c:替代这行的内容
-a:追加,向指定的行或每一行追加内容(行后面)>>
-i:插入,向指定的行或每一行插入内容(行前面)
-n:('2p'、'1,4p'、'/^test/p'、'/19:00*/,/20:00*/p'、'3,$p')指定查找范围
-e:有多个sed命令的时候使用
-r:在脚本中使用扩展正则表达式
!:取反




例1:查找某一行内容

例2:查找某一行到某一行内容

例3:查找某一时间到某一时间的日志

例3:查找某一行到最后一行内容

例3:过滤ip地址

四、awk

内置变量:
NR==1:取出某一行
NR>=1&&NR<=5:取出1到5行,指范围
/test/
/10:00/,/11:00/

例1:取出passwd文件中第5行内容

例2:取出passwd文件中第1到5行内容

例3:取出passwd文件中包含spool字眼的内容

例4:取出passwd文件中包含root和ntp的内容

-F:指定分隔符,指定每一列结束标记(默认空格,连续空格,tab制表符)
$数字:取出某一列
$0:某一整行
NF:每行有多少个字段(列),$NF表示最后一列
~:表示包含
!~:表示不包含

例1:取出第5列内容

例2:取出第5列和第9列内容

例3:截取ip地址

例4:取出第3列包含数字1的行

例5:显示时间范围内的日志信息

标签:文件,匹配,exec,Linux,剑客,查找,内容,mtime
来源: https://www.cnblogs.com/msfyang/p/15876542.html