Linux查找命令
- find查找文件
- grep查找字符串
1. find命令
有多种使用方式:
- 根据文件名搜索
- 根据文件大小搜索
- 根据文件类型搜索
- 根据修改时间搜索
- 根据文件权限搜索
- 根据文件所有者搜索
上面的各种方式可以利用逻辑与或非组合起来使用。
功能一:按文件名搜索
常用用法
find path -option content
参数说明
参数 | 说明 |
path | 搜索路径,可以为多个目录,默认为当前目录“ |
-option | 搜索选项,用来指定搜索的依据,比如指定文件名" |
content | 搜索内容,一般是文件名 |
关于第二个参数-option
的选项非常多,按文件名搜索常用的有:
- -name: 按照文件名搜索
- -iname:按照文件名搜索,不区分大小写
- -inum: 按照inode号搜索
举个例子
在根目录下査找文件名是yum.conf的文件:
find / -name yum.conf
find / -iname YUM.CONF #可以不区分大小写,这样也可以搜出来
在当前目录根据inode号搜索文件:
find . -inum 262147
这是区分硬链接文件的重要手段,硬链接文件的 inode 号是一致的。
功能二:按文件大小搜索
find path -option content
参数 | 说明 |
path | 搜索路径,可以为多个目录,默认为当前目录“ |
-option | 搜索选项,按照文件大小搜索需指定为" |
content | 搜索内容,指定文件大小,用“ |
关于第二个参数-option
搜文件大小要指定为-size
关于第三个参数content
的选项在按照文件大小搜索时可以指定文件的大小
- +:表示大于
- -:表示小于
- c:表示单位为字节
- k:表示单位为KB
- M:表示单位为MB
- G:表示单位为GB
举个例子
査找当前目录下大小刚好是25KB的文件
find . -size 25k
查找当前目录下小于25MB的文件
find . -size -25M
查找当前目录下大于25Byte的文件
find . -size +25c
功能三:按文件类型搜索
-option
的选项:
- -type d:查找目录
- -type f:查找普通文件
- -type l:查找软链接文件
举个例子
查找/etc目录下有哪些子目录:
find /etc -type d
功能四:按修改时间搜索
-option
的选项:
- -atime [±]时间: 按照文件中的数据最后被访问的时间搜索
- -mtime [±]时间: 按照文件内容被修改的最后时间搜索
- -ctime [±]时间: 按照文件的权限、拥有者、所属的组、链接数发生改变的时间搜索
举个例子
查找当前目录5天内修改过的文件
find . -mtime -5
功能五:按文件权限搜索
第二个参数-option
要指定为-perm
第三个参数content
可以指定权限,如777,
指定权限时可以支持[+/=]:
-
777
表示查找权限等于"777"的文件 -
-777
表示包含"777"全部权限的文件 -
+777
表示包含“777”任一权限的文件
举个例子
查找当前目录包含200权限的文件:
find . -perm -200
这个命令可以查找出当前目录权限为2xx
、6xx
、7xx
权限的文件。
功能六:按文件所有者搜索
-option
的选项有:
- -uid 用户 ID:按照用户 ID 査找所有者是指定 ID 的文件
- -gid 组 ID:按照用户组 ID 査找所属组是指定 ID 的文件
- -user 用户名:按照用户名査找所有者是指定用户的文件
- -group 组名:按照组名査找所属组是指定用户组的文件
- -nouser:査找没有所有者的文件
举个例子
查找文件所有者是root的文件
find . -user root
组合搜索
find path -option1 content1 -logic -option2 content2
-logic
的选项有:
- -a:and逻辑与
- -o:or逻辑或
- -not:not逻辑非
默认缺省时是-a
逻辑与的关系。
举个例子
在当前目录下搜索大于2KB,并且文件类型是普通文件的文件
find . -size +2k -a -type f
#等价于
find . -size +2k -type f
在当前目录下搜索文件名要么是hello.c的文件,要么是main.c的文件
find . -name hello.c -o -name main.c
2. grep命令
功能:用来搜索文件内容含指定字符串的行。
基本用法:
grep -option "string" pathfile
关于第二个选项-option
是grep命令的关键,可以指定搜索的方式:
选项 | 功能 |
-r | recursive递归查找 |
-v | invert,反向查找,即不包含"string"的行 |
-n | num,同时显示行号 |
-i | ignore,不区分大小写 |
-l | 显示内容包含“string”的文件 |
-L | 显示内容不包含“string”的文件 |
-A1 | after 1,同时显示查找到的内容的后1行 |
-B2 | before 2,同时显示查找到的内容的前2行 |
-C3 | 相当于after 3 + before 3,同时显示前后3行 |
-e | 相当于egrep,扩展正则表达式 |
举个例子
找出当前目录及子目录中.sh文件内容含有"test"的文件,并显示行号和前后1行
grep -nrC1 "test" *.sh
找出当前目录中的所有txt文件内容中含有first单词的文件
grep -l "first" *.txt
反向操作只需把 -l 变成 -L 即可。
利用管道将find和grep联合使用
从根目录开始查找所有扩展名为 .log 的文本文件,并找出包含 “ERROR” 的行:
find / -type f -name "*.log" | xargs grep "ERROR"
从当前目录开始查找所有扩展名为 .in 的文本文件,并找出包含 “thermcontact” 的行:
find . -name "*.in" | xargs grep "thermcontact"
2022.04.21
参考:C语言中文网 菜鸟教程