linux 全局搜索文件(linux 全局搜索文件教程)

linux 全局搜索文件(linux 全局搜索文件教程)

1.命令区别命令功能说明备注which常用于查找可直接执行的命令。只能查找可执行文件。该命令基本只在$PATH路径中搜索,查找范围最小,查找速度快。默认只返回第一个匹配的文件路径,通过选项 -a 可以返回所有匹配结果。命令文件locate超快速查找任意文件。它会从linux内置的索引数据库查找文件的路径,索引速度超快。新建的文件可能需要一定时间才能加入该索引数据库,可用updatedb命令来强制更新索引该命令通常会返回大量匹配项,可以使用 -r 选项通过正则表达式来精确匹配。任意文件find直接搜索整个文件目录,默认直接从根目录开始搜索,功能最强大但速度超慢。除非你指定一个很小的搜索范围。通过 -name 选项指定要查找的文件名,支持通配符。任意文件whereis该指令只能用于查找二进制文件、源代码文件和man手册页。一般文件的定位需使用locate命令。二进制文件2.命令类文件的查找

命令文件一般用which来查找,它从$PATH中找,速度很快。

可以查看一下,$PATH环境变量的值:

[root@myopenvas/]#echo$PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

也就是which从下列路径中查找命令文件:

/usr/local/sbin/usr/local/bin/usr/sbin/usr/bin/root/bin

比如,我们查找ls和grep文件的位置:

[root@myopenvas/]#whichlsaliasls=’ls–color=auto’/usr/bin/ls[root@myopenvas/]#whichgrepaliasgrep=’grep–color=auto’/usr/bin/grep[root@myopenvas/]#3.任意文件的查找

可以用locate和find来查找。

3.1 locate查找文件

locate命令查找文件是通过LINUX文件数据库去查找,它对磁盘不进行扫描,因此查找速度比find快。但是新建的文件,由于没有马上同步到LINUX文件数据库里,这样,刚新建的文件通过locate可能查找不到,需要用updatedb手动执行同步,或者待LINUX系统自动执行任务后才可以找到。

更新的数据库文件位置在这里:

/var/lib/mlocate/mlocate.db

举例:

查找ifcfg-eth0文件:

[root@myopenvas/]#locateifcfg-eth0/etc/sysconfig/network-scripts/ifcfg-eth0[root@myopenvas/]#

然后在/home目录下新建一个mynewtest文件,进行查找:

[root@myopenvas/]#touch/home/mynewtest.txt[root@myopenvas/]#locatemynewtest.txt[root@myopenvas/]#

没有找到,再手动更新一下LINUX文件数据库:

[root@myopenvas/]#updatedb[root@myopenvas/]#

再进行查找:

[root@myopenvas/]#locatemynewtest.txt/home/mynewtest.txt[root@myopenvas/]#

已经找到。

3.2 find查找文件

用法:

find[-H][-L][-P][-Olevel][-Dhelp|tree|search|stat|rates|opt|exec][path…][expression]默认路径为当前目录;默认表达式为-print表达式可能由下列成份组成:操作符、选项、测试表达式以及动作

可以通过各种方式用find来查找文件,下面分别举例:

3.2.1按文件名查找[root@myopenvas/]#find/etc-nameifcfg-eth0/etc/sysconfig/network-scripts/ifcfg-eth0[root@myopenvas/]#find/etc-name”ifcfg-eth0″/etc/sysconfig/network-scripts/ifcfg-eth0[root@myopenvas/]#find/etc/-inameifcfg-eth0#-i忽略大小写/etc/sysconfig/network-scripts/ifcfg-eth0[root@myopenvas/]#find/etc/-inameifcfg-*#*使用通配符/etc/sysconfig/network-scripts/ifcfg-lo/etc/sysconfig/network-scripts/ifcfg-eth03.2.2按文件大小查找

查找/opt目录下,大于10M的文件:

[root@myopenvas/]#find/opt-size 10M/opt/social-engineer-toolkit-master.zip[root@myopenvas/]#

查找/opt目录下,小于2M的文件:

[root@myopenvas/]#find/opt-size-2M

查找/opt目录下,等于10M的文件:

[root@myopenvas/]#find/opt-size10M[root@myopenvas/]#

另外这里查找时,可以指定查找目录的深度:

-maxdepth levels

-mindepth levels

比如:

[root@myopenvas/]#find/-maxdepth4-nameifcfg-eth0#指定最大4层,3层的时候就找不到了/etc/sysconfig/network-scripts/ifcfg-eth0[root@myopenvas/]#3.2.3按时间查找按天atime、ctime、mtime按分钟amin、cmin、mmin

