Linux之文件搜索命令

Posted by 程序亦非猿 on 2015-08-30

文件搜索命令locate

在指定的数据库按文件名字搜索.

优点:

  1. 搜索速度快(在后台数据库中按文件名搜索)

数据库: /var/lib/mlocate

1
locate filename

第一次执行的时候会出现:

1
2
3
4
5
6
7
WARNING: The locate database (/var/db/locate.database) does not exist.
To create the database, run the following command:
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
Please be aware that the database can take some time to generate; once
the database has been created, this message will no longer appear.

缺点:

  1. 不能搜所刚创建的文件(数据库默认一天一更新)
  2. 只能按文件名字搜索

那么我非要立马更新数据库呢?

1
updatedb

Mac 上试了 zsh: command not found: updatedb

locate locate 可以搜索到数据库

特点:
有配置文件,可以配置哪些不搜索
/etc/updatedb.conf

发现mac 又没有 - -!!

命令搜索命令whereiswhich

whereis

可以看到命令所在路径以及帮助文档所在位置

  • whereis 命令名
    选项:
  1. -b 只查找可执行文件
  2. -m 只查找帮助文件

只能搜索系统自带的命令
还有一些类似的命令: whoami whatis

which

可以看到 命令的别名

  • which 文件名
    搜索命令所在路径及别名

Mac都不一样 - -

PATH环境变量

定义的是系统搜索命令的路径

echo $PATH 可以查看环境变量 由:分隔

文件搜索命令find

find

非常强大,然而耗费资源(遍历所有文件)

  • find [搜索范围] [搜索条件]

PS:

  1. 避免大范围搜索,会非常耗费系统资源
  2. find 实在系统当中搜索符合条件的文件名.如果需要匹配,使用通配符匹配,通配符是完全匹配.
1
2
3
4
5
6
➜ testlinux ls
a asdfasdfasdfa.md b c.md
adad avc b.md
➜ testlinux find b
b
b/b.md

不指定 搜索范围,默认在当前目录

通配符

    • 匹配任意内容
  1. ? 匹配任意一个字符
  2. [] 匹配任意一个中括号内的字符

选项

条件

  1. -iname 不区分大小
  2. -user root 按照所有者搜索
  3. -nouser 查找没有所有者的文件 (一般就是垃圾文件了)

按时间查找

  1. -atime 文件访问时间
  2. -ctime 改变文件属性
  3. -mtime 修改文件内容

查找10天前修改的文件:

find /var/log/ -mtime +10
-10 10天内修改文件
10 10天当天修改的文件
+10 10天前修改的文件

文件大小,inode

find . -size 25k 查找文件大小是25KB的文件

  • -25k 小于25KB
  • 25k 等于25KB
  • +25k 大于25KB

k M k要小写M大写,不能省略,省略的话为25个扇区(每个扇区512个字节)

find . -inum 262422 查找i节点是262422的文件

逻辑

  • -a and 逻辑与
  • -o or 逻辑或

查找/etc/目录下,大于20kb并且小于50kb的文件

find /etc -size +20k -a -size -50k

查找/etc/目录下,大于20kb并且小于50kb的文件,并显示详细信息

find /etc -size +20k -a -size -50k -exec ls -lh {} \ 这里有个空格

  • -exec/-ok 命令{}\ ; 对搜索结果执行操作

-exec {} \ 是语法,必须这么写,中间可以写其他命令~

1
2
3
4
testlinux find b.md -exec ls -lh {} \;
-rw-r--r-- 1 alanchen staff 0B 8 24 20:23 b.md
testlinux

字符串搜索命令 grep

  • grep [选项] 字符串 文件名

在文件当中匹配符合条件的字符串

选项:

  1. -i 忽略大小写
  2. -v 排除指定字符串

练习

find 与 grep 的区别

find : 在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配.
常用于搜索文件

grep : 在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式是包含匹配.
常用于搜索文件内容

Linux达人养成计划