文件描述符

  可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作。 用户可以自定义文件描述符范围是:3-num,这个最大数字,跟用户的:ulimit –n 定义数字有关系,不能超过最大值。默认描述符范围是:0-2。

执行原理

  linux启动后,会默认打开3个文件描述符,分别是:标准输入standard input 0,正确输出standard output 1,错误输出:error output 2。以后每次用新的进程打开文件,都会绑定文件描述符,因为子进程都会继承父进程的详细信息,如:环境变量。对于任何一条Linux命令执行,都会是这样一个过程:
1、首先有一个标准输入:Command.
2、然后根据这个标准输入会有一个输出结果:标准输出与标准错误。
3、如果成功了会将正确的内容输出到屏幕。
4、如果错误了也会将错误的内容输出到屏幕,并且进行提示。
5、这些默认的输出,输入都是linux系统内定的,我们在使用过程中,有时候并不希望执行结果输出到屏幕。我想输出到文件或其它设备。这个时候我们就需要进行输出重定向了。如下图:

描述符原理

常用操作符

1、    标准输入(stdin):代码为0,使用<或者<< ;/dev/stdin -> /proc/self/fd/0
2、 标准输出(stdout):代码为1,使用>或者>>; /dev/stdout -> /proc/self/fd/1
3、 标准错误(stderr)代码为2,使用2>或者2>>;/dev/stderr -> /proc/self/fd/2

输出重定向

格式如下:

command-line1 [1-n]> file或文件操作符或设备
上面命令意思是:将一条命令执行结果(标准输出,或者错误输出,本来都要打印到屏幕上面的) 重定向其它输出设备(文件,打开文件操作符,或打印机等等)1,2分别是标准输出,标准错误。

示例如下:

实例一:显示当前目录文件 test.sh test1.sh,test1.sh实际不存在
[root@asus-a53s data]# touch test.sh
[root@asus-a53s data]# ls test.sh test1.sh
ls: 无法访问test1.sh: 没有那个文件或目录
test.sh 实例二:正确输出与错误输出都显示在屏幕了,现在需要把正确输出写入suc.txt。
[root@asus-a53s data]# ls test.sh test1.sh > suc.test #标准输出代表的文件描述符可以省略
ls: 无法访问test1.sh: 没有那个文件或目录
[root@asus-a53s data]# cat suc.test
test.sh 实例三:把错误输出,不输出到屏幕,输出到err.txt
[root@asus-a53s data]# ls test.sh test1.sh > suc.test 2> err.txt
[root@asus-a53s data]# cat suc.test err.txt
test.sh
ls: 无法访问test1.sh: 没有那个文件或目录 实例四:继续追加把输出追加到suc.txt、err.txt
[root@asus-a53s data]# ls test.sh test1.sh >> suc.test 2>> err.txt
[root@asus-a53s data]# cat suc.test err.txt
test.sh
test.sh
ls: 无法访问test1.sh: 没有那个文件或目录
ls: 无法访问test1.sh: 没有那个文件或目录 实例五:将错误输出信息关闭掉
[root@asus-a53s data]# ls test.sh test1.sh 2>&- #&-代表关闭与它绑定的描述符,不输出。
test.sh
[root@asus-a53s data]# ls test.sh test1.sh 2> /dev/null #/dev/null是linux下面的一个及时删除回收站
test.sh 实例六:关闭所有输出
[root@asus-a53s data]# ls test.sh test1.sh 1>&- 2>&- #直接关闭两个输出
[root@asus-a53s data]# ls test.sh test1.sh > /dev/null 2>&1 #将正确与错误的输出都重定向到指定设备
[root@asus-a53s data]# ls test.sh test1.sh &> /dev/null #同上,&> 等于2>&1

输入重定向

格式如下:

command-line [n]<file或文件描述符&设备
将命令默认从键盘获得的输入,改成从文件,或者其它打开文件以及设备输入。执行这个命令,将标准输入0,与文件或设备绑定。将由它进行输入。

示例如下:

实例一:用catfile文件里面的内容代替键盘输出,输出到屏幕。
[root@asus-a53s data]# cp suc.test catfile
[root@asus-a53s data]# cat < catfile
Ls #这里如果内容过多,按下 [ctrl]+d 离开
[root@asus-a53s data]# cat suc.test
ls 实例二:从标准输入【键盘】获得数据,然后输出给catfile文件
[root@asus-a53s data]# cat > catfile << EOF #EOF可以是任何字符,代表结束
> hello,This is my test!
> EOF
[root@asus-a53s data]# cat catfile #上面用的是重定向覆盖,所以ls内容不见了
hello,This is my test! 实例三:从test.sh 获得输入数据,然后输出给文件catfile
[root@asus-a53s data]# cat test.sh
1
test1
test1
test1
[root@asus-a53s data]# cat > catfile < test.sh #这里在输入的时候不能用<<,因为<<同时是也代表结束输出
[root@asus-a53s data]# cat catfile
1
test1
test1
test1

绑定重定向

格式如下:

exec 文件描述符[n] <或> file或文件描述符或设备
在上面讲的输入,输出重定向 将输入,输出绑定文件或设备后。只对当前那条指令是有效的。如果需要在绑定之后,接下来的所有命令都支持的话。就需要用exec命令

示例如下:

