文件描述符

可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作

用户可以自定义文件描述符范围是:3-num,这个最大数字,跟用户的:ulimit –n 定义数字有关系,不能超过最大值

查看系统文件描述符最大值

[root@localhost ~]# ulimit -n
1024

linux系统默认文件描述符

文件描述符 用途 POSIX名称 stdio流 说明
0 标准输入 STDIN_FILENO stdin 默认的设备是键盘
命令将从标准输入文件中读取
在执行过程中的需要的输入数据
数据来源于文件
1 标准输出 STDOUT_FILENO stdout 默认的设备是显示器
命令执行后的输出结果发送到标准输出文件
结果输出到文件
2 标准错误 STDERR_FILENO stderr 默认的设备是显示器
命令将执行期间的各种错误信息发送到标准错误文件
错误信息发送到文件

标准输入,标准输出和标准错误默认使用键盘和显示器作为关联设备与操作系统进行交互完成最基本的输入,输出操作

命令执行过程

重定向输出

语法:命令 [文件描述符] >或>> 文件或文件操作符或设备

查看当前目录下的文件

[root@VM_200_13_centos ~]# ls
test.txt

查看当前目录下的test.txt文件和一个不存在的test1.txt文件

[root@VM_200_13_centos ~]# ls test.txt test1.txt
ls: cannot access test1.txt: No such file or directory
test.txt

将正确的输出重定向到文件success.txt中

[root@VM_200_13_centos ~]# ls test.txt test1.txt 1>success.txt
ls: cannot access test1.txt: No such file or directory
[root@VM_200_13_centos ~]# cat success.txt
test.txt

将错误的输出重定向到文件error.txt中

[root@VM_200_13_centos ~]# ls test.txt  test1.txt 2>error.txt
test.txt
[root@VM_200_13_centos ~]# cat error.txt
ls: cannot access test1.txt: No such file or directory

&1:代绑定到表标准输出

&2:代表绑定到标准错误输出

&-:代表关闭与他绑定的文件描述符

关闭标准错误输出

[root@VM_200_13_centos ~]# ls test.txt  test1.txt >success.txt 2>&-
[root@VM_200_13_centos ~]# cat success.txt
test.txt

将标准错误输出绑定到标准输出

[root@VM_200_13_centos ~]# ls test.txt  test1.txt > all.txt 2>&1
[root@VM_200_13_centos ~]# cat all.txt
ls: cannot access test1.txt: No such file or directory
test.txt

将标准错误输出重定向到黑洞设备

[root@VM_200_13_centos ~]# ls test.txt  test1.txt 2>/dev/null
test.txt

&>:混合输出(不分对错)

[root@VM_200_13_centos ~]# ls test.txt  test1.txt &> all.txt
[root@VM_200_13_centos ~]# cat all.txt
ls: cannot access test1.txt: No such file or directory
test.txt

注意事项:

  1. shell遇到”>”操作符,会判断右边文件是否存在,如果存在就先删除,并且创建新文件。不存在直接创建。 无论左边命令执行是否成功。右边文件都会变为空
  2. “>>”操作符,判断右边文件,如果不存在,先创建

    以添加方式打开文件,会分配一个文件描述符[不特别指定,默认为1,2]然后,与左边的标准输出(1)或错误输出(2) 绑定
  3. 当命令:执行完,绑定文件的描述符也自动失效。0,1,2又会空闲
  4. 一条命令启动,命令的输入,正确输出,错误输出,默认分别绑定0,1,2文件描述符
  5. 一条命令在执行前,先会检查输出是否正确,如果输出设备错误,将不会进行命令执行

重定向输入

将命令中接收输入的途径由默认的键盘改为其他文件而不是等待从键盘输入

通过重定向输入可以使一些交互式操作过程能够通过读取文件来完成

操作符: <

使用passwd设置密码时,每次都根据提示输入密码比较烦琐

改用重定向输入将可以忽略交互式的过程而自动完成密码设置

使用非交互式的去执行设置密码

[root@VM_200_13_centos ~]# touch passwd.txt
[root@VM_200_13_centos ~]# echo 123456 > passwd.txt
[root@VM_200_13_centos ~]# passwd test --stdin < passwd.txt
Changing password for user test.
passwd: all authentication tokens updated successfully.

管道

管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息

也就是 standard output 的信息,对于 stdandard error 信息没有直接处理能力

然后,传递给下一个命令,作为标准的输入 standard input



command1正确输出,作为command2的输入 然后comand2的输出作为,comand3的输入 ,comand3输出就会直接显示在屏幕上面了

通过管道之后:comand1,comand2的正确输出不显示在屏幕上面

  1. 管道命令只处理前一个命令正确输出,不处理错误输出
  2. 管道命令右边命令,必须能够接收标准输入流命令才行
