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