实例一:学习exec的绑定使用
[chengmo@centos5 shell]$ exec 6>&1
#将标准输出与fd 6绑定 [chengmo@centos5 shell]$ ls /proc/self/fd/
0 1 2 3 6
#出现文件描述符6 [chengmo@centos5 shell]$ exec 1>suc.txt
#将接下来所有命令标准输出,绑定到suc.txt文件(输出到该文件) [chengmo@centos5 shell]$ ls -al
#执行命令,发现什么都不返回了,因为标准输出已经输出到suc.txt文件了 [chengmo@centos5 shell]$ exec 1>&6
#恢复标准输出 [chengmo@centos5 shell]$ exec 6>&-
#关闭fd 6描述符 [chengmo@centos5 ~]$ ls /proc/self/fd/
1 2 3

参考地址:https://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html

Linux文件内容重定向的更多相关文章

  1. Linux 文件内容查看工具介绍-cat,less,more,tail,head

    Linux 文件内容查看工具介绍 作者:北南南北来自:LinuxSir.Org摘要: 本文讲述几种常用文件内容的查看工具,比如cat.more.less.head.tail等,把这些工具最常用的参数. ...

  2. LINUX文件内容处理及文本编辑器vim

    Linux基本操作命令 echo命令 echo命令: 把echo后面的内容显示到屏幕. -n 显示内容的时候不显示每行结尾的回车 echo 内容 >> 文件名 表示把内容加到一个文件的末尾 ...

  3. Linux文件内容查阅 - cat, tac, nl, more, less, head, tail, od

    cat 由第一行开始显示文件内容 tac 从最后一行开始显示,可以看出 tac 是 cat 的倒著写! nl 显示的时候,顺道输出行号! more 一页一页的显示文件内容 less 与 more 类似 ...

  4. Linux 文件内容查看(cat、tac、nl 、more 、less、head、tail )

    Linux系统中使用以下命令来查看文件的内容: cat:  由第一行开始显示文件内容tac :从最后一行开始显示,可以看出 tac 是 cat 的倒著写!nl:   显示的时候,顺道输出行号!more ...

  5. linux tail 命令详解!Linux 文件内容查看工具介绍

    转:http://blog.csdn.net/carzyer/article/details/4759593 1.cat 显示文件连接文件内容的工具: cat 是一个文本文件查看和连接工具.查看一个文 ...

  6. Linux文件内容查阅

    直接查阅一个文件的内容:cat/tac/nl命令 cat (concatenate) # cat [-AbEnTv] 选项与參数: -A  :相当於 -vET 的整合选项.可列出一些特殊字符而不是空白 ...

  7. Linux 文件内容转码

    文件内容的转换: iconv -f GB2312 -t UTF-8 gb1.txt >gb2.txt-f, –from-code=名称 原始文本编码-t, –to-code=名称 输出编码-o, ...

  8. linux(4)Linux 文件内容查看

    查看文件内容总览 cat 由第一行开始显示文件内容 tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写! nl 显示的时候,顺道输出行号! more 一页一页的显示文件内容 less ...

  9. linux文件内容列传行_行转列

    ================ 文件内容列传行_行转列  ================ 一.列转行 1.编辑测试文件 vi log.txt 16:23:00 8.2% 1773620k 16:2 ...

随机推荐

  1. 异步加载css 和 谷歌浏览器各实用小工具介绍

    异步加载css资源 加开页面首屏显示速度使我们前端一直在追求的目标,而css资源在这些优化中同样也是不可或缺的. 一个网站可能有一部分css资源是必须的,他需要在页面渲染完之前就被加载完,并和html ...

  2. 第二阶段:4.商业需求文档MRD:6.PRD-其他需求

  3. JS事件之自建函数bind()与兼容性问题解决

    JavaScript事件绑定常用方法 对象.事件 = 函数; 它只能同时为一个对象的一个事件绑定一个响应函数 不能绑定多个,如果有多个,后面的会覆盖前面的 addEventListener() 此方法 ...

  4. VMware Workstation 与 Device/Credential Guard 不兼容.在禁用 Device/Credenti

    出现问题的原因: 原因一.出现此问题的原因是Device Guard或Credential Guard与Workstation不兼容. 原因二.Windows系统的Hyper-V不兼容导致. 解决方案 ...

  5. 泛圈科技Yottachain区块链云存储打破传统云迎来价值数据存储

    随着物联网时代的发展,更多的数据随之产生.从智能设备到电脑再到视频游戏机,各种各样的信息从不同的电子产品源源不断地涌入.通常,人们将数据存储在本地驱动器中.但是,由于产生的数据量是无限的,超过了本地存 ...

  6. leetcode.383赎金信

    给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成.如果可以构成,返回 true :否则返回 ...

  7. $BZOJ1799\ Luogu4127$ 月之谜 数位统计$DP$

    AcWing Description Sol 看了很久也没有完全理解直接$DP$的做法,然后发现了记搜的做法,觉得好棒! 这里是超棒的数位$DP$的记搜做法总结   看完仿佛就觉得自己入门了,但是就像 ...

  8. Spring中使用注解 @Scheduled执行定时任务

    注解@Scheduled 使用方式 注解@Scheduled 可以作为一个触发源添加到一个方法中,例如,以下的方法将以一个固定延迟时间5秒钟调用一次执行,这个周期是以上一个调用任务的完成时间为基准,在 ...

  9. 基于Netty和SpringBoot实现一个轻量级RPC框架-Client篇

    前提 前置文章: <基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇> <基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇> 前 ...

  10. 七种武器:JavaScript 新特性闪亮登场

    JavaScript(或ECMA Script) 是一门不断发展的语言,有许多关于如何前进的建议和想法.TC39(技术委员会39)是负责定义JS标准和特性的委员会,今年他们非常活跃.以下是目前处于&q ...