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
Linux系列之重定向操作的更多相关文章
- 跟着鸟哥学Linux系列笔记3-第11章BASH学习
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 跟着鸟哥学Linux系列笔记2-第10章VIM学习 认识与学习bash 1. ...
- 跟着鸟哥学Linux系列笔记2-第10章VIM学习
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 常用的文本编辑器:Emacs, pico, nano, joe, vim VI ...
- 跟着鸟哥学Linux系列笔记0-如何解决问题
跟着鸟哥学Linux系列笔记0-扫盲之概念 在发生问题怎么处理: 1. 在自己的主机.网络数据库上查询How-To或FAQ -Linux 自身的文件数据: /usr/share/doc -CLDP中 ...
- 跟着鸟哥学Linux系列笔记1
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 装完linux之后,接下来一步就是进行相关命令的学习了 第五章:首次登录与在线求助man page 1. X ...
- 学习Linux系列--安装Ubuntu
最近学习Linux,使用虚拟机太不方便,于是购买了阿里云最便宜的云主机作为学习设备. 本系列文章记录了个人学习过程的点点滴滴. 学习Linux系列--安装Ubuntu 学习Linux系列--安装软件环 ...
- kali linux 系列教程之metasploit 连接postgresql可能遇见的问题
kali linux 系列教程之metasploit 连接postgresql可能遇见的问题 文/玄魂 目录 kali linux 下metasploit 连接postgresql可能遇见的问题. ...
- kali Linux系列教程之BeFF安装与集成Metasploit
kali Linux系列教程之BeFF安装与集成Metasploit 文/玄魂 kali Linux系列教程之BeFF安装与集成Metasploit 1.1 apt-get安装方式 1.2 启动 1. ...
- kali linux系列之启用vpn
kali linux系列之启用vpn 文/玄魂 默认情况下,kali linux的vpn选项是不可用的. 下面是安装openvpn的方法,同样的,可以安装其他类型的vpn. 打开终端输入命令: Apt ...
- Kali linux系列之 zmap 安装
Kali linux系列之 zmap 安装 官方文档地址:https://zmap.io/ 准备:保证有比较顺畅的更新源,可以更新系统,下载安装包. 安装 第一步:sudo apt-get insta ...
随机推荐
- 169. Majority Element - LeetCode
Question 169. Majority Element Solution 思路:构造一个map存储每个数字出现的次数,然后遍历map返回出现次数大于数组一半的数字. 还有一种思路是:对这个数组排 ...
- Ubuntu16.04编译OpenJDK7u40
下图是OpenJDK6.OpenJDK7.OpenJDK7u和OpenJDK8这几个项目之间的关系: 下面把编译步骤记录下来: 编译环境 Ubuntu 16.04.4 LTS jdk版本 openjd ...
- HTML区块
1.HTML 可以通过 <div> 和 <span>将元素组合起来. 2.HTML <div> 元素 HTML <div> 元素是块级元素,它可用于组合 ...
- Amazon 消息订阅对接
亚马逊的api 谁用谁知道...... 除了坑还是坑 头疼一周整出来,分享给铁汁们 amazon 的订阅思维,我只能说外国人脑回路有点长 下面就讲讲具体流程步骤: 第一步: 参照官方教程:设置通知(A ...
- ES6 伪数组转真数组
更新日志 2022年6月13日 发布. 2022年5月19日 笔记迁移到博客. 直接上代码 [...a];
- 在C#中使用正则表达式最简单的方式
更新记录 本文迁移自Panda666原博客,原发布时间:2021年5月11日. 在.NET中使用正则表达式与其他语言并无太大差异.最简单的使用就是使用Regex类型自带的静态方法. 注意:在.NET中 ...
- 线程池:ThreadPoolExcutor源码阅读
ThreadPoolExcutor源码流程图:(图片较大,下载再看比较方便) 线程池里的二进制奥秘 前言: 线程池的五种状态state(RUNNING.SHUTDOWN.STOP.TIDYING.TE ...
- 4种方法教你如何查看java对象所占内存大小
摘要:本文讲述4种查看java对象所占内存大小的方法 本文分享自华为云社区<查看java对象所占内存大小>,作者:xiewenci. 计算java对象所占内存大小 1.使用jdk8自带AP ...
- 使用Playbook批量部署多台LAMP环境
1. 安装ansible yum install epel-release -y yum install ansible -y Playbook是一个不同于使用ansible命令行执行方式的模式,功能 ...
- typescript+webpack构建一个js库
依赖说明 入口文件 tsconfig配置 webpack配置文件 webpack入口文件配置 webpack为typescript和less文件配置各自的loader webpack的output配置 ...