咱们常常须要在系统中查找一个文件,那么在linux系统中咱们如何准确高效的肯定一个文件在系统中的具体位置呢?一下我总结了在linux系统中用于查找文件的几个命令。linux
find是最经常使用也是最强大的查找命令,它能够查找任何类型的文件。shell
find命令的通常格式为:find <指定目录><指定条件><指定动做>,即find pathname -options [-print -exec -ok]数据库
参数解释:ssh
pathname:pathname为搜索的目录及其子目录,默认状况下为当前目录ui
经常使用的option选项:spa
-name:按文件名来查找文件命令行
-user:按照文件的属主来查找文件io
-group:按照文件所属的组来查找文件变量
-perm:按照文件权限来查找文件date
-prune:不在当前指定目录中查找
例如:已知在/目录,/etc,/user以及/user/bin目录下都有一个名为1111的文件,咱们看一下-prune的做用
find -name 1111 -print为在当前目录及其子目录下下查找名为1111的文件。
find . -path ./etc -prune -o -name 1111 -print为在当前目录及其子目录(除了/etc目录及其子目录)下查找名为1111的文件。
find . -path ./usr -prune -o -name 1111 -print为在当前目录及其子目录(除了/usr目录及其子目录)下查找名为1111的文件。
find. −path./usr/bin−o−path./etc -prune -o -name 1111 -print为在当前目录及其子目录(除了/usr/bin目录及其子目录;/etc目录及其子目录)下查找名为1111的文件。因为命令行不能直接识别圆括号,所以要用转义字符\,在和先后都要有空格。
注意:find命令不加任何参数时,表示搜索路径为当前目录及其子目录,默认的动做为-print,即不过滤任何结果,也就是说输出全部的文件。
-mtime -n +n:按照文件修改时间来查找文件,-n表示文件修改时间距如今n天之内,+n表示文件修改时间据如今n天之前
-type:查找某一类型的文件(b:块设备文件;d:目录文件;c:字符设备文件;p:管道文件;l:连接文件;f:普通文件)
-nogroup:查找无有效所属组的文件,即文件所属的组在/etc/group中不存在
-nouser;查找无有效所属主的文件,即文件的所属主在/etc/passwd中不存在
locate命令实际是"find -name"的另外一种写法,可是查找方式跟find不一样,它比find快得多。由于它不搜索具体目录,而是在一个数据库(/var/lib/locatedb)中搜索指定的文件。次数据库含有本地文件的全部信息,此数据库是linux系统自动建立的,数据库由updatedb程序来更新,updatedb是由cron daemon周期性创建的,默认状况下为天天更新一次,因此用locate命令你搜索不到最新更新的文件,除非你在用locate命令查找文件以前手动的用updatedb命令更新数据库。
注意:每次有新文件更新和删除以后,在updatedb以前数据库中保存的文件信息不会改变,即新添加一个文件以后,updatedb以前用locate搜索不到指定的文件。一样再删除一个文件信息已经在数据库中的文件时,updatedb以前用locate照样能搜索到该文件的信息,,尽管此时该文件已经不存在了。
whereis命令只能用于搜索二进制文件(-b)、源代码文件(-s)、说明文件(-m)。若是省略参数则返回全部的信息。
which命令是在PATH变量指定的路径中搜索指定的系统命令的位置。用echo $PATH可显示当前PATH变量的值。
type命令主要用于区分一个命令究竟是shell自带的仍是外部独立的二进制文件提供的。若是是shell自带的则会提示此命令为shell buildin,不然会列出命令的位置。例如:cd为shell自带的命令,当用which查找时,which会按照PATH变量设置的路径进行搜索,结果显示no cd in...;用type cd则显示cd为shell buildin命令。ssh不是shell自带命令,用type时会显示ssh的路径。