linux 查找相关的命令(find, grep, which, whereis, locate)

whereis 命令

whereis命令用于查找文件。该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。

	whereis [-bmsu] [BMS 目录名 -f ] 文件名 -b (定位可执行文件),-m (定位帮助文件),-s (定位源代码文件),-u (除可前面几种文件以外)   -B (指定搜索可执行文件的路径) -M (搜索帮助文件路径) -s (指定搜索源代码路径) 

grep 命令

grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

  • 当前目录查找 test 字符串的文件,并打印该字符串的行

      grep test *file 
    
  • 在 /etc/acp1 目录下搜索含 update 的字符串

      grep -r update /etc/acp1
    
  • 在 student.txt 文件里搜索 “class”和“todd”字符串

      grep -e "class 1" -e "todd" student.txt
    

which 命令

which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。

locate 命令

locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库

-e 将排除在寻找的范围之外。
-1 如果是1.在安全模式下,使用者不会看到权限无法看到的档案。
-f 将特定的档案系统排除在外
-q 安静模式,不会显示任何错误讯息。
-n 至多显示 n个输出。
-r 使用正规运算式 做寻找的条件。
-o 指定资料库存的名称。
-d 指定资料库的路径
-h 显示辅助讯息
-V 显示程式的版本讯息

find 命令

	find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

文件名搜索

  • 在 /home 目录下,查找名称为 test 的文件,不分大小写

      find /home -iname test
    
  • 在根目录查找 test 的所有目录

      find / -type d -name test
    
  • 当前目录查找名字为 test.php 的文件

      find -type f -name test.php
    
  • 当前目录查找所有php文件

      find -type f -name "*.php"
    
  • 在 /tmp 目录下搜索隐藏文件(-type d 是搜索隐藏文件夹)

      find /tmp -type f -name ".*"
    
  • 在当前目录搜索 .txt 和 .pdf 结尾的文件

      find . -name "*.txt" -o -name "*.pdf"
    
  • 在 /home 目录下面搜索文件名结尾不是 .txt 的文件,(!是否定参数)

      find /home ! -name "*.txt"
    

根据时间搜索

命令 说明
-atime,-amin 用户最近一次访问时间(time/天,min/分钟)
-mtime,-mmin 用户最近一次修改时间
-ctime,-cmin 文件数据元(如权限等)最后一次修改时间
  • 当前目录下查找7天内访问过的文件 (正好7天,超过7天)

      find . -type f -atime -7 (7, +7)
    
  • 当前目录下查找访问时间超过10分钟的文件 (3分钟以内)

      find . -type f -amin +10 (-3)
    
  • 当前目录下查找比 file.log 文件更新的所有文件

      find . -type f -newer file.log
    

根据文件大小搜索

b c w k M G
块(512字节) 字节 字(2字节) k字节 M字节 G字节
  • 搜索小于25兆的文件 (大于10K,正好20K)

      find . -type f -size -25M (+10K, 20K)
    

根据文件权限/所有权

  • 当前目录搜索权限为777的文件

      find . -type f -perm 777
    
  • 当前目录搜索权限不是 644, 文件名以 php 结尾的文件

      find . -type f -name "*.php" ! -perm 644
    
  • 当前目录搜索用户 tom 的文件

      find . -type f -user tom
    
  • 当前目录搜索用户组为 sunk 的所有文件

      find . -type f -group sunk
    

搜索所有者与所属组

-uid 用户 ID 按照用户 ID 査找所有者是指定 ID 的文件
-gid 组 ID 按照用户组 ID 査找所属组是指定 ID 的文件
-user 用户名 按照用户名査找所有者是指定用户的文件
-group 组名 按照组名査找所属组是指定用户组的文件
-nouser 査找没有所有者的文件

按文件类型搜索

type 类型参数列表

f l d c b s p
普通文件 符号连接 目录 字符设备 块设备 套接字 Fifo

逻辑运算符

-a(and逻辑与), -o (or逻辑或),-not(not逻辑非)

  • 3天以内修改,或者权限为644

      find . -mtime -3 -o -perm 644		
    
  • 查找文件名 cangls 或 blos 满足一个显示

      find . -name cangls -o -name blos
    
  • 找3天内修改,且名字不是 blos 的文件

      find . -mtime 3 -not name blos
    

其他高级搜索

  • 在根目录与当前目录下 tmp 目录里搜索空文件(-type d 是搜索空目录)

      find / tmp -type f -empty
    
  • 查找所有可执行文件

      find / -perm /a=x
    
  • 在当前目录搜索内容含“140.206.111.111”的文件

      find . -type f -name "*" | xargs grep "140.206.111.111"
    
  • 搜索7天内修改的 jpeg 或 jpg 的文件。

      find ~ \( -iname *.jpeg -o -iname *.jpg \) -type f -mtime -7	
    

结合 -exec 选项与其他命令结合

find 搜索路径 [选项] 搜索内容 -exec 命令2 {} \;

  • 查找权限为444的文件,并执行 ls -l 命令

      find . -perm 444 -exec ls -l {} \;
    
  • 查找所有文件名为 .c 的文件并等确认命令逐一删除

      find . -type f -name "*.c" -ok rm -rf {} \;
    
  • 查找所有 txt 文件,并拼接起来写入 all.txt 文件中

      find . -type f -name "*.txt" -exec cat {} \; /all.txt