常用查找文件命令
which命令可用于查找命令位置。
whereis可查找命令的位置,手册,源文件等。
which和whereis都不能查找内置命令位置。
locate优点:查找速度块;缺点:模糊匹配,匹配路径,实时性差。
find优点:准确查找,功能丰富;缺点:速度较慢
使用grep以文件内容为导向查找
grep “xxx” * -nR
which
which 在PATH变量指定的路径中,搜索某个系统命令的位置。
示例:查看ls命令所在的位置。
$ Which -a ls
/bin/ls
whereis
whereis命令用于搜索程序的二进制文件,源代码文件或帮助文档。
示例:查看命令ls的全部信息。
$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
示例:查看ls的帮助手册
$ whereis -m ls
ls: /usr/share/man/man1/ls.1.gz
示例:只查找ls的二进制文件
$ whereis -b ls
ls: /bin/ls
type
type命令用于查看命令类型:
alias: 别名
keyword: 关键字
builtin: 内置命令
file: 外部命令
-t 输出类型名
-P 如果是外部命令,显示其所在路径
-a 对于外部命令,显示命令路径,命令类型信息
$ type ls
ls 是 `ls --color=auto' 的别名
$ type cd
cd 是 shell 内建
$ type find
find 是 /usr/bin/find
$ type function
function 是 shell 关键字
$ type -a which
which 是 /usr/bin/which
which 是 /bin/which
locate
locate用于快速查找任何文件,它从一个系统数据库进行文件查找,而不需要遍历磁盘,因此速度快。
-e 仅查找存在的文件
-q 安静模式,不会显示任何错误讯息
-n 至多显示 n个输出
-r 使用正规运算式
-i 查找忽略大小写
-c 打印匹配结果数量
快速查找文件
$ locate rk3399.dtsi
/home/forlinx/OK3399/OK3399-desktop-release/kernel/arch/arm64/boot/dts/rockchip/.rk3399.dtsi.swo
/home/forlinx/OK3399/OK3399-desktop-release/kernel/arch/arm64/boot/dts/rockchip/.rk3399.dtsi.swp
/home/forlinx/OK3399/OK3399-desktop-release/kernel/arch/arm64/boot/dts/rockchip/rk3399.dtsi
查找存在的文件
删除上面查找到的rk3399.dtsi.swo文件。
$ rm /home/forlinx/OK3399/OK3399-desktop-release/kernel/arch/arm64/boot/dts/rockchip/.rk3399.dtsi.swo
虽然rk3399.dtsi.swo,已经删除了,但仍然能查询到
$ locate rk3399.dtsi
/home/forlinx/OK3399/OK3399-desktop-release/kernel/arch/arm64/boot/dts/rockchip/.rk3399.dtsi.swo
/home/forlinx/OK3399/OK3399-desktop-release/kernel/arch/arm64/boot/dts/rockchip/.rk3399.dtsi.swp
/home/forlinx/OK3399/OK3399-desktop-release/kernel/arch/arm64/boot/dts/rockchip/rk3399.dtsi
使用-e 忽略已经不存在的文件
$ locate -e rk3399.dtsi
/home/forlinx/OK3399/OK3399-desktop-release/kernel/arch/arm64/boot/dts/rockchip/.rk3399.dtsi.swp
/home/forlinx/OK3399/OK3399-desktop-release/kernel/arch/arm64/boot/dts/rockchip/rk3399.dtsi
查找计算文件的数量
$ locate -e -c rk3399.dtsi
2
忽略大小写查找
注意此处使用的查找名称时RK3399.dtsi
$ locate -e -i RK3399.dtsi
/home/forlinx/OK3399/OK3399-desktop-release/kernel/arch/arm64/boot/dts/rockchip/.rk3399.dtsi.swp
/home/forlinx/OK3399/OK3399-desktop-release/kernel/arch/arm64/boot/dts/rockchip/rk3399.dtsi
使用正则表达式
普通的查找时模糊匹配的,因此只要目标名称中包含搜索的名称,都会被搜索出来,但可以使用正则表达式来精确查找。
$ locate -r /rk3399.dtsi
root@zhutao-virtual-machine:/home/zhutao# locate -r /rk3399.dtsi
/home/forlinx/OK3399/OK3399-desktop-release/kernel/arch/arm64/boot/dts/rockchip/rk3399.dtsi
find
find命令时linux下的强大的查找命令。与locate相比,需要遍历磁盘文件,因此查找速度慢,但它的实时性比locate好。find命令查找条件比locate丰富。
以名称为条件
$ find ./ -name rk3399.dtsi
./forlinx/OK3399/OK3399-desktop-release/kernel/arch/arm64/boot/dts/rockchip/rk3399.dtsi
以权限为条件
$ find ./ -perm 777 | less
./forlinx/OK3399/OK3399-desktop-release/kernel/drivers/gpu/arm/mali400/ump/arch
以文件类型为条件:涉及参数-type
$ find ./ -type l
./forlinx/OK3399/OK3399-desktop-release/kernel/drivers/gpu/arm/mali400/ump/arch
主要类型有:
f 普通文件
d 目录
b 块设备文件
c 字符设备文件
l 符号链接
s 套接字
p 管道文件
以文件大小为条件:涉及参数-size
$ ./ -size 1k #查找当前目录下小于1k的文件
$ find ./ -size +100M #查找当前目录下大于100M的文件
常用单位:
k 千字节
M 兆字节
G 吉字节
c 字节
b 块,一般为512字节
w 字大小,两个字节
以归属为条件:涉及参数–user,-nouser,-group,-nogroup
$ find ./ -user root #查找当前目录下root用户的文件
$ find ./ -nouser #查找当前目录下root用户的被删除的文件
以时间为条件:涉及参数-mtime,-atime,-ctime,-newer,-anewer,-cnewer,-amin,-cmin
$ find ./ -mtime 3 #查找3天前更改过的文件
$ find ./ -mtime -3 #查找3天内更改过的文件
$ find ./ -mtime 0 #查找今天更改过的文件
$ find ./ -newer sort.txt #查找比sort.txt修改时间更新的文件
$ find ./ -anewer sort.txt #查找比sort.txt访问时间更新的文件
$ find ./ -amin 5 #查找5分钟之前访问过的文件
注:
atime 最后访问时间
mtime最后修改时间
ctime最后修改时间,包括了属性和权限