Linux系列之重定向操作
前言
I/O重定向允许我们将命令的输入和输出重定向到文件中,以及将多个命令连接到一起成为管道。本文就来介绍有关重定向的知识。
标准输入、输出、错误
输出包括两种类型:
- 程序的结果。被称为标准输出或者
stdout
。 - 状态以及错误信息。被称为标准错误或者
stderr
。
除此之外,一些程序从标准输入stdin
中获取输入。默认情况下,标准输入与键盘相连接。
默认情况下,stdout
和stderr
都被链接到屏幕上,而不是保存到文件中。重定向允许我们改变输出的去向和输入的来源。
重定向标准输出
为了重定向到其他文件而不是屏幕上,我们使用>
重定向操作符,后面跟随文件的名称。
举例来说,我们可以使用重定向操作符来告诉shell
,发送ls
命令的输出到ls-output.txt
文件中,而不是屏幕上。
ls -l /usr/bin > ls-output.txt
我们可以看到,ls
命令的输出没有发送到屏幕上,而是发送ls-output.txt
到文件中。
需要注意的是,使用>
重定向操作符会覆盖目标文件。如果要追加内容,我们可以使用>>
重定向操作符。
重定向标准错误
为了重定向stderr
,我们必须引用其文件描述符。shell
将stdout
、stdin
和stderr
分别作为文件描述符0、1和2的内部引用。我们可以用这个符号重定向stderr
。
ls -l /bin/usr 2> ls-error.txt
重定向到同一文件
重定向标准输出和标准错误到同一文件中,共有两种方式可以实现。首先让我们使用传统方法,它适用于老版本的shell
:
ls -l /bin/usr > ls-output.txt 2>&1
首先,我们将stdout
重定向到ls-output.txt
文件,然后用2>&1
的符号将文件描述符2 stderr
重定向到文件描述符1 stdout
中。
需要注意重定向的顺序,重定向stderr
必须总是在重定向stdout
之后发生。
最近版本的bash
提供了第二种方法,该方法让执行这种组合重定向更精简。
ls -l /bin/usr &> ls-output.txt
你仍然可以使用>>
进行追加操作。
处理不需要的输出
系统提供了一种方法,可以将输出重定向到一个叫做/dev/null
的特殊文件,该文件通常被称为比特桶(bit bucket)。它接受输入,但不做任何处理。
ls -l /bin/usr 2> /dev/null
重定向标准输入
还有<
重定向操作符,我们可以将stdin
的来源从键盘改为文件。
cat < sample.txt
管道
使用管道操作符|
,一个命令的stout
可以通过管道进入另一个命令的stdin
,less
就是一个例子:
ls -l /usr/bin | less
可以把几个命令放在一起,组成一个流水线。使用这种方式的命令被称为过滤器。过滤器接受输入,以某种方式改变它,然后输出它。
tee命令
tee
命令读取stdin
并将其复制到stdout
和一个或多个文件中。
ls /usr/bin | tee ls.txt | grep zip
最新文章
- 【React】组件生命周期
- Visual Studio.NET单选题
- Kinect 图像帧的格式
- 【转载】GBDT(MART) 迭代决策树入门教程 | 简介
- 关于ABP——领域服务的思考
- js 事件冒泡和事件捕获
- 2018年,请不要再使用OLE生成EXCEL文件
- u-boot(一)启动简介
- laravel简书(1)
- LeetCode 917 Reverse Only Letters 解题报告
- P3809 【模板】后缀排序
- 用JS制作《飞机大作战》游戏_第2讲(四大界面之间的跳转与玩家飞机的移动)-陈远波
- Java序员的成长之路
- CentOS7 搭建RabbitMQ集群 后台管理 历史消费记录查看
- android NDK编程:使用posix多线程与mutex相互排斥同步
- Linux kernel 之 kobject
- jdk1.8新特性应用之Iterable
- Swift-9-类和结构体
- ssm框架搭建出现的异常:The import org.springframework cannot be resolved
- 使用TextView/EditText应该注意的地方,监听EditText,addTextChangedListener
热门文章
- 135_Power Query M语言快捷输入之输入法设置自定义短语
- Golang 常见设计模式之单例模式
- 论文解读(gCooL)《Graph Communal Contrastive Learning》
- React项目配置npm run build命令分环境打包
- 如何优化PlantUML流程图(时序图)
- Javaer 面试必背系列!超高频八股之三色标记法
- 龙芯发布 .NET 6 SDK 6.0.105-ea1 LoongArch64 版本
- ABP Framework 5.3.0 版本新增功能和变更说明
- Python基础学习笔记_02
- 关于vue cli 使用iview 自定义主题遇到的坑