本部分主要介绍:5 种 Linux 文件搜索命令使用及特点,find、locate、which、whereis、grep
find 使用
-
find 命令原理及使用格式
- 遍历整个分区及硬盘
find 路径 [-选项] 文件名
-
特殊字符
-
*name*
包含 name 得文件都搜索 -
name??
以 name 开头得以 2 个位置字符结尾得文件
-
-
选项
-
表格
选项 作用 注意 演示 -name 以文件名搜索 *
表示任意多字符,?
表示一个位置字符-iname 以文件名搜索 不区分大小写 -size 以文件大小搜索 Linux 最小存储单元为数据块(512字节=0.5k),搜索大小需用数据块表示,+ 表示大于 - 表示小于 =表示正好等于 搜索根目录小大于 1MB 得文件 find / -size +2048
-user/-group 以所有者查找文件 不是以文件名,而是以所有者为参数,查找所有者得文件 查找根目录下所有者为 ss 的文件 find / -user ss
-amin 访问时间 在 5 分钟之内访问的文件及目录 -5
,a 为 access 缩写-cmin 文件属性 在一定数间内修改文件属性的,c 为 change 缩写 -mmin 文件内容 在一定时间内修改文件内容,m 为 modify 缩写 -inum 以 inode 节点查找 ls -i
查找 i 节点,以文件 inode 节点删除文件,还可以查找硬链接
-
-
两个条件在查找中的使用
-a
表示两个条件同时满足-o
表示满足其中一个即可-
-type
表示查找类型-
d
查找目录 -
f
查找文件 -
-l
软链接
-
-
演示
find / -name a* -a -type f # 查找根目录下,以 a 开头的文件,-a 表示 and
-
对查找到的结果执行操作
实例
find / -name inittab -exec ls -l {} \;
在根目录下,查找 inittab 文件,并显示其详细信息
-exec
或者-ok 命令 {} \
格式,-0k
询问一次,-exec
不询问{} 表示结果不止一个,\ 表示转义,即替换查找结果,;表示结束
-
实例
ss@localcomputer:~/桌面/tmp$ find ./ -name a* -ok ls -l {} \; < ls ... ./a > ? y -rw-rw-r-- 1 ss ss 0 12月 17 20:18 ./a # 查找 a 文件,并删除 ss@localcomputer:~/桌面/tmp$ find ./ -name a -type f -ok rm {} \; < rm ... ./a > ? y
-
以 inode 查找文件,并删除(文件名有空格,使用 "",但还是删除不掉,使用以下方法)
-
演示
ss@localcomputer:~/桌面$ ls -i 456 tmp ss@localcomputer:~/桌面$ find ./ -inum 456 -ok rm -r {} \; # 删除 inode 为 456 的文件 < rm ... ./tmp > ? y find: ‘./tmp’: 没有那个文件或目录
-
locate 使用
-
使用原理及格式
- 不会像
find
遍历整个目录、分区或硬盘,locate
会建立文件资料库,并定期跟新文件资料库(快表),且在建立的文件资料库中查找(速度快哦) locate 文件名称
- 包含文件名的都会被查找出来,但是查找区分大小写(添加选项
-i
)
- 不会像
-
演示
-
查找已建立好的文件(隔天建立的)
ss@localcomputer:~/桌面/tmp$ ls a abcdefg.txt ss@localcomputer:~/桌面/tmp$ locate abcdefg.txt # 秒搜 /home/ss/桌面/tmp/abcdefg.txt ss@localcomputer:~/桌面/tmp$
-
查找 locate 建立的文件资料库
locate locate
ss@localcomputer:~/桌面/tmp$ locate locate ... ... /var/lib/mlocate/mlocate.db # 很多文件,只取一个 ...
-
-
问题及解决办法
新建文件,
locate
并没有刷新资料库,所以locate
找不到文件(locate
基于文件资料库的查找)-
使用
updatedb
(使用超级管理员权限),更新资料库,再次使用locate
就可以查找到新建的文件了ss@localcomputer:~/桌面/tmp$ touch abcde # 创建一个文件 ss@localcomputer:~/桌面/tmp$ ls a abcde abcdefg.txt ss@localcomputer:~/桌面/tmp$ locate abcde # locate 搜索不到 /home/ss/桌面/tmp/abcdefg.txt ss@localcomputer:~/桌面/tmp$ updatedb # 普通用户无权限使用 updatedb updatedb: 无法为 `/var/lib/mlocate/mlocate.db' 打开临时文件 ss@localcomputer:~/桌面/tmp$ sudo su # 切换超级管理员 [sudo] ss 的密码: root@localcomputer:/home/ss/桌面/tmp# updatedb # 更新资料库 root@localcomputer:/home/ss/桌面/tmp# su ss ss@localcomputer:~/桌面/tmp$ locate abcde # 可以查找到 /home/ss/桌面/tmp/abcde /home/ss/桌面/tmp/abcdefg.txt ss@localcomputer:~/桌面/tmp$
如果新建文件在更目录下的临时文件目录下(/tmp/
),locate
是无法找到的(updatedb
也不好用)
which \ whereis 用法
-
介绍
- 两个命令都是用于搜索 命令 的,但是两者搜索结果有所不同
-
which
结果是命令所在路径 -
whereis
结果是命令所在路径及帮助文档(命令帮助信息、配置文件帮助信息)所在路径
-
演示
-
which 演示
ss@localcomputer:/$ which cp /bin/cp ss@localcomputer:/$ which rm /bin/rm
-
whereis 演示
ss@localcomputer:/$ whereis cp cp: /bin/cp /usr/share/man/man1/cp.1.gz ss@localcomputer:/$ whereis rm rm: /bin/rm /usr/share/man/man1/rm.1.gz
-
-
别名(Alias)
命令存在别名,实际上我们运行的命令是使用的别名
-
如删除命令
rm
别名rm -i
就是询问是否删除ss@localcomputer:~/桌面/tmp$ rm -i abcde rm:是否删除普通空文件 'abcde'? y # 删除前询问 ss@localcomputer:~/桌面/tmp$
Linux 命令本身名由询问,执行命令时,会先去查找别名
使用
which
查找命令就可以显示别名(Ubunt 没有,不知道为什么)
grep
-
功能描述及用法
- 在文件中所寻字符串匹配的行并输出
grep -iv [指定字符串][文件]
-
-i
不区分大小写 -
-v
排除指定字符串
-
演示
-
-i
演示ss@localcomputer:~/桌面/tmp$ grep -i jack a jack JACK
-
-v
屏蔽指定字符串行,一般用于剔除注释 ,以#
开头的行grep -v ^# 文件名称
以#
开头的行
-