• linux管道、重定向和查看命令


    目录

    二、linux管道、重定向和查看命令

    1.管道:|

    2.tee

    3.重定向

    4.文件内容浏览

    5.文件内容过滤:grep

    6.命令搜索

    7. find 查找文件---按照文件名称、大小、类型、权限、日期等进行搜索


    二、linux管道、重定向和查看命令

    1.管道:|

    (1)要求:将前面命令的标准输出作为后面命令的标准输入,可以有多层管道

    (2)进程管道

    (3)注意:

    • 管道命令只处理前一个命令正确输出,不处理错误输出。
    • 管道命令右边命令,必须能够接收标准输入流命令才行。

    (4)示例:

    例1:仅查看IP地址

    1. [root@server ~]# hostname -I | cut -d" " -f1
    2. 192.168.174.123
    3. [root@server ~]# ifconfig ens160 | grep "inet " | tr -s " " | cut -d" " -f3
    4. 192.168.174.123
    5. [root@server ~]# ifconfig ens160 | awk '/inet / {print $2}'
    6. 192.168.174.123

    例2:面试题:统计/etc/passwd中用户使用的shell类型

    1. [root@server ~]# cut -d":" -f7 /etc/passwd |sort |uniq -c | sort -nr
    2. [root@server ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq -c| sort -nr

    例3:将/etc/passwd中的用户按UID大小排序

    1. [root@localhost ~]# sort -t":" -k3 -n /etc/passwd //以: 分隔,将第三
    2. 列按字数升序
    3. [root@localhost ~]# sort -t":" -k3 -n /etc/passwd -r //逆序
    4. [root@localhost ~]# sort -t":" -k3 -n /etc/passwd |head

    2.tee

    (1)作用:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。

    (2)示例:

    1. [root@server ~]# date |tee date.txt---输出date命令,添加到文件date.txt中
    2. Thu Oct 27 14:02:27 CST 2022
    3. [root@server ~]# cat date.txt---查看date.txt文件
    4. Thu Oct 27 14:02:27 CST 2022

    -a或-append   附加到既有文件后面,而非覆盖它

    1. [root@server ~]# date |tee -a date.txt
    2. Thu Oct 27 14:06:05 CST 2022
    3. [root@server ~]# cat date.txt
    4. Thu Oct 27 14:04:30 CST 2022
    5. Thu Oct 27 14:06:05 CST 2022

    3.重定向

    (1)分类:

    • 0 stdin---标准输入  默认是键盘
    • 1 stdout---标准输出  默认是屏幕(或终端)
    • 2 stderr---错误输出 默认是屏幕(或终端)

    (2)输出重定向:本在终端输出,改变输出方向,输出到文件中。

    <1> “>”、“>>”称为输出重定向操作符。

    <2> 示例:

    例1:>

    1. [root@server ~]# date > date.txt
    2. [root@server ~]# cat date.txt
    3. Thu Oct 27 14:10:53 CST 2022

    例2:">>"追加重定向,不覆盖源文件内容

    1. [root@server ~]# date >> date.txt
    2. [root@server ~]# cat date.txt
    3. Thu Oct 27 14:11:08 CST 2022
    4. Thu Oct 27 14:13:26 CST 2022

    例3:错误输出的重定向

    1. [root@server ~]# aaaa 2> err.txt
    2. [root@server ~]# cat err.txt
    3. bash: aaaa: command not found...

    (3)输入重定向:原是键盘输入,现在通过文件输入,这种就是输入重定向

     <1> “<”、“<<”称为输入重定向操作符。

    <2> 示例:

    例1:将date.txt文件输入重定向到命令行中

    1. [root@server ~]# cat < date.txt
    2. Thu Oct 27 14:11:08 CST 2022
    3. Thu Oct 27 14:13:26 CST 2022

    例2:统计文件安装行数

    1. [root@server ~]# wc -l < date.txt
    2. 2

    (4)示例:

    例1:正确输出和错误输出同时保存到文件

    1. 1:[root@server ~]# ls /tmp /ttttt &> all.txt
    2. 2:[root@server ~]# ls /tmp /ttttt > all.txt 2>&1

    例2:正确输出和错误输出重定向到空设备---/dev/null

    [root@server ~]# ls /tmp /tttt &> /dev/null---将产生的输出丢掉

    工作中主要应用场景:

    1. [root@server ~]# ping -c2 www.baidu.com &> /dev/null
    2. [root@server ~]# echo $?
    3. 0---结果为0代表ping通了,不为0代表没ping通

    (5)主要使用:

    使用形式功能
    命令 >文件或 者:命令 1>文 件将命令执行后的输出信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定 文件中,若指定的文件不存在,则自动创建该文件
    命令 2>文件将命令执行后所产生的错误信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件
    命令 &>文件将命令执行后的输出信息和错误信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件
    命令 2>/dev/null将命令执行后所产生的错误信息不在默认的屏幕上显示,而是写入到空设备文件中,即将输出的错误信息丢弃掉
    命令>>文件将命令执行后的输出信息以追加的方式写入到指定的文件中
    命令<文件使命令从指定的文件中读取输入数据
    命令<<结束标 识字符串读取命令行输入,直到遇到输入行为指定的结束标识字符串

    例:命令<<结束标 识字符串

    1. [root@server ~]# cat > hello.txt << EOF
    2. > hello world
    3. > 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:查看文件第五行(面试常考)

    1. [root@server ~]# head -5 passwd | tail -1
    2. [root@server ~]# awk 'NR==5' passwd

    5.文件内容过滤:grep

    (1)格式:“grep [参数] 文件名称”

    (2)参数及其作用

    参数作用
    -b将可执行文件(binary)当作文本文件(text)来搜索
    -c仅显示找到的行数
    -i忽略大小写
    -n显示行号
    -v反向选择——仅列出没有“关键词”的行。

    (3)示例:

     例1:查找文件中含有root的行

    1. [root@server ~]# grep "root" /etc/passwd
    2. root:x:0:0:root:/root:/bin/bash
    3. 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的行数

    1. [root@server ~]# grep "root" /etc/passwd |wc -l
    2. [root@server ~]# grep -c "root" /etc/passwd
    3. 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 命令不能搜索普通文件

    1. [root@server ~]# whereis ls
    2. ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

    (2)which:也是搜索系统命令的命令。

    1. [root@server ~]# which locate
    2. /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。)

    1. [root@server ~]# find -size +50k -size -5M -exec cp {} /opt/ \;
    2. [root@server ~]# find -size +50k -size -5M -exec ls -lh {} \;
    3. -exec:执行当前命令
    4. ls -lh:以长格式列表列出来并显示容量
    5. { }:代表前面的内容
    6. \;---结束符

    例3:按时间搜索(保留一周数据---删除七天前的日志文件)

    [root@server ~]# find ./ -name “*.log” -mtime +6 -exec rm -rf { } \;
    

    例4:按用户搜索(查找student用户文件 ---user)

    [root@server ~]# find / -user student
  • 相关阅读:
    Application Load Balancer-ALB
    PHP8的静态变量和方法-PHP8知识详解
    【Spring Security 系列】(四)高层级组件
    Nacos-server(1.4.4)安装部署-SpringCloudAlibaba微服务
    C++ 内存模型 write_x_read_y 试例构造
    主从数据一致性
    时空数据挖掘五(城市计算)
    关于CLR GC调优的一些问题
    人员徘徊识别系统
    【Linux】第十四章 多线程(生产者消费者模型+POSIX信号量)
  • 原文地址:https://blog.csdn.net/weixin_62443409/article/details/127717131