linux - 文件搜索命令

时间:2021-05-28 16:31:07

linux - 文件搜索命令

linux - 文件搜索命令

我们输入locate anaconda-ks.cfg 就可以搜索到,但是我们新建文件 touch abc ,locate abc 是搜索不到的,原因是:locate并不是在系统中直接搜索的,而是在 /var/lib/mlocat(这个库名字会根据linux版本变化有一点变化)这里是我们locate的数据库,而是在这个数据库中搜索,这样不需要遍历我们的系统,速度是非常快的,但是这个数据库不是实时更新的,每天更新一次,要想强制更新数据库,找到新建文件,我们输入updatedb命令即可,这样就可以找到了,优点:快;缺点:只能根据文件名来搜索

linux - 文件搜索命令


还有一点我们需要注意,我们在root下创建congls,再在tmp下创建congls,更新数据库,也只能找到root下的congls,这是怎么回事呢,原因是:

linux - 文件搜索命令

对应文件四句话,第一句 yes 后面的搜索规则全部生效,第二句:不搜索这些文件目录系统,第三句:不搜索这些文件类型,第四句:不搜索这些路径下的文件;我们的tmp目录在列,所以我们是搜不出来的

linux - 文件搜索命令


不光我们的locate命令遵守这个配置文件,whereis和which也会遵守。


linux - 文件搜索命令

whereis ls 查看系统命令ls所在位置,可执行文件和帮助文件 不加选项默认都找出 -b位置可执行文件 -m文档

linux - 文件搜索命令

linux - 文件搜索命令

linux - 文件搜索命令

查出命令的位置且查出命令的别名。 ls 别名 : ls --color=auto,不过也不是所有的命令都有别名,没有就不显示别名

which pwd 只会看到位置  :/bin/pwd

当然,也有些命令是看不到位置的,是shell内部自带的,不需要可执行文件,通过whereis,which能找到可执行文件都是我们外部安装的。比如cd ,找不到可执行文件只找到帮助文档

linux - 文件搜索命令

那么这些选择的路径是什么呢?

在linux中,要想执行执行脚本,执行文件或者命令,只有一种办法就是用绝对路径,也就是说我们打 ls名利,要打/bin/ls 才会执行,这样就很不方便,我们要敲很长的目录,所以系统给我们开发了一个$PATH环境变量,输出环境变量,用:分割的几个路径,当我们输入ls时,系统搜索第一个路径,没有就搜索第二个,找到了就执行,如果搜索完这些路径都没有找到就会报错,命令不存在。所以有这个环境变量我们敲命令是不需要输入路径的。但是当我们自己写的脚本和程序始执行时,我们就需要加上绝对路径,否则我们就要把脚本放到$PATH下的几个路径中去。(其实我们的windows也是这样的,只是我们都是在图形界面中操作,我们可以看看windows的PATH环境变量在那:我的电脑右键属性,高级设置->高级->环境变量->双击PATH就可以修改了,如果我们在windows的命令行中,windows也是从这些路径下搜索)

linux - 文件搜索命令

linux - 文件搜索命令

linux - 文件搜索命令

fina / -name install.log 表示在 根 下 按照名称搜索文件install.log ,非常耗费资源,一般不要在白天使用非常耗费资源的操作,而且 根 整个目录范围很大。系统中有install.log 和 install.log.syslog,为什么只找到install.log,因为find搜索是搜索完全匹配的文件名,不多不少,要想都找出来就得使用通配符。

linux - 文件搜索命令


在文件结尾加一个 * 表示找出和install.log有关的文件,这个install.loghe *需要用“”引起来,如果不输入文件名,直接加 * ,即搜索出root下所有文件,包括隐藏文件

linux - 文件搜索命令

find /root -name "ab[cd]",表示搜索名称为abc或者abd的文件

find /root -name "*[cd]",表示搜索名称为c结尾或者d结尾的文件

find /root -name "[cd]",表示搜索名称为c或者d的文件

linux - 文件搜索命令


find /root -user root 搜索所有者为root的文件

find /root -nouser  搜索没有所有者的文件,一般情况下没有所有者的文件是垃圾文件,我们会手动删除这些文件,不过没有所有者的文件有两种情况,一种是系统内核直接调用,不经过系统,有可能没有所有者,在/sys , /proc 中交互就有可能留下没有所有者的情况;第二种情况当文门的外接设备。比如U盘移动硬盘的数据是在windows中创建的,windows有所有者但是是忽略所有者的,所以当我们拷贝这些文件到linux中,有可能是没有所有者,所以这两种情况是不需要删除。

linux - 文件搜索命令


find /var/log/ -mtime +10 表示查找该目录下10天以前修改文件的内容。

一般我们查找日志十天前的日志几乎就可以删除了。

5 表示前五天的当天的24小时

+5五天前的  -5前五天

linux - 文件搜索命令



find . -size 25k,表示搜索当前目录下文件大小为25k的文件,. 代表当前目录,我们也可以设置其他目录

find /root -size 25M 表示搜索root下文件大小为25M的文件,这个单位区分大小写,k必须是小写,M必须是大写

如果我们不带单位,默认单位是数据块,这个数据块和我们分区的数据块是不同的,不是一个4字节,一个数据块代表一个扇区,一个扇区512字节,相当于25*512字节。这个扇区像蜘蛛网一样同心圆外加上直径分割类似光盘一样。

linux - 文件搜索命令



-exec ls -lh {} \; 只要输入了 -exec必须跟上{} \;这是格式,为什么需要加-exec呢,因为我执行为第一条命令找到了符合条件的文件,但是只会显示文件的位置,我们想查看详细信息,还得一个一个的查看,所以我们接着 -exec ls -lh {} \;就可以执行完第一条命令接着执行第二条,查找出的文件就会全部显示详细信息,也不是所有的命令都能放在后面,只有能处理第一条命令找到的文件才能放在-exec后面。

linux - 文件搜索命令


find /root -inum 262421 -exec rm -rf {} \;     删除前一条找到的文件,这样的话rm -rf 后面需要跟着的文件就不需要写了,默认处理前面找到的文件。


linux - 文件搜索命令

grep "size" anaconda-ks.cfg 表示搜索该文件中包含size关键字的内容,会列出所有包含size关键字的那行内容

grep -v "size" anaconda-ks.cfg 表示搜索该文件中不包含size关键字的内容,会列出所有不包含size关键字的那行内容

linux - 文件搜索命令


linux - 文件搜索命令

find命令是完全匹配,之前说了是找出文件名完全一样的,如果需要模糊,需要加通配符

grep命令是包含匹配,他是包含关键字就找出,与find刚好相反。