博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
文件描述符stdin,stdout,stderr,重定向
阅读量:3984 次
发布时间:2019-05-24

本文共 1227 字,大约阅读时间需要 4 分钟。

Linux Shell 文件描述符stdin,stdout,stderr,重定向

系统保留的三个文件描述符分类

0 标准输入 stdin		/dev/stdin1 标准输出 stdout 	/dev/stdout2 标准错误 stderr	/dev/stderr

另外,当一个用户进程被创建的时候,系统会自动为该进程创建三个文件描述符0,1,2,对应的就是 stdin, stdout, stderr。当进程结束后,进程编号对应的目录将被清理。

ps -ef |grep php // 找到要查看的进程号,比如 9876cd /proc/9876/fdll

在这里插入图片描述

pts/0 表示会话编号,以及输入和输出在那个会话上展示。

stdout 和 stderr 都是输出到屏幕,他们的区别在于 stdout是有缓冲的,而stderr是无缓冲的,会直接输出。

对文件描述符进行重定位(重定位运算符)

>  替换原有内容>> 内容追加到末尾
重定位运算符 ">" ">>" 的默认参数为标准输出 stdout ,即 1 ;也就是说 > 和 >> 默认只接收 stdout 。所以 ">" 等价于 "1>"; ">>" 等价于 "1>>",也就是说 ls > out.log 就是 ls 1> out.log 注意 1和>之间不能有空格,使用数字来重定向都不能有空格。

解释:

(0)、何为标准输入和标砖输出

标准输入: /dev/stdin 文件里面的数据标准输出: /dev/stdout 文件里面的数据

(1)、当我们输入“输出指令”,例如 ls, echo 等返回的信息归为stdout;

比如:ls > out.logcat out.log有内容比如:ls + > out2.logls: 无法访问+: 没有那个文件或目录cat out2.log空的,为什么呢?那显然返回的内容不是stdout,而是stderr,我们可以使用 $? 获取最后一条命令执行的返回值,当返回值为零代表命令执行成功。ls + > out2.logecho $?2那么我们可不可以把标准错误重定向到标准输出呢,答案是可以的,2>&1 一般写在后面,表示如果出错了就重定向,作为一种补救措施,毕竟谁也不能预知错误。ls + > out3.log 2>&1cat out3.logls: 无法访问+: 没有那个文件或目录或者使用 &>ls + &> out3.log

(2)、可以同时重定向stdout与stderr到指定的文件

cat out*.log 2>stderr.txt 1>stdout.txt

(3)、将stderr/stdout重定向到无底洞 /dev/null

ls + > /dev/null 2>&1如果命令执行成功则将 stdout 定向到 /dev/null ,如果执行失败,则将 stderr 定向到 stdout 然后 stdout 定向到 /dev/null

转载地址:http://uzaui.baihongyu.com/

你可能感兴趣的文章
HASHMAP原理解析,不错的文章
查看>>
优化IDEA启动速度,快了好多。后面有什么优化点,会继续往里面添加
查看>>
CSRF攻击与防御(写得非常好)
查看>>
SpringBoot 在CentOS7部署,注册为服务,开机启动
查看>>
Spring boot 学习
查看>>
JMeter 保持sessionId
查看>>
IDEA Properties中文unicode转码问题
查看>>
Idea下安装Lombok插件
查看>>
zookeeper
查看>>
Idea导入的工程看不到src等代码
查看>>
技术栈
查看>>
Jenkins中shell-script执行报错sh: line 2: npm: command not found
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
Maven跳过单元测试的两种方式
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
[leetcode BY python]1两数之和
查看>>
微信小程序开发全线记录
查看>>