shell编程之find/which/whereis/locate
Posted -飞鹤-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell编程之find/which/whereis/locate相关的知识,希望对你有一定的参考价值。
1. 前言
查找是非常常用的功能,Linux下提供了4个小工具,用来提供查找功能。它们分别为:find、which、whereis、locate,其查找功能各有侧重点,可以根据使用的场景来选择合适的工具程序。
2. find
2.1. 语法:
find [-H] [-L] [-P] [-Olevel] [-D debugopts] [path…] [expression]
在目录层级中搜索文件。
path默认为当前目录,expression默认为打印找到的文件信息。
- -H,除指定软连接目录,否则不搜索路径中软连接下的信息。
- -L, 搜索路径中软连接下的信息。
- -P,不搜索软连接下的信息,此选项为默认设置。
- -O,优化搜索速度,共4级,分别为0,1,2和3。
- -D,开启Debug分析异常,详见find -D help。
- path…,路径组,指定需要搜索的路径。
- expression,指定查找规则,Tests、Actions、Global options、Positional options、Operators。
2.2. expression
2.2.1. Positional
位置选项,它们影响命令行后后面的测试。
2.2.1.1. -daystart
以今天起始时间为标准来衡量。
- -atime,在指定天时间访问过的文件。
- -ctime,在指定天时间状态信息改变过的文件。
- -mtime, 在指定天时间内容修改过的文件。
- -amin,在指定分钟访问过的文件。
- -cmin,在指定分钟状态信息改变过的文件。
- -mmin, 在指定分钟内容修改过的文件。
# 在30分钟前内容修改过的文件
find ./ -name '.cpp" -mmin -30
# 在30天内访问过的文件
find ./ -name '.cpp" -atime -30
# 在30天整时状态发生谈过的文件
find ./ -name '.cpp" -ctime 30
2.2.1.2. -regex
查找符合正则表达式的文件。
# 查找所有以"course"开头的子目录,但是他们下一个版本
find test -type d -regex '.*/course[0-9.]*'
2.2.2. Global Options
为了防止歧义,全局选项应该放在位置选项后,放在测试选项前。
- -d,指定先搜索文件再搜索文件夹。
- -help,输出用法信息。
- -maxdepth,指定最大文件夹搜索层数。
- -mindepth,指定最小文件夹搜索层数。
- -version,输入版本信息。
- -xdv,不进入其他文件系统的文件夹。
2.2.3. Operators
运算符主要是完成逻辑操作,形式为:逻辑非“!”、逻辑或“-o”、逻辑与“-a”。
- 逻辑非
# 表示检索当前目录下,不属于root用户的文件
find . ! -user root
- 逻辑或
# 表示检索根目录下超过30天没有访问的,文件扩展名为.o或者文件名为a.out的所有文件。
# “\\(“转义字符加个特殊符号,防止shell对其进行了解析
find / −name ‘∗.o′ −o −namea.out -atime +30
- 逻辑与
# 表示检索根目录下的属于book用户的所有子目录
find / -type d -a -user book
2.2.4. Tests
比较测试。
# 在当前目录指定搜索文件名
find . -name abc.txt
# 在当前目录指定搜索文件名,大小写不敏感
find . -iname abc.txt
# 在当前目录指定inode搜索
find . -inum 543886
# 在当前目录搜索所有abc开头的文件
find . -name "abc*"
# 搜索23字节的文件
find . -size 23c
# 搜索一个大于10MB的文件
find . -size +10M
# 搜索一个小于10字节的文件
find . -size -10c
# 搜索指定权限的文件
find . -perm 777
# 搜索root用户权限的文件
find . -user root
# 搜索以m开头的目录
find . -type d -name "m*"
# 搜索以m开头的文件
find . -type f -name "m*"
# 搜索软件链接文件
find . -type l
# 搜索空文件
find ./ -empty
2.2.5. Actions
搜索到目标之后,执行指定的动作。
# 删除以.obj结尾的文件
find . -name "*.obj" -delete
# 删除以.obj结尾的文件,会提示确认
find . -name "*.obj" -ok rm \\;
# 删除以.obj结尾的文件
find . -name "*.js" -exec rm \\;
# 查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:
find / -type f -size 0 -exec ls -l \\;
# 列出所有o结尾的文件详细信息
# find . -name "*.o" -ls
3. which
which是搜索环境目录中(通常是usr/bin)中的可执行文件,并返回第一个满足要求的完整路径。
which gcc
#输出:/usr/bin/gcc
4. whereis
4.1. 语法
whereis [options] [-BMS
… -f]
主要是搜索所有的可执行文件、帮助文档。
- options
– -b,指定搜索可执行二进制文件。
– -m, 指定搜索帮助手册。
– -s, 指定搜索资源代码文件。
– -l, 显示所有搜索过的路径。
-BMS是限定在指定目录中搜索相应的文件。
4.2. 示例
# 显示所有的gcc的路径
whereis -b gcc
# 显示所有gcc相关的可执行文件,帮助文档,资源
whereis -bms gcc
whereis gcc
# 只在/usr/bin目录搜索可执行文件,可以在其他目录搜索帮助手册和代码。
whereis -B /usr/bin -f gcc
#
4. locate
4.1. 介绍
locate不是Linux自带的搜索工具,需要安装。其主要功能是通过先索引文件信息到数据库,再来搜索文件信息。
sudo apt install mlocate
安装完之后,locate工具会搜索所有文件,建立索引数据库以提高搜索速度。
locate默认每24小时更新一次数据库。也可以手动更新:
sudo updatedb
4.2. 用法
- 语法
Usage: locate [OPTION]… [PATTERN]…
短标识 | 长标识 | 作用 |
---|---|---|
-A, | –all | 仅打印满足全部模式的条目 |
-b, | –basename | 仅匹配文件名 |
-c, | –count | 打印匹配的条目数 |
-d, | –database DBPATH | 指定DBPATH代替默认的数据库 |
-e, | –existing | 仅打印当前存在的文件条目 |
-L, | –follow | 追踪软链接 |
-h, | –help | 输出帮助信息 |
-i, | –ignore-case | 忽略大小写 |
-p, | –ignore-spaces | 忽略符号和空格 |
-t, | –transliterate | 忽略重音 |
-l, | –limit, -n LIMIT | 限制输出数 |
-P, | –nofollow, -H | 不跟踪软链接 |
-0, | –null | 用空来分隔输出 |
-S, | –statistics | 打印数据库已经使用的统计信息 |
-q, | –quiet | 不报告有关读取数据库的错误信息 |
-r, | –regexp --regex | 利用正则表达式搜索 |
-V, | –version | 打印版本信息 |
-w, | –wholename | 匹配完整路径名(默认) |
4.3. 示例
# 查找所有路径包括gcc的的文件目录
locate gcc
# 查找文件名包括gcc的
locate -b gcc
# 查找所有文件名为gcc的文件
locate -r /gcc$
# 手动更新数据库索引
updatedb
以上是关于shell编程之find/which/whereis/locate的主要内容,如果未能解决你的问题,请参考以下文章