一、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:显示时间范围内的日志信息
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/277101.html