0%

Linux查找命令

Linux基础(5):linux的查找命令

Linux进行查找的相关指令,find grep locate

find命令

针对文件的属性进行搜索。文件具备的基本属性有:文件名、文件类型、文件大小、文件的目录深度

依据文件名查询(-name)

基本语法

find 搜索的路径 -name 要搜索的文件名

在具体搜索的时候,可能不确定文件名的具体情况,可以采用模糊查询

注意模糊查询时,文件名加引号,单引号双引号均可

1
2
?代替一个字符
* 代替多个字符

操作示例

1
2
3
4
5
6
7
8
9
10
11
12
13
#精确查询
gao@gao-VirtualBox:~/桌面/test$ find ./ -name temp
./temp

#模糊查询, 注意格式
gao@gao-VirtualBox:~/桌面/test$ find ./ -name "tem*"
./temp
./temp3
./temp2
gao@gao-VirtualBox:~/桌面/test$ find ./ -name 'tem*'
./temp
./temp3
./temp2

依据文件类型查询(-type)

基本语法

find 搜索的路径 -type 要搜索的文件类型

文件类型有七种

文件类型

操作示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#查询普通文件
gao@gao-VirtualBox:~/桌面/test$ find ./ -type f
./b/c
./all.tar.bz2
./all.tar.gz
./d/ff
./d/d
./d/gg
./all.rar
./temp
./temp3
./temp2
./all.tar

#查询目录文件
gao@gao-VirtualBox:~/桌面/test$ find ./ -type d
./
./b
./case1
./d

依据文件大小查询(-size)

基本语法

find 搜索目录 -size 【+/-】文件大小

1
2
3
4
find ./ -size 4k              搜索的文件范围,区间为 (4-1k,4k], 表示一个区间,大于 3k, 小于等于 4k
find ./ -size +4k (4k, 正无穷), 表示搜索大于 4k 的文件
find ./ -size -4k [0k, 4-1k], 表示一个区间,大于等于 0 并且 小于等于 3k
find ./ -size +1k -size -5k (1k, 5k), 表示搜索该区间的文件

操作示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#具体大小附近判定
gao@gao-VirtualBox:~/桌面/test$ find ./ -size 4k
./
./b
./case1
./d

#具体大小到无穷大区间
gao@gao-VirtualBox:~/桌面/test$ find ./ -size +4k
./all.tar

#0到具体大小区间
gao@gao-VirtualBox:~/桌面/test$ find ./ -size -4k
./b/c
./all.tar.bz2
./all.tar.gz
./d/ee
./d/ff
./d/d
./d/gg
./all.rar

#两边均有范围限制
gao@gao-VirtualBox:~/桌面/test$ find ./ -size +1k -size -5k
./
./b
./case1
./d

控制目录层级(-maxdepth/-mindepth)

基本语法

find 搜索路径 -max(min)depth 层数 其他属性的搜索格式

注意:必须配合其他属性联合搜索,必须先写层级目录指令,再写其他属性搜索

1
2
find ./ -maxdepth 3 -name temp2     #max,就是最多搜索到第几层
find ./ -mindepth 2 -name temp2 #min,就是最少从第几层开始

操作示例

1
2
3
4
gao@gao-VirtualBox:~$ find ./ -maxdepth 3 -name temp2
./桌面/test/temp2
gao@gao-VirtualBox:~$ find ./ -mindepth 2 -name temp2
./桌面/test/temp2

同时执行多个操作(exec/ok/xargs)

基本语法

1
2
3
4
5
find指令 -exec shell指令 {} \;         注意{}与\之间空格
find指令 -ok shell指令 {} \; 注意{}与\之间空格,会有和用户之间的交互
find指令 | xargs shell指令

另:效率上来说,xargs效率更高,因为-exec是逐条传递数据给后面的指令,而xargs是一次性传递数据

操作示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#-exec方法
gao@gao-VirtualBox:~/桌面/test$ find ./ -name "*p*" -exec ls -lh {} \;
-rw-rw-r-- 1 gao gao 11 6月 19 16:02 ./temp
-rw-rw-r-- 1 gao gao 11 6月 20 14:18 ./temp3
-rw-rw-r-- 1 gao gao 11 6月 20 14:17 ./temp2

#-ok方法,特点是会发生交互
gao@gao-VirtualBox:~/桌面/test$ find ./ -name "*p*" -ok ls -lh {} \;
< ls ... ./temp > ? y
-rw-rw-r-- 1 gao gao 11 6月 19 16:02 ./temp
< ls ... ./temp3 > ? y
-rw-rw-r-- 1 gao gao 11 6月 20 14:18 ./temp3
< ls ... ./temp2 > ? y
-rw-rw-r-- 1 gao gao 11 6月 20 14:17 ./temp2

#| xargs 方法,效果等同于-exec,书写更简单
gao@gao-VirtualBox:~/桌面/test$ find ./ -name "*p*" | xargs ls -lh
-rw-rw-r-- 1 gao gao 11 6月 19 16:02 ./temp
-rw-rw-r-- 1 gao gao 11 6月 20 14:17 ./temp2
-rw-rw-r-- 1 gao gao 11 6月 20 14:18 ./temp3

grep命令

基于文件内容进行搜索

基本语法

grep 要搜索的内容 搜索路径 附带的参数

1
2
3
4
5
6
附带的参数主要有:
r:对文件递归搜索
i:忽略搜索内容的大小写
n:显示行号

注意:搜索的内容写在引号中,要先写搜索内容

操作示例

1
2
3
4
5
6
gao@gao-VirtualBox:~/桌面/test$ grep "world" temp -ni
1:world
gao@gao-VirtualBox:~/桌面/test$ grep "world" ./ -nir
./temp:1:world
./temp3:1:world
./temp2:1:world

locate命令

基于操作系统维护的数据库,查询是否存在某个文件

使用之前最好先去更新数据库信息

1
sudo updatadb

使用方法

1
2
3
4
locate test   #查找数据库中,test开头的所有文件
locate test -i #忽略大小写
locate test -n 5 #显示查询得到的前五条记录
locate /home/gao/test #查找某个具体目录下文件,必须使用绝对路径