Linux四剑客之grep&find

106 阅读3分钟

Linux四剑客之grep&find

1、grep

过滤:在文件中或管道中进行查找,找出想要的内容(字符串)默认按照行查找,grep会把匹配到的行显示出来。

基本用法

grep "要找的内容" /etc/passwd

补充:

四剑客 awk sed grep find

三剑客 awk sed grep

grep选项说明
-iignore-case 过滤的时候忽略大小写
-nline-number 显示行号
-v排除,取反
#案例一 查找密码错误的ssh请求个数
[root@nanjing ~]# grep -i "failed password" /var/log/secure | wc -l
32747

2、find

四剑客四号选择,擅长查找文件。在指定的目录中查找你要的文件,文件名。

find在指定目录中查找文件

find 目录 -type 指定类型 -name 指定名字

find命令选项说明
-type什么类型的文件,f表示文件 d表示目录
-name文件名
-size根据大小查找文件 +表示大于 -表示小于 +10k(小写K) +10M(大写) G
-mtime根据修改时间查找文件
#案例一 找出/etc/下面以.conf结尾的文件个数
find /etc/ -type f -name  "*.conf" | wc -l
149
​
#案例二 找包含shishuwu的文件夹: (可能是开头,可能是结尾,可能是中间)
find / -type d -name "*shishuwu*"
/shishuwu
find / -type d |grep "shishuwu"
/shishuwu
​
#案例三 根据大小找出文件 在/etc/目录下面找出大于10kb的文件数
find /etc/ -type f -size +10k | wc -l
270
​
#案例四 找出/etc/目录下以.conf结尾的,7天之前的文件数
find /etc/ -type f -name "*.conf" -mtime +7 | wc -l
149
​
#案例五 查找文件的时候指定最多找多少层目录.
find / -maxdepth 2 -type f -name "*.conf"
-maxdepth 1 选项位置第1个,指定find命令查找的最大深度 (层数),不加上就是所有层。
​
#案例六 查找的时候不区分文件名的大小写
find / -type f -iname "*.conf"

find与其他命令配合

#案例一 找出/shishuwu/find/以.txt结尾的文件显示详细信息
find /shishuwu/find/ -type f -name "*.txt" | xargs ls -l
ll -ih `find /shishuwu/find/ -type f -name "*.txt"`

故障原因:

前面的命令通过管道传递给后面命令,传递的是字符串 .

这个命令(ls)中传递文字符号不行,要传递参数

image-20240126120640437

#案例二 find找出/shishuwu/find/以.txt结尾的文件放在/shishuwu/txt.tar.gz
tar zcf /shishuwu/txt.tar.gz `find /shishuwu/find/  -type f -name "*.txt"` 
find -type f -name "*.txt" | xargs tar zcf /shishuwu/find/txt.tar.gz
find -type f -name "*.txt" -exec tar zcf /shishuwu/find/txt.tar.gz {} +
有坑,因为-exec;执行方式 1个文件1个文件的压缩
​
#案例三 find找出/shishuwu/find/ 以.txt结尾的文件然后复制到/tmp下面
cp -t /tmp/ `find /shishuwu/find/  -type f -name "*.txt"`
find /shishuwu/find/  -type f -name "*.txt" | xargs cp -t /tmp/
​
find /shishuwu/find/  -type f -name '*.txt -exec ls -lh {} ;
-exec是find选项,表示find找出文件后要执行的命令
{}表示前面find命令找出的文件。
;表示命令结束,固定格式.

踩坑指南

代办:细看常用命令语法,目录and顺序

cp -a 源文件 源目录 目标

cp -t 目标路径 源文件

-t调转方向

-a集成了 -r递归目录下文件 和 -dp并保留所有相关的属性

find 目录 -type -name ""

tar zcf *.tar.gz 文件

正确用法:
[root@nanjing shishuwu]# tar zcf test.tar.gz /shishuwu/find/*
错误用法:
[root@nanjing shishuwu]# tar zcf test1.tar.gz /shishuwu/find/
在这个例子中,/shishuwu/find/ 是目标目录,tar 将会打包这个目录及其所有内容。