Brc's blog
首页
前端
后端
运维
  • 工作笔记
  • 分类
  • 标签
  • 归档
关于

Brc

努力中
首页
前端
后端
运维
  • 工作笔记
  • 分类
  • 标签
  • 归档
关于
  • Linux基础

    • Bash shell
    • 文件属性
    • 编辑工具vim
    • 用户管理
    • 用户组管理
    • 普通用户提权
    • 基础权限
    • 特殊权限
    • 文件特殊属性
    • IO重定向
      • 重定向基础概述
        • 什么是重定向
        • 为什么需要重定向
        • 标准输入与输出
      • 输出重定向案例
        • 案例1-标准输出重定向
        • 案例2-标准追加输出重定向
        • 案例3-错误输出重定向
        • 案例4-混合和输出重定向
        • 案例5-将内容输出至黑洞
      • 进程管道技术
        • 什么是管道
        • 管道流程示意图
        • 管道使用案例
        • 案例1
        • 案例2
        • 案例3
      • tee与xargs
        • 管道中使用tee
        • 管道中使用xargs
    • 文件查找
    • 文件压缩
    • 软件包管理

    • 磁盘管理

    • 进程管理
    • 计划任务
    • systemd
    • Supervisor
    • 网络管理

    • Chrony时间同步
    • NFS网络文件系统
  • Linux进阶

  • 其他

  • 运维
  • Linux基础
Brc
2021-07-06
目录

IO重定向

# 重定向基础概述

# 什么是重定向

将原本要输出到屏幕中的数据信息,重新定向到某个指定的文件中,或者定向到黑洞中。

# 为什么需要重定向

  • 当屏幕输出的信息很重要,而且希望保存重要的信息时;
  • 后台执行中的程序,不希望他干扰屏幕正常的输出结果时;
  • 系统的例行命令,例如定时任务的执行结果,希望可以存下来时;
  • 一些执行命令,我们已经知道他可能出现错误信息,想将他直接丢弃时;
  • 错误日志与正确日志需要分别输出至不同的文件保存时;

# 标准输入与输出

  • 当进程操作一个文件时:
    • 首先程序是无法直接访问硬件,需要借助内核来访问文件;
    • 而内核kernel需要利用文件描述符(file descriptor)来访问文件。
  • 总结:进程使用文件描述符来管理打开的文件对应关系;
    • 通常程序访问一个文件至少会打开三个标准文件,分别是标准输入、标准输出、错误输出。
    • 进程将从标准输入中得到数据,将正常输出打印至屏幕终端,将错误的输出信息也打印至屏幕终端。

image-20210706205734906

名称 文件描述符 作用
标准输入(STDIN) 0 默认是键盘,也可以是文件或其他命令的输出。
标准输出(STDOUT) 1 默认输出到屏幕。
错误输出(STDERR) 2 默认输出到屏幕。
文件名称(filename) 3+

# 输出重定向案例

  • 输出重定向,改变输出内容的位置。输出重定向有如下几种方式,如表格所示

    类型 操作符 用途 是否覆盖原文件
    标准覆盖输出重定向 > 将程序输出的正确结果输出到指定的文件中 覆盖
    标准追加输出重定向 >> 将程序输出的正确结果以追加的方式输出到指定文件 不覆盖
    错误覆盖输出重定向 2> 将程序的错误结果输出到执行的文件中 覆盖
    错误追加输出重定向 2>> 将程序输出的错误结果以追加的方式输出到指定文件 不覆盖

# 案例1-标准输出重定向

image-20210706210301370

  • 标准输出重定向示例

    • 如果文件不存在则创建
    • 如果文件存在则清空内容
    [root@web ~]# > file.txt
    [root@web ~]# ifconfig eth0 > file.txt
    
    1
    2

# 案例2-标准追加输出重定向

73fe018c0394d8a4192bc6ae38ea9321

  • 标准追加输出重定向示例。

    • 如果文件不存在则创建
    • 如果文件存在则在文件尾部添加内容
    [root@web ~]# echo "Hello students" >> file.txt
    
    1

