Linux 文件搜索命令

本部分主要介绍:5 种 Linux 文件搜索命令使用及特点,find、locate、which、whereis、grep

find 使用

  1. find 命令原理及使用格式

    • 遍历整个分区及硬盘
    • find 路径 [-选项] 文件名
  2. 特殊字符

    • *name* 包含 name 得文件都搜索
    • name?? 以 name 开头得以 2 个位置字符结尾得文件
  3. 选项

    • 表格

      选项 作用 注意 演示
      -name 以文件名搜索 * 表示任意多字符,? 表示一个位置字符
      -iname 以文件名搜索 不区分大小写
      -size 以文件大小搜索 Linux 最小存储单元为数据块(512字节=0.5k),搜索大小需用数据块表示,+ 表示大于 - 表示小于 =表示正好等于 搜索根目录小大于 1MB 得文件 find / -size +2048
      -user/-group 以所有者查找文件 不是以文件名,而是以所有者为参数,查找所有者得文件 查找根目录下所有者为 ss 的文件 find / -user ss
      -amin 访问时间 在 5 分钟之内访问的文件及目录 -5 ,a 为 access 缩写
      -cmin 文件属性 在一定数间内修改文件属性的,c 为 change 缩写
      -mmin 文件内容 在一定时间内修改文件内容,m 为 modify 缩写
      -inum 以 inode 节点查找 ls -i 查找 i 节点,以文件 inode 节点删除文件,还可以查找硬链接
  4. 两个条件在查找中的使用

    • -a 表示两个条件同时满足

    • -o 表示满足其中一个即可

    • -type 表示查找类型

      1. d 查找目录
      2. f 查找文件
      3. -l 软链接
    • 演示

      find / -name a* -a -type f # 查找根目录下,以 a 开头的文件,-a 表示 and 
      
  5. 对查找到的结果执行操作

    • 实例 find / -name inittab -exec ls -l {} \;

    • 在根目录下,查找 inittab 文件,并显示其详细信息

    • -exec 或者 -ok 命令 {} \ 格式,-0k 询问一次,-exec 不询问

    • {} 表示结果不止一个,\ 表示转义,即替换查找结果,;表示结束

    • 实例

      ss@localcomputer:~/桌面/tmp$ find ./ -name a* -ok ls -l {} \;
      < ls ... ./a > ? y
      -rw-rw-r-- 1 ss ss 0 12月 17 20:18 ./a
      
      # 查找 a 文件,并删除
      ss@localcomputer:~/桌面/tmp$ find ./ -name a -type f -ok rm {} \;
      < rm ... ./a > ? y
      
  6. 以 inode 查找文件,并删除(文件名有空格,使用 "",但还是删除不掉,使用以下方法)

    • 演示

      ss@localcomputer:~/桌面$ ls -i
      456 tmp
      ss@localcomputer:~/桌面$ find ./ -inum 456 -ok rm -r {} \;   # 删除 inode 为 456 的文件
      < rm ... ./tmp > ? y
      find: ‘./tmp’: 没有那个文件或目录
      

locate 使用

  1. 使用原理及格式

    • 不会像 find 遍历整个目录、分区或硬盘,locate 会建立文件资料库,并定期跟新文件资料库(快表),且在建立的文件资料库中查找(速度快哦)
    • locate 文件名称
    • 包含文件名的都会被查找出来,但是查找区分大小写(添加选项 -i
  2. 演示

    • 查找已建立好的文件(隔天建立的)

      ss@localcomputer:~/桌面/tmp$ ls
      a  abcdefg.txt
      ss@localcomputer:~/桌面/tmp$ locate abcdefg.txt  # 秒搜
      /home/ss/桌面/tmp/abcdefg.txt
      ss@localcomputer:~/桌面/tmp$ 
      
    • 查找 locate 建立的文件资料库 locate locate

      ss@localcomputer:~/桌面/tmp$ locate locate
      ...
      ...
      /var/lib/mlocate/mlocate.db            # 很多文件,只取一个
      ...
      
  3. 问题及解决办法

    • 新建文件,locate 并没有刷新资料库,所以 locate 找不到文件(locate 基于文件资料库的查找)

    • 使用 updatedb (使用超级管理员权限),更新资料库,再次使用 locate 就可以查找到新建的文件了

      ss@localcomputer:~/桌面/tmp$ touch abcde         # 创建一个文件
      ss@localcomputer:~/桌面/tmp$ ls
      a  abcde  abcdefg.txt
      ss@localcomputer:~/桌面/tmp$ locate abcde            # locate 搜索不到
      /home/ss/桌面/tmp/abcdefg.txt
      ss@localcomputer:~/桌面/tmp$ updatedb                # 普通用户无权限使用 updatedb
      updatedb: 无法为 `/var/lib/mlocate/mlocate.db' 打开临时文件
      ss@localcomputer:~/桌面/tmp$ sudo su             # 切换超级管理员
      [sudo] ss 的密码: 
      root@localcomputer:/home/ss/桌面/tmp# updatedb    # 更新资料库
      root@localcomputer:/home/ss/桌面/tmp# su ss
      ss@localcomputer:~/桌面/tmp$ locate abcde            # 可以查找到
      /home/ss/桌面/tmp/abcde
      /home/ss/桌面/tmp/abcdefg.txt
      ss@localcomputer:~/桌面/tmp$ 
      
    • 如果新建文件在更目录下的临时文件目录下(/tmp/),locate 是无法找到的(updatedb 也不好用)

which \ whereis 用法

  1. 介绍

    • 两个命令都是用于搜索 命令 的,但是两者搜索结果有所不同
    • which 结果是命令所在路径
    • whereis 结果是命令所在路径及帮助文档(命令帮助信息、配置文件帮助信息)所在路径
  2. 演示

    • which 演示

      ss@localcomputer:/$ which cp
      /bin/cp
      ss@localcomputer:/$ which rm
      /bin/rm
      
    • whereis 演示

      ss@localcomputer:/$ whereis cp
      cp: /bin/cp /usr/share/man/man1/cp.1.gz
      ss@localcomputer:/$ whereis rm
      rm: /bin/rm /usr/share/man/man1/rm.1.gz
      
  3. 别名(Alias)

    • 命令存在别名,实际上我们运行的命令是使用的别名

    • 如删除命令 rm 别名 rm -i 就是询问是否删除

      ss@localcomputer:~/桌面/tmp$ rm -i abcde
      rm:是否删除普通空文件 'abcde'? y            # 删除前询问
      ss@localcomputer:~/桌面/tmp$ 
      
      
    • Linux 命令本身名由询问,执行命令时,会先去查找别名

    • 使用 which 查找命令就可以显示别名(Ubunt 没有,不知道为什么)

grep

  1. 功能描述及用法

    • 在文件中所寻字符串匹配的行并输出
    • grep -iv [指定字符串][文件]
    • -i 不区分大小写
    • -v 排除指定字符串
  2. 演示

    • -i 演示

      ss@localcomputer:~/桌面/tmp$ grep -i jack a
      jack
      JACK
      
    • -v 屏蔽指定字符串行,一般用于剔除注释 ,以 # 开头的行

      grep -v ^# 文件名称# 开头的行

你可能感兴趣的:(Linux 文件搜索命令)