博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux查找命令对比(find、locate、whereis、which、type、grep)
阅读量:5244 次
发布时间:2019-06-14

本文共 4523 字,大约阅读时间需要 15 分钟。

 

//太长不看版 find查找磁盘空间,相较于locate和whereis速度较慢。 find和locate的查找单位为文件或者目录,locate其实是find -name的另一种写法。 locate和whereis都是在数据库中查找,所以新增文件无法查找到,必须先updatedb。 whereis只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。 which和type查找的单位都是命令,type可区分命令类型。 grep查找的单位是整行信息,在一个或多个文件中搜索字符串模板,功能是分析一行信息。(功能强大)

 

find

  find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。与查询数据库(/var/lib/locatedb)文件不同,find查找磁盘空间
  $find [指定目录] [选项] [指定动作](不可调换位置)

    - [指定目录]: 所要搜索的目录及其所有子目录。默认为当前目录。

     -[选项]: 所要搜索的文件的特征。

      //常用选项       -name    filename    查找名为filename的文件      -user    username    按文件属主来查找      -group   groupname   按组来查找      -mtime   -n +n       按文件更改时间来查找文件,-n指n天以内,+n指n天以前      -atime   -n +n       按文件访问时间来查找文件      -ctime   -n +n       按文件创建时间来查找文件,-n指n天以内,+n指n天以前      -nogroup             查无有效属组的文件,即文件的属组在/etc/groups中不存在      -type    b/d/c/p/l/f 查是块设备、目录、字符设备、管道、符号链接、普通文件      -size    n[c]        查长度为n块[或n字节]的文件也可查找一个大小范围内的文件,用-n,+n

     -[指定动作]: 对搜索结果进行特定的处理。

  如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。

  find实例

  //查找当前目录下以“1”开头的文件  find . -name "1*"   //.代表当前目录下   //查找etc目录下以字母(不区分大小写)开头,.sh结尾的文件   find /etc -iname "[a-z]*.sh"   //*表示任意多个字符   //查找etc目录下大于20k,十天前创建的文件   find /etc -size +20k -a -mtime +10   //-a表示and,-o表示or   //查找当前目录下的普通文件,并列出他们的完整路径   find . -type f -exec ls -l {} \;   //反斜杠表示转义,{}表示当前find查找出来的文件名
  //如果报find: missing argument to `-exec'的错就是{}和\之间没有加空格

 

locate 

  locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

  $locate [指定目录] [选项](可调换位置)

    [指定目录]:所要查找的任意文件名称或者查找任意目录下的任意文件。

    -[选项]:筛选文件的条件。

      -e  将排除在寻找的范围之外。      -1  如果是1,则启动安全模式。在安全模式下,使用者不会看到权限无法看到的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的权限资料。      -f  将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案放在资料库中。      -q  安静模式,不会显示任何错误讯息。      -n  至多显示n个输出。      -r  使用正规运算式 做寻找的条件。      -o  指定资料库存的名称。      -d  指定资料库的路径      -h  显示辅助讯息      -V  显示程式的版本讯息       -i  忽略字母大小写

  locate实例

  //查找etc目录下以sh开头的文件  locate etc/sh  //在根目录下新建文件,并查找  cd  touch text.log  locate /根目录/text  //发现查找不到刚刚新建的文件,需要updatedb  updatedb  locate /根目录/text  //发现可以查找到文件

 

whereis

  whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。同locate一样,查询数据库(/var/lib/locatedb)文件。所以和locate一样,查找新增加的文件前,需要先使用updatedb命令,手动更新数据库。

  $whereis [选项] [程序名](不可调换位置)

    -[选项]:设置查找文件的类型

      -b     只查找二进制文件。      -B     
<目录>
只在设置的目录下查找二进制文件。      -f 不显示文件名前的路径名称。      -m 只查找说明文件。      -M
<目录>
只在设置的目录下查找说明文件。      -s 只查找原始代码文件。      -S
<目录>
只在设置的目录下查找原始代码文件。      -u 查找不包含指定类型的文件。

    [程序名]:只能用于程序名

  whereis实例

  //查找和find相关的所有文件   whereis find   //查找和find相关的二进制文件   whereis -b find

 

which

   which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

  $which [命令名]

    命令说明which是有选项的,但是我尝试了加选项,对结果并没有影响。希望知道的人来帮我解答这个问题!

  which实例

  //which 查找pwd命令  which pwd  //which 查找adduser命令  which adduser

  which是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的。所以,不同的 PATH 配置内容所找到的命令是不一样的

 

type

  type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令

  $type [选项] [命令名]

    -[选项]

    -t  输出“file”、“alias”或者“builtin”,分别表示给定的指令为“外部指令”、“命令别名”或者“内部指令”;    -p  如果给出的指令为外部指令,则显示其绝对路径;    -a  在环境变量“PATH”指定的路径中,显示给定指令的信息,包括命令别名。

  type实例

  //type输出别名  type ls  //输出是 ls 是 `ls --color=auto' 的别名    //type输出shell关键字  type if   //输出是 if 是 shell 关键字  //type输出shell内嵌  type type   //输出是 type 是 shell 内嵌  //type输出文件  type gedit   //输出是 gedit 是 /usr/bin/gedit  type输出非文件且非命令  type adfaf   //输出是 bash: type: frydsh: 未找到   //命令类型   alias:别名。   keyword:关键字,Shell保留字。   function:函数,Shell函数。   builtin:内建命令,Shell内建命令。   file:文件,磁盘文件,外部命令。   unfound:没有找到。

 

grep

  grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。若不指定任何文件名称,或是所给予的文件名为"-",则grep指令会从标准输入设备读取数据。

  grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

  grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

  grep命令的功能是分析一行信息,若其中有我们所需要的信息,就将其拿出来。需要注意的是它以整行为单位进行数据的选取

  $grep[选项] [文件名]

    -[选项]

    //常用选项    -a  将 binary 文件以 text 文件的方式搜寻数据    -c  计算找到 '搜寻字符串' 的次数    -i  忽略大小写的不同,所以大小写视为相同    -n  顺便输出行号    -v  反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!

  grep实例

  //在输入的字符中匹配root字符串,并输出行号  grep -n root   //提取/etc/passwd文件中,未出现 root 的行  grep -v /etc/passwd root

转载于:https://www.cnblogs.com/huangcy/p/7593518.html

你可能感兴趣的文章
宽字符转窄字符CW2AEX<>(szAreaInfo,CP_UTF8)
查看>>
Component Art UI Framework
查看>>
EF终于也有了IDbContextFactory
查看>>
安装 protobuf
查看>>
NSUserDefaults无法保存数据<转>
查看>>
Java EJX
查看>>
cas原理简介
查看>>
并发、并行、同步、异步、多线程的区别
查看>>
[实践]使用JarJar优雅的发布依赖包
查看>>
[置顶] 三五杆枪,可干革命,三五个人,可以创业
查看>>
getElementByName()和getElementById的区别
查看>>
存储过程转账
查看>>
C#中 从本地DataTable中 查询符合条件的数据
查看>>
音乐之声
查看>>
ppt点击文字出现图片,再次点击消失
查看>>
【转】Eclipse 常用快捷键 (动画讲解)
查看>>
Centos7配置ThinkPHP5.0完整过程(一)
查看>>
修改C#mvc的默认首页
查看>>
禅道Bug管理工具环境搭建
查看>>
浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)
查看>>