# 案例3-错误输出重定向

3099559b1f4fc181c1c10cfd189f35e9

  • 标准错误输出重定向

    1. 正确输出及错误输出至相同文件

    2. 正确输出及错误输出至不同的文件

    [root@web ~]# find /etc -name "*.conf" 1>ok 2>ok
    [root@web ~]# find /etc -name "*.conf" 1>ok 2>err
    
    1
    2

# 案例4-混合和输出重定向

659013c6f6fc25ae2958f636b074386d

  • 混合输出重定向

    • 将正确输出和错误输出混合至同一文件
    • 将两个文件内容组合为一个文件
    [root@web ~]# find /etc -name "*.conf" &>ab
    [root@web ~]# cat a b > c
    
    1
    2
  • 正确和错误都输入到相同位置

image-20210706211622543

[root@web ~]# ls /root /error >ab 2>&1
1

# 案例5-将内容输出至黑洞

image-20210706211728313

  • 将内容输出至黑洞设备/dev/null

    [root@web ~]# ls /root /error >ab 2>/dev/null
    [root@web ~]# ls /root /error >ab &>/dev/null
    
    1
    2

# 进程管道技术

# 什么是管道

  • 管道操作符号|,主要用来连接左右两个命令,将左侧的命令的标准输出,交给右侧命令的标准输入
  • 注意事项:无法传递标准错误输出至后者命令

# 管道流程示意图

  • 格式:cmd1 | cmd2 [...|cmdn]

5301ecf1ad3afad79b67a2abc9af82fc

# 管道使用案例

# 案例1

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

    [root@web ~]# sort -t":" -k3 -n /etc/passwd
    [root@web ~]# sort -t":" -k3 -n /etc/passwd -r
    [root@web ~]# sort -t":" -k3 -n /etc/passwd |head
    
    1
    2
    3

# 案例2

  • 案例2:统计当前/etc/passwd中用户使用的shell类型

    # 思路:取出第七列(shell) | 排序(把相同归类) | 去重
    [root@web ~]# awk -F: '{print $7}' /etc/passwd
    [root@web ~]# awk -F: '{print $7]' /etc/passwd |sort
    [root@web ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq
    [root@web ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq -c
    
    1
    2
    3
    4
    5

# 案例3

  • 案例3:打印当前所有IP

    [root@web ~]# ip addr |grep 'inet ' |awk '{print $2}' |awk -F "/" '{print $1}'
    127.0.0.1
    192.168.69.112
    
    1
    2
    3

# tee与xargs

# 管道中使用tee

a4ce9f87fa07714ddd467516a7a4f0d2

# 选项:-a追加
[root@web ~]# ip addr |grep 'inet ' |tee ip.txt |awk -F "/" '{print $1}' |awk '{print $2}'
127.0.0.1
10.8.0.100

[root@web ~]# cat ip.txt
inet 127.8.8.1/8 scope host lo
inet 10.0.0.100/24 brd 192.168.69.255 scope global ens32
1
2
3
4
5
6
7
8

重定向与tee他们在使用过程中有什么区别

[root@web ~]# date > date.txt		#直接将内容写入date.txt文件中
[root@web ~]# date |tee date.txt	#命令执行会输出至屏幕,但会同时保存一份至date.txt文件中
1
2

# 管道中使用xargs

  • xargs参数传递,主要让一些不支持管道的命令可以使用管道技术

    [root@web ~]# which cat |xargs ls -l
    [root@web ~]# ls |xargs rm -fv
    
    1
    2
#Linux
Last Updated: 2021/11/12, 16:51:33
文件特殊属性
文件查找

← 文件特殊属性 文件查找→

最近更新
01
谷歌云创建GKE集群
07-26
02
ElastiCacheForRedis启用密码
07-26
03
upload-to-gcs
06-29
更多文章>
Theme by Vdoing | Copyright © 2021-2024 Brc | MIT License | 浙ICP备19031881号-4
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式