Linux-重定向、stdin、stdout、stderr

1、标准输入与输出

1.1、基础

1.1.1、进程与文件的关系

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

1.1.2、标准输入与输出流程图

1.1.3、标准输入与输出参数的介绍

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

2、重定向

2.1、基础

2.1.1、什么是重定向

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

2.1.2、为什么重定向

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

2.1.3、重定向参数介绍

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

2.2、示例1-标准输出重定向

2.2.1、需求

1、如果文件不存在则创建
2、如果文件存在则清空内容

2.2.2、流程图

2.2.3、执行命令

> test.txtifconfig ens33 > test.txt 

2.3、示例2-标准追加输出重定向

2.3.1、需求

1、如果文件不存在则创建
2、如果文件存在则在文件尾部添加内容

2.3.2、流程图

2.3.3、命令

echo "hello" >> if

2.4、示例3-错误输出重定向

2.4.1、需求

1、正确输出及错误输出至相同文件。 
2、正确输出及错误输出至不同的文件

2.4.2、流程图

2.4.3、命令

find /etc -name "*.conf" 1>ok 2>ok
find /etc -name "*.conf" 1>ok 2>err

2.5、示例4-混合和输出重定向

2.5.1、需求

1、将正确输出和错误输出混合至同一文件。
2、将两个文件内容组合为一个文件

2.5.2、流程图

这里同时输出和错误重定向到文件中

2.5.3、命令

find /etc -name "*.conf" &> conf_stdin_err

2.6、正确和错误都输入到相同位置

2.6.1、需求

正确和错误都输入到相同位置

2.6.2、流程图

2.6.3、命令

ls /root /err >ab 2>&1

/err是不存在

这里的意思,先重定向, 2表示错误输出 重定向到 标准输出,而不打印出来显示

2.7、将内容输出至黑洞/dev/null

2.7.1、需求

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

2.7.2、流程图

 2.7.3、命令

# 将标准输出和错误输出重定向至黑洞
ls /root /err >ab &>/dev/null
# 将错误输出至黑洞 ls /root /err >ab 2>/dev/null

2.8、&与>缩写含义

&> 等如 2>&1 
> 等如 1>1 是 STDOUT
2 是 STDERR

2>&1 就是STDOUT 和 STDERR

 

posted @ 2023-04-20 19:45  小粉优化大师  阅读(1173)  评论(0编辑  收藏  举报