Shell 基础 -- 输入、输出重定向
一、文件描述符
文件描述符是一个非负的整数,Linux 中每个运行中的程序(进程),都有一些与之关联的文件描述符,你可以使用文件描述符来访问打开的文件或设备。在标准 I/O 库中,与文件描述符对应的是流。当一个程序开始运行时,它一般会有 3 个已经打开的文件描述符,分别对应三个文件流:
| 文件描述符 | 流 |
| 0 | 标准输入流(stdin) |
| 1 | 标准输出流(stdout) |
| 2 | 标准错误流(stderr) |
显然,还有其他的文件描述符,这里暂时不做讨论。一般情况下,一个程序打开时,会去读取标准输入,将结果写入标准输出,将错误结果写入标准错误输出(默认的标准输入、标准输出和标准错误输出都是终端):

如图上图所示,cat 命令后面没有接参数,则默认读取标准输入,将结果输出到标准输出。很多情况下,我们不希望从标准输入获取程序输入,也不想将程序结果写入标准输出,将错误结果写入到标准错误输出,这时就可以使用重定向来完成相应的需求。
二、输出重定向
输出重定向使用 > 或 >> 操作符。其中 > 操作符表示覆盖输出;>> 操作符表示将输出内容附加到文件尾。
2.1 将标准输出重定向到文件
command > file
command >> file
使用 command > file 命令,可以将 command 的标准输出修改为 file,若当前目录下没有 file 文件,则会创建该文件;若已经存在 file 文件,则会覆盖 file 文件,file 文件原本的数据将会丢失。
使用 command >> file 命令,可以将 command 的标准输出修改为 file,若当目录下没有 file 文件,则创建该文件;若已经存在 file 文件,则将程序结果附加到文件尾。
同样的,以 cat 命令为例:
cat > newfile
My name is tongye
How are you
^D # Ctrl + D,结束输入
cat >> newfile
I am fine
^D
结果如下:

2.2 将标准错误输出重定向到文件
command > file
command >> file
使用 2> 或 2>> 来对标准错误输出进行重定向。
2.3 将标准输出和标准错误输出重定向到不同文件
command > file1 > file2
该命令将标准输出和标准错误输出分别重定向到不同文件。
2.4 将标准输出和标准错误输出重定向到同一文件
command &> file command > file >&1 # 将先将标准输出重定向到文件 file,然后将标准错误重定向到标准输出
这两个命令都可以将标准输出和标准错误输出重定向到同一个文件。其中, &> 是 bash 提供的一个特殊的重定向符号。
在重定向到文件描述符时,必须在文件描述符数字之前加上 & 符号。
三、输入重定向
使用 < 操作符进行输入重定向:
command < file
该命令可以将 command 的标准输入改为从文件 file 输入。
Shell 基础 -- 输入、输出重定向的更多相关文章
- shell编程-输入/输出重定向(十一)
linux中文件描述符 linux跟踪打开文件,而分配的一个数字,通过这个数字可以实现对文件的读写操作 用户可以自定义文件描述符范围是:3-max,max跟用户的ulimit –n 定义数字有关系,不 ...
- Shell test 命令,Shell 输入/输出重定向
一.Shell test 命令 Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -g ...
- 十一、Shell 输入/输出重定向
Shell 输入/输出重定向 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令 ...
- Shell(五)Shell输入/输出重定向
Shell 输入/输出重定向 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令 ...
- shell 通配符,管道符,输入/输出重定向,命令置换
1. echo 输出 [echo 输出的内容 ]把内容输出到终端上 如果字符串使用双引号,echo命令原样输出 [ echo "hello world" ] ...
- 学习笔记之Shell脚本的输出重定向
shell http://baike.baidu.com/link?url=qN3THt5ZJhQtwRJJkakWdz5-vZp4V9H3OmNP97XNhaoL-dqU-6rrFrYfHXmYv6 ...
- shell重温---基础篇(输入/输出重定向)
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准 ...
- Shell 输入/输出重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.命令通常从标准输入的地方读取输入,默认是终端.标准输出,默认情况下是终端. 重定向命令列表如下: 命令 说明 comm ...
- Shell输入/输出重定向
输出重定向 重定向一般通过在命令间插入特定的符号来实现.特别的,这些符号的语法如下所示 command1 >file1 上面这个命令执行command1然后将输出的内容存入file1. 注意任何 ...
随机推荐
- [Python_7] Python Socket 编程
0. 说明 Python Socket 编程 1. TCP 协议 [TCP Server] 通过 netstat -ano 查看端口是否开启 # -*-coding:utf-8-*- "&q ...
- 64位Windows的Dos中取消了edit命令
前段时间在玩dos命令行的时候,用copy con创建了txt文件后想对其进行编辑,然后我又不想用记事本,所以去网上找命令行中对文本文件进行编辑的命令(纯属想装B),结果看到了edit命令. 一敲,就 ...
- ansible 碎记录
https://www.zhukun.net/archives/8167 ansible -i new/hosts new -m authorized_key -a "user=root k ...
- mysql host'XXX' is not allowed to connect to this mysql server
错误的原因一般是没有添加 IP可远程的权限. 首先以 root 帐户登陆 MySQL 1.在 Windows 主机中点击开始菜单,运行,输入“cmd”,进入控制台,然后cd 进入MySQL 的 bin ...
- 使用C#删除一个字符串数组中的空字符串
C#中要如何才能删除一个字符串数组中的空字符串呢?随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.C#3. ...
- http的长连接和短连接(数据库也一样)
长连接与短连接 所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持. 短连接是指通信双方有数据交互时 ...
- linux添加磁盘空间
首先你要关掉系统,把分配的硬盘空间变大,或者重新建立一个虚拟硬盘(这时下面的就不是sda了,而是sdb1了).这两种方法都可行,我都试过了.其次用root用户登录到你的linux系统,查看你系统的分区 ...
- mpvue 使用echarts动态绘制图表(数据改变重新渲染图表)
最近在公司开发一款微信小程序,按照客户需求用饼状图显示当前设备状态(开机.故障.关机),于是就在网上寻找各种资料,找了很多mpvue使用关于echarts绘制图表,最终功夫不负有心人,找到一篇关于mp ...
- String----是一个对象
* 字符串可以看成是字符组成的数组,但是js中没有字符类型 * 字符是一个一个的,在别的语言中字符用一对单引号括起来 * 在js中字符串可以使用单引号也可以使用双引号 * 因为字符串可以看成是数组,所 ...
- linux问题整理
linux常用命令 //1.Linux如何查询进程?杀死一个进程? //2.文件权限,改变权限命令 //3.Linux中查看服务的命令 //4.linux查看内存 //5.查看磁盘空间的命令,查看文件 ...