Linux常用命令之文件搜索命令
find命令
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法
find [搜索范围][匹配条件]
实例
$find /etc -name init(在目录/etc中查找文件init)
$find /etc -name *init*(在目录/etc中查找包含init的文件)
$find /etc -iname init(在目录/etc中查找文件init或INIT)$find / -size +204800(在根目录下查找大于100MB的文件,+n大于,-n小于,n等于)$find /home -user bbb(在根目录下查找所有者为bbb的文件,-group根据所属组查找)$dind /etc -cmin -5(在/etc下查找5分钟内被修改过属性的文件和目录,-amin访问世家你access,-cmin文件属性change,-mmin文件内容modify)$find /etc -size +163840 -a -size -204800(在/etc下查找大于80MB小于100MB的文件,-a表示两个条件同时满足,-o表示两个条件满足任意一个即可)$find /etc -name inittab -exec ls -l {}\;(在/etc下查找inittab文件并显示其详细信息)
locate/slocate命令
locate命令和slocate命令都用来查找文件或目录。
locate命令其实是<span><a target="_blank" href="https://www.ancii.com/link/v1/W5Y30KTKpQNLnWPU3APn673ddE_E2rWLmgivpr5Ou8s/" rel="nofollow" title="find">find</a> -name</span>
的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb
,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
语法
locate/slocate(选项)(参数)
选项
-d<目录>或--database=<目录>:指定数据库所在的目录; -u:更新slocate数据库; --help:显示帮助; --version:显示版本信息。
参数
查找字符串:要查找的文件名中含有的字符串。
实例
搜索etc目录下所有以sh开头的文件:
locate /etc/sh
搜索用户主目录下,所有以m开头的文件:
locate ~/m
搜索用户主目录下,所有以m开头的文件,并且忽略大小写:
locate -i ~/m
which命令
which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
语法
which(选项)(参数)
选项
-n<文件名长度>:制定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名; -p<文件名长度>:与-n参数相同,但此处的<文件名长度>包含了文件的路径; -w:指定输出时栏位的宽度; -V:显示版本信息。
参数
指令名:指令名列表。
实例
查找文件、显示命令路径:
[ ~]# which pwd /bin/pwd [ ~]# which adduser /usr/sbin/adduser
说明:which是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的 PATH 配置内容所找到的命令当然不一样的!