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 ^# 文件名称# 开头的行

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • 1.文件搜索命令locate locate 文件名 在后台数据库按文件名搜索文件,搜索速度更快 /var/lib/...
    华夫饼干阅读 453评论 0 0
  • 内容概要 locate locate命令优点是搜索速度更快,耗费系统资源更少,缺点是只能按文件名搜索locate命...
    若兮缘阅读 4,493评论 0 29
  • locate 搜索命令 搜索格式:locate 文件名在后台数据库中按文件名称进行搜索,搜索速度快 第一次执行此命...
    笑Skr人啊阅读 294评论 0 1
  • 语法格式:locate 文件名/var/lib/mlocate:locate命令所搜索的后台数据库; find:查...
    随玉而安_gao阅读 268评论 0 0
  • locate命令搜索: locate不能搜索出新建的文件,是在数据库中进行搜索 如果需要搜索新文件,需要先upda...
    LorryZ阅读 1,068评论 0 0