目录
7. find 查找文件---按照文件名称、大小、类型、权限、日期等进行搜索
(1)要求:将前面命令的标准输出作为后面命令的标准输入,可以有多层管道
(2)进程管道

(3)注意:
(4)示例:
例1:仅查看IP地址
- [root@server ~]# hostname -I | cut -d" " -f1
- 192.168.174.123
- [root@server ~]# ifconfig ens160 | grep "inet " | tr -s " " | cut -d" " -f3
- 192.168.174.123
- [root@server ~]# ifconfig ens160 | awk '/inet / {print $2}'
- 192.168.174.123
例2:面试题:统计/etc/passwd中用户使用的shell类型
- [root@server ~]# cut -d":" -f7 /etc/passwd |sort |uniq -c | sort -nr
- [root@server ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq -c| sort -nr
例3:将/etc/passwd中的用户按UID大小排序
- [root@localhost ~]# sort -t":" -k3 -n /etc/passwd //以: 分隔,将第三
- 列按字数升序
- [root@localhost ~]# sort -t":" -k3 -n /etc/passwd -r //逆序
- [root@localhost ~]# sort -t":" -k3 -n /etc/passwd |head
(1)作用:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
(2)示例:
- [root@server ~]# date |tee date.txt---输出date命令,添加到文件date.txt中
- Thu Oct 27 14:02:27 CST 2022
- [root@server ~]# cat date.txt---查看date.txt文件
- Thu Oct 27 14:02:27 CST 2022
-a或-append 附加到既有文件后面,而非覆盖它
- [root@server ~]# date |tee -a date.txt
- Thu Oct 27 14:06:05 CST 2022
- [root@server ~]# cat date.txt
- Thu Oct 27 14:04:30 CST 2022
- Thu Oct 27 14:06:05 CST 2022
(1)分类:
(2)输出重定向:本在终端输出,改变输出方向,输出到文件中。
<1> “>”、“>>”称为输出重定向操作符。
<2> 示例:
例1:>
- [root@server ~]# date > date.txt
- [root@server ~]# cat date.txt
- Thu Oct 27 14:10:53 CST 2022
例2:">>"追加重定向,不覆盖源文件内容
- [root@server ~]# date >> date.txt
- [root@server ~]# cat date.txt
- Thu Oct 27 14:11:08 CST 2022
- Thu Oct 27 14:13:26 CST 2022
例3:错误输出的重定向
- [root@server ~]# aaaa 2> err.txt
- [root@server ~]# cat err.txt
- bash: aaaa: command not found...
(3)输入重定向:原是键盘输入,现在通过文件输入,这种就是输入重定向
<1> “<”、“<<”称为输入重定向操作符。
<2> 示例:
例1:将date.txt文件输入重定向到命令行中
- [root@server ~]# cat < date.txt
- Thu Oct 27 14:11:08 CST 2022
- Thu Oct 27 14:13:26 CST 2022
例2:统计文件安装行数
- [root@server ~]# wc -l < date.txt
- 2
(4)示例:
例1:正确输出和错误输出同时保存到文件
- 法1:[root@server ~]# ls /tmp /ttttt &> all.txt
- 法2:[root@server ~]# ls /tmp /ttttt > all.txt 2>&1
例2:正确输出和错误输出重定向到空设备---/dev/null
[root@server ~]# ls /tmp /tttt &> /dev/null---将产生的输出丢掉
工作中主要应用场景:
- [root@server ~]# ping -c2 www.baidu.com &> /dev/null
- [root@server ~]# echo $?
- 0---结果为0代表ping通了,不为0代表没ping通
(5)主要使用:
| 使用形式 | 功能 |
| 命令 >文件或 者:命令 1>文 件 | 将命令执行后的输出信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定 文件中,若指定的文件不存在,则自动创建该文件 |
| 命令 2>文件 | 将命令执行后所产生的错误信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件 |
| 命令 &>文件 | 将命令执行后的输出信息和错误信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件 |
| 命令 2>/dev/null | 将命令执行后所产生的错误信息不在默认的屏幕上显示,而是写入到空设备文件中,即将输出的错误信息丢弃掉 |
| 命令>>文件 | 将命令执行后的输出信息以追加的方式写入到指定的文件中 |
| 命令<文件 | 使命令从指定的文件中读取输入数据 |
| 命令<<结束标 识字符串 | 读取命令行输入,直到遇到输入行为指定的结束标识字符串 |
例:命令<<结束标 识字符串
- [root@server ~]# cat > hello.txt << EOF
- > hello world
- > EOF
(1)cat:默认显示最后一屏
<1> 格式:cat [选项] 文件名列表
<2> 常用选项:
(2)分页查看文件内容--- more 和 less 命令
<1> 格式:more | less [选项] 文件名
<2> 常用选项:
<3> 操作方法:
(3)查看文件开头或末尾的部分内容--- head 和 tail 命令
<1> 格式:head | tail [选项] 文件名
<2> 常用选项:
<3> 示例:
例1:查看前四行
[root@server ~]# head -4 passwd
例2:查看文件最后一行
[root@server ~]# tail -1 passwd
例3:查看文件第五行(面试常考)
- [root@server ~]# head -5 passwd | tail -1
- [root@server ~]# awk 'NR==5' passwd
(1)格式:“grep [参数] 文件名称”
(2)参数及其作用
| 参数 | 作用 |
| -b | 将可执行文件(binary)当作文本文件(text)来搜索 |
| -c | 仅显示找到的行数 |
| -i | 忽略大小写 |
| -n | 显示行号 |
| -v | 反向选择——仅列出没有“关键词”的行。 |
(3)示例:
例1:查找文件中含有root的行
- [root@server ~]# grep "root" /etc/passwd
- root:x:0:0:root:/root:/bin/bash
- operator:x:11:0:operator:/root:/sbin/nologin
例2:查找文件/etc/passwd中以root开头的行 ^root ---正则表达式
[root@server ~]# grep "^root" /etc/passwd
例3:查找文件/etc/passwd中/bin/bash结尾的行 /bin/bash$
[root@server ~]# grep "/bin/bash$" /etc/passwd
例4:统计文件中含有root的行数
- [root@server ~]# grep "root" /etc/passwd |wc -l
- [root@server ~]# grep -c "root" /etc/passwd
- 2
例5:统计文件中含有root的行,不区分大小写 -i
[root@server ~]# grep -i "root" /etc/passwd
例6:过滤掉配置文件中的注释和空行 -v(反转显示)
[root@server ~]# grep -E -v "#|^$" /etc/ssh/sshd_config
(1)whereis:搜索系统命令的命令,whereis 命令不能搜索普通文件
- [root@server ~]# whereis ls
- ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
(2)which:也是搜索系统命令的命令。
- [root@server ~]# which locate
- /usr/bin/locate
(3)区别:
(4)locate:按照数据库搜索,搜索速度快,消耗资源小。(只能按照文件名来搜索)
(1)格式:find 搜索路径 [选项] 搜索内容---(如果不提供搜索路径,则在当前目录查找)
(2)对应参数及作用:

(3)按照文件名搜索
-name: 按照文件名搜索
-iname: 按照文件名搜索,不区分文件名大小写
-inum: 按照 inode 号搜索
(4)按照文件大小搜索
-size [+|-]大小: 按照指定大小搜索文件
(5)按照指定修改时间搜索文件
-atime [+|-]时间: 按照文件访问时间搜索
-mtime [+|-]时间: 按照文件数据修改时间搜索
-ctime [+|-]时间: 按照文件状态修改时间搜索
(6)按照文件类型查找
-type d: 查找目录
-type f: 查找普通文件
-type l: 查找软链接文件
(7)逻辑运算符
-a: and 逻辑与
-o: or 逻辑或
-not: not 逻辑非
(8)“-exec {} \;” 参数,其中的{}表示find命令搜索出的每一个文件,并且命令的结尾必 须是“\;”
-exec:执行命令
(9)示例:
例1:按名称查找 -name(查找/etc下面的以re开始,.conf结尾的文件)
[root@server ~]# find /etc -name "re*.conf"
例2:按大小查找 -size +/-/nM(面试:查找当前文件路径下大于50k,小于5M的文件,复制到/opt。)
- [root@server ~]# find -size +50k -size -5M -exec cp {} /opt/ \;
-
- [root@server ~]# find -size +50k -size -5M -exec ls -lh {} \;
- -exec:执行当前命令
- ls -lh:以长格式列表列出来并显示容量
- { }:代表前面的内容
- \;---结束符
例3:按时间搜索(保留一周数据---删除七天前的日志文件)
[root@server ~]# find ./ -name “*.log” -mtime +6 -exec rm -rf { } \;
例4:按用户搜索(查找student用户文件 ---user)
[root@server ~]# find / -user student