Linux学习之find,grep,locate命令

Aki 发布于 2022-10-20 299 次阅读


find命令:

语法:find 搜索目录  -name  文件名称,例如 find /root -name source.cpp

可以使用通配符,注意使用通配符需要加引号”“。

  • * 匹配任意字符串
    ? 匹配任意单个字符
    [] 匹配[]内字符,可以按,-区分,也可无符号区分
    ! 匹配非!后的字符串中的每一个字符 一般配合[]使用

例如find /root -name "a*";就是找出所有以a开头的文件

例如find /root -name "*.cpp";就是找出所有以.cpp结尾的文件

按照文件类型搜索type:

普通文件类型f,目录类型d,软连接类型l,字符设备类型c,块设备类型b,管道类型p,本地套接字类型s

例如 find ./ -name a.cpp -type f ,就是在当前目录下找一个普通文件a.cpp

按照文件大小搜索size:

例如 find ./ -size +4k  -size -10k  -type f -name a.cpp 表示搜索当前目录下大于4K小于10K的普通文件,且名称为a.cpp的普通文件

千字节k,兆字节M,吉字节G

-exec参数:

find添加了-exec参数后,命令的尾部需要添加一个后缀{} \;  例如 find /root -name a.cpp -type f -exec ls -lh {} \; 在-exex后添加的shell命令是处理find搜索后的结果,这个调用交互式程序没问题。

-ok参数:

使用方法和操作和-exec相同,只是会和用户交互,需要用户输入y或n来确认是否执行。 find /root -name a.cpp -type f -ok ls -lh {} \;

-xargs参数:

也是和-exec参数效果相同,只不过不用写后缀而已, find /root -name a.cpp -type f | xargs ls -lh

注意不要通过 xargs 直接调用交互式程序。调用交互程序如vim,然后退出vim后会发现输出什么什么都不显示。。。。。。此时要不退出终端,重新连接,要不输入 stty sane 这个命令,注意输入不显示的。

grep命令:

grep是搜索文件,命令输出内容,find是查找文件,两者不相同

语法: grep "查找的内容"  文件路径

-r,如果需要搜索目录中的文件内容,需要递归操作,必须使用-r;

-i,忽略大小写;

-n,显示第几行。

例如 grep "include" /usr -rn ,会输出一大堆东西

也可以配合管道符号 | 来过滤输入的信息,如 lscpu | grep CPU

locate命令:

locate命令要比find -name快得多,原因在于locate命令在查找文件时并不扫描具体目录,而是搜索一个已经创建好的数据库/var/lib/mlocate/mlocate.db 。这个数据库中含有本地几乎所有文件信息(一些被排除在外的目录或刚创建的目录可能不会包含在数据库中。Linux系统会自动创建这个数据库,并且通过定时任务每天自动更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库,但这也需要一定的时间,时间长短和空间大小文件数量有关。

语法:locate 文件名

例如 locate a.cpp