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