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