c-change:表示文件的属性被修改,包含所有者、所属组、权限。a-access:表示被访问、浏览过。m-modify:表示文件的内容被修改过。

也有下列属性:

-表示之内
表示超过
没有表示等于

比如:查找修改时间超过5天、等于5天、小于5天的文件:

[root@myopenvas/]#find/etc/-mtime 5[root@myopenvas/]#find/etc/-mtime5[root@myopenvas/]#find/etc/-mtime-5

再比如,查找修改时间超过2分钟、等于2分钟、小于2分钟的文件:

[root@myopenvas/]#find/etc/-mmin2[root@myopenvas/]#find/etc/-mmin2[root@myopenvas/]#find/etc/-mmin-23.2.4按文件属主、属组查找查找属主是moonrong的文件:[root@myopenvas/]#find/home-usermoonrong查找属组是redis的文件:[root@myopenvas/]#find/-groupredis查找属主是moonrong且属组是moonrong的文件:[root@myopenvasmoonrong]#find/home-usermoonrong-groupmoonrong查找属主是moonrong且属组是odoo的文件[root@myopenvas/]#find/home-usermoonrong-a-groupodoo

查找属主是moonrong或者属组是odoo的文件

[root@myopenvas/]#find/home-usermoonrong-o-groupodoo3.2.5按文件类型查找

一共7类:

符号文件类型含义f普通文件d目录l链接文件b块设备文件c字符设备s套接字p管道文件

比如:查找目录文件:

[root@myopenvas/]#find/dev-typed

查找块设备文件:

[root@myopenvas/]#find/dev-typeb/dev/dm-2/dev/dm-1/dev/dm-0/dev/vda2/dev/vda1/dev/vda[root@myopenvas/]#3.2.6按文件权限查找[root@myopenvasmoonrong]#find.-perm644#查找当前目录权限为644的文件

加ls可以直接显示找到的文件属性:

[root@myopenvasmoonrong]#find.-perm644-ls684-rw-r–r–1moonrongmoonrong184月12020./.bash_logout694-rw-r–r–1moonrongmoonrong1934月12020./.bash_profile704-rw-r–r–1moonrongmoonrong2314月12020./.bashrc

再比如,查找600权限的文件:

[root@myopenvasmoonrong]#find.-perm600-ls335544984-rw——-1moonrongmoonrong8711月62021./.cache/gdm/session.log764-rw——-1moonrongmoonrong1111月62021./.cache/abrt/lastnotification1006633864-rw——-1moonrongmoonrong811月62021./.cache/yelp/WebKitCache/Version\13/salt3.2.7按正则表达式查找[root@myopenvasmoonrong]#find/etc-regex’.*ifcfg-eth[0-9]’/etc/sysconfig/network-scripts/ifcfg-eth0[root@myopenvasmoonrong]#

这里:

.*:任意多个字符[0-9]:任意一个数字

3.3 find查找文件后执行的动作

比较常用的:-print、 -ls、 -cp等,其中print是默认格式。

如:在/etc目录下查找名字为ifcfg-eth*的文件,查到后删除:

[root@myopenvasmoonrong]#find/etc/-iname”ifcfg-eth*”-execrm-rf{}\;

这里{} \;是固定格式,{}表示find查找到的结果。

又如:在/etc/目录下查找名字这ifcfg-eth*的文件,查到后将其复制到/tmp目录下:

[root@myopenvasmoonrong]#find/etc/-iname”ifcfg-eth*”-execcp-rvf{}/tmp\;”/etc/sysconfig/network-scripts/ifcfg-eth0″->”/tmp/ifcfg-eth0″[root@myopenvasmoonrong]#4.二进制文件的查找

这类文件的查找,主要用whereis命令。

语法:

whereis[-bfmsu][-B<目录>…][-M<目录>…][-S<目录>…][文件…]

参数:

b查找二进制程序或命令-B从指定目录下 查找二进制程序或命令-m查找man手册文件-M从指定目录下 查找man手册文件-s只查找源代码文件-S从指定目录下 查找源代码文件

比如:显示ln命令的程序和man手册页的位置

bash:/usr/share/man/man1/bash.1.gz[root@myopenvas/]#whereislnln:/usr/bin/ln/usr/share/man/man1/ln.1.gz/usr/share/man/man1p/ln.1p.gz[root@myopenvas/]#

又如:显示scp命令的二进制程序的路径

[root@myopenvas/]#whereis-bscpscp:/usr/bin/scp[root@myopenvas/]#

学习|生活|分享|积累|永不停步

请留下你指尖的温度

让太阳拥抱你

发表评论

登录后才能评论