[root@VM_200_13_centos ~]# ls -f | grep all
all.txt

管道与重定向的区别

  • 左边的命令应该有标准输出 | 右边的命令应该接受标准输入
  • 左边的命令应该有标准输出 > 右边只能是文件
  • 左边的命令应该需要标准输入 < 右边只能是文件
  • 管道触发两个子进程执行"|"两边的程序,而重定向是在一个进程内执行

RHEL7管道与重定向的更多相关文章

  1. Linux基本配置和管理 2 ---- Linux多命令协作----管道及重定向

    1 管道和重定向 1 在Linux中大多数命令都很简单,很少出现复杂的命令,每个命令只是实现一个简单的功能,我们可以通过组合不同的命令来实现复杂的功能 2 在Linux中几乎所有的命令返回的数据都是纯 ...

  2. Linux入门基础 #9:管道及重定向

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  3. linux文件管理之管道与重定向

    ============================================================== 内容提要: 输入输出重定向.管道: 重定向的作用: 文件描述符 0 1 2 ...

  4. Linux教程 - 管道和重定向

      管道和重定向! 保持数据流动 介绍   在前两节中,我们看了一些可以为我们操作数据的过滤器.在本节中,我们将看到我们如何将它们结合在一起来执行更强大的数据操作. 本节涉及一些阅读.即使这些机制及其 ...

  5. Linux入门-7 Linux管道、重定向以及文本处理

    Linux管道.重定向以及文本处理 1 Linux多命令协作:管道及重定向 管道和重定向 2 Linux命令行文本处理工具 文件浏览 基于关键字搜索-grep 基于列处理文本-cut 文本统计-wc ...

  6. linux 学习管道 和重定向

    开源文化的理念之一 就是不要重新发明轮子 在linux 系统中大多是都是非常简单的命令,每个命令都是实现一个或者几个简单的功能,我们可以将不同的命令组合在一起 来达到复杂的功能的目的,在linux中因 ...

  7. linux 管道与重定向

    命令行shell数据流有如下定义: 通过管道和重定向可以控制CLI的数据流

  8. Linux 入门记录:十六、Linux 多命令协作:管道及重定向

    一.多命令协作 在 Linux 系统当中,大多数命令都很简单,很少出现复杂功能的命令,每个命令往往只实现一个或多个很简单的功能.通过将不同功能的命令组合一起使用,可以实现某个复杂功能的. Linux ...

  9. bash中的管道和重定向

    管道 管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandarderror 信息没有直接处理能力.然后,传递给下一 ...

随机推荐

  1. ux.form.field.TreePicker 扩展,修复火狐不能展开bug

    /** * A Picker field that contains a tree panel on its popup, enabling selection of tree nodes. * 动态 ...

  2. C# 类型基础——你可能忽略的技术细节

    引言 本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone 其实也就是对象复制.复制又分为了浅度 ...

  3. android 中targetSdkVersion和与target属性的区别

    AndroidMenifest.xml中targetSdkVersion和project.properties中的target属性的区别      在AndroidMenifest.xml中,常常会有 ...

  4. 移动WEB开发中媒体查询里的width, device-width, resolution

    /*1.width: viewport的宽度,css像素,三星S3的viewort默认宽度是980px. 当设置viewport width=device-width时,对应的媒体查询中width的值 ...

  5. 重写js alert

    Window.prototype.alert = function(){ //创建一个大盒子 var box = document.createElement("div"); // ...

  6. Mina、Netty、Twisted一起学(三):TCP消息固定大小的前缀(Header)

    在上一篇博文中,有介绍到用换行符分割消息的方法.但是这种方法有个小问题,如果消息中本身就包含换行符,那将会将这条消息分割成两条,结果就不对了. 本文介绍另外一种消息分割方式,即上一篇博文中讲的第2条: ...

  7. 超赞!12套你没见过的社交媒体 & 社交网站图标

    如今,社交网络成为我们信息获取和传播的重要途径,很多网站都有把内容分享到社交媒体的功能.社交媒体图标作为向用户传递信息的重要媒介,不管是在网页还是 Web 应用程序中都非常需要.今天这篇文章和大家分享 ...

  8. SpringMVC架构浅析

    SpringMVC概述 Spring的web框架围绕DispatcherServlet设计. DispatcherServlet的作用是将请求分发到不同的处理器. Spring的web框架包括可配置的 ...

  9. EXCEL 数字+E+数字 自动识别为指数形式的解决办法

    1.今天从数据库导出excel表时,出现本来为"2E3"的单元格错误显示为"2.00E+03"的情况 2.而设置 单元格格式 为"文本"后, ...

  10. SQL Server中的事务日志管理(6/9):大容量日志恢复模式里的日志管理

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...