一、which 命令(简单方便)
★ 功能:依据$PATH 环境变量中的目录路径,查找命令文件的文件路径。
★ 举例:
二、whereis 命令
★ 功能1:依据 P A T H 环境变量中的目录路径,查找命令文件的文件路径。★功能 2 :依据 PATH 环境变量中的目录路径,查找命令文件的文件路径。 ★ 功能2:依据 PATH环境变量中的目录路径,查找命令文件的文件路径。★功能2:依据MANPATH 环境变量中的目录路径,查找命令文件的man帮助文件路径。
★ 举例:
三、locate 命令(不常用)
★ 功能:依据mlocate.db 数据库,查找匹配指定关键字的所有目录和文件路径
## 需要事先构建/var/lib/mlocate/mlocate.db 数据库,mlocate.db数据库中,不会包含/tmp 目录内容## 构建:mlocate.db 数据库yum install mlocate -y ## 安装:locate 命令工具updatedb ## 更新:mlocate.db 数据库
★ 举例:查找包含着shadow字符串的所有目录和文件路径
locate shadow
四、find 命令(强大的搜索命令)
★ 理解:find命令的命令结构
★ 语法:find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path…] [expression]
## 备注: ## [-P] [-L] [-H] 选项:针对<搜索范围>中的<符号链接>,设定是否<追溯搜索> ## ♦ 如果同时指定了 [-P] [-L] [-H] 选项(即:1个以上),则:从右向左,依次替代,最后一个生效。 ## ♦ [-P] 针对<搜索范围>中的<符号链接>,拒绝<链接追随>,这是<默认行为>。 ## 举例:find -P /bin -iname 'cat' ## <搜索范围>指定的是</bin符号链接文件>,-P 会拒绝<链接追随> ## ♦ [-L] 针对<搜索范围>中的<符号链接>,允许<链接追随>。 ## 举例:find -L /bin -iname 'cat' ## <搜索范围>指定的是</bin符号链接文件>,-L 会允许<链接追随> ## ♦ [-H] 针对<搜索范围>中的<符号链接>,拒绝<链接追随>(除非:<搜索范围>直接指定为一个<符号链接>)。 ## 举例:find -H /bin -iname 'cat' ## <搜索范围>直接指定为</bin符号链接文件>,-H 会允许<链接追随>
★ 指定:find 搜索范围:
直接指定:[选项] <目录路径1> <目录路径2> ...举例:find /dir01 /dir02 /dir03 ...
★ 设定:find 搜索条件:
#### 常见条件类型如下:## ♦ N 代表:<选项值>,它可以是:+N(大于) 或 -N(小于) 或 N(等于)##
★ 设定:多条件组合
★ 设定:find 处理动作
#### 常见动作如下:##-print ## 显示:<匹配对象>的<名称、绝对/相对路径>,这是一个默认动作,可以省略,用于:标准输出find匹配对象-ls ## 列出:<匹配对象>的<详细信息>,<-ls动作>等价于<ls -dlis命令>-delete ## 删除:<匹配对象>-prune ## 设置:如果<匹配对象>是<目录>,则不要进入该<目录>-exec ## 定义:针对find匹配对象,执行一个指定COMMAND命令。 ## 我们可以通过一个或多个 -exec 动作选项,来执行一个或多个指定COMMAND命令。 ## 命令形式:command '{}' \; 每匹配一个对象,'{}'就覆盖式置换一个对象,然后执行一次动作。 ## ♦ 在 '{}' \; 组合中,依据command命令意图,必须有且可有1个或多个'{}'。 ## ♦ \; 表示:该 -exec动作结束 ## ♦ \ 是转义符,用于表示:该<;分号>不是<SHELL命令行>的<;分号分隔符>。 ## ♦ 注意:※ 针对大批量的find匹配对象,执行效率低下。 ## command '{}' + 每匹配一个对象,'{}'就追加式置换一个对象,然后执行一次动作。 ## ♦ 在 '{}' + 组合中,依据command命令意图,必须有且仅有1个'{}'。 ## ♦ 在 '{}' + 组合中,+ 表示:可以在'{}'中,自动追加多个find匹配对象。 ## ♦ <+加号>的作用与<xargs命令>相同。 ## ♦ 注意: ## ※ 追加多个find匹配对象,会大大减少动作次数。 ## ※ 针对大批量find匹配对象,会提高执行效率。 ## ※ 可追加的<find匹配对象总数>将受限于command命令自身的语法限制。 ## 注意: '{}' 和 \; 和 + 彼此之间需要有【空格】
★ 案例学习1:查看根目录下所有的 TXT 格式的文件
★ 案例学习2:把查找到的文件复制到一个指定的目录
★ 案例学习3:把查找到的TXT文件,全部予以tar归档
● 重点理解:-exec动作的 '{}' \; 和 '{}' + 两种不同处理机制,从而了解如何提高find动作的处理效率。touch /tmp/{1..10000}.txt#### 方法1:## 特点:慢(每1次动作,仅处理1个find匹配对象)## 注意:tar采用的是-c覆盖打包选项,因此,最终仅打包了最后一个文件##find /tmp -name '*.txt' -exec tar -acf a.tar.gz '{}' \;#### 方法2:## 特点:快(每1次动作,可处理多个find匹配对象)## 注意:tar采用的是-c覆盖打包选项,由于tar命令行可追加的打包对象参数有限,因此,最终仅打包了最后的一组文件##find /tmp -name '*.txt' -exec tar -acf b.tar.gz '{}' +#### 方法3:## 特点:快(每1次动作,可处理多个find匹配对象)## 注意:tar采用的是-r追加打包选项,即便tar命令行可追加的打包对象参数有限,也可最终打包所有的文件##find /tmp -name '*.txt' -exec tar -arf c.tar.gz '{}' +#### 方法4:## 特点:快(将全部的find匹配对象,通过 | 管道符,一次性交给tar命令去处理)## 注意:tar采用的是-c覆盖打包选项,由于tar命令行可追加的打包对象参数有限,因此,最终仅打包了最后的一组文件##find /tmp -name '*.txt' | xargs tar -acf d.tar.gz#### 方法5:## 特点:快(将全部的find匹配对象,通过 | 管道符,一次性交给tar命令去处理)## 注意:tar采用的是-r追加打包选项,即便tar命令行可追加的打包对象参数有限,也可最终打包所有的文件##find /tmp -name '*.txt' | xargs tar -arf e.tar.gz
★ 课后作业
1.现在我要执行ss命令,我想知道这个ss命令文件的真实绝对路径。请问:该如何做?
2.我记得有一个文件的文件名好像是ifcfg开头,好像在/etc目录中,我该如何找出所有类似的文件?