目录
7. find 查找文件---按照文件名称、大小、类型、权限、日期等进行搜索
二、linux管道、重定向和查看命令
1.管道:|
(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
2.tee
(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
3.重定向
(1)分类:
- 0 stdin---标准输入 默认是键盘
- 1 stdout---标准输出 默认是屏幕(或终端)
- 2 stderr---错误输出 默认是屏幕(或终端)
(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
4.文件内容浏览
(1)cat:默认显示最后一屏
<1> 格式:cat [选项] 文件名列表
<2> 常用选项:
- -n——对输出内容中的所有行标注行号。
- -b——对输出内容中的非空行标注行号。
(2)分页查看文件内容--- more 和 less 命令
<1> 格式:more | less [选项] 文件名
<2> 常用选项:
- -数字——仅适用于more命令,用来指定分页显示时每页的行数。
- +num——指定从文件的第num行开始显示。
- -c——从顶部清屏然后显示文件内容。
- -N——仅适用于less命令,其作用是在每行前添加输出行号。
<3> 操作方法:
- 按Enter键向下逐行滚动
- 按空格键向下翻一屏、按b键向上翻一屏
- 文件末尾时more会自动退出,less 按q键退出
(3)查看文件开头或末尾的部分内容--- head 和 tail 命令
<1> 格式:head | tail [选项] 文件名
<2> 常用选项:
- -num——指定需要显示文件多少行的内容,若不指定,默认只显示十行。
- -f——使tail不停地去读取和显示文件最新的内容, 以监视文件内容的变化。这样有实时监视的效果。(可用来查看日志文件)
<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
5.文件内容过滤:grep
(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
6.命令搜索
(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)区别:
- whereis命令可以在查找到二进制命令的同时,查找到帮助文档的位置
- which命令在查找到二进制命令(按照环境变量path)的同时,如果这个命令有别名,则还可以找到别的命令
(4)locate:按照数据库搜索,搜索速度快,消耗资源小。(只能按照文件名来搜索)
7. find 查找文件---按照文件名称、大小、类型、权限、日期等进行搜索
(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