ICode9

精准搜索请尝试: 精确搜索
首页 > 互联网> 文章详细

命令行最酷的功能——I/O重定向 | haxh

2018-11-16 16:20:56  阅读:570  来源: 互联网

标签:


I/O 是输入/输出(input/output)的缩写。这个功能可以把命令行的输入内容重定向为从文件中获取内容,也可以把命令行的输出结果重定向到文件中。如果我们将多个命令行关联起来,将形成非常强大的命令——管道。

  • cat:合并文本
  • sort:对文本进行排序
  • uniq:报告或删除文件中重复的行
  • wc:打印文件中的换行符、字和字节的个数
  • grep:打印匹配行
  • head:输出文件中第一部分内容
  • tail:输出文件中最后一部分内容
  • tee:读取标准输入的数据,并将其内容输出到标准输出和文件中。

我们使用过的很多程序生成了不同种类的输出。这些输出通常包含两种类型。一种是程序运行的结果,即该程序生成的数据;另一种是状态和错误信息,表示程序当前的运行情况。比如输入ls命令,屏幕上将显示它的运行结果以及它的相关错误信息。

与UNIX“一切都是文件”的思想一致,类似ls的程序实际上把它们的运行结果发送到了一个成为标准输出(standard output,通常表示为stdout)的特殊文件中,它们的状态信息则发送到了另一个成为标准错误(standard error,通常表示为stderr)的文件中。默认情况下,标准输出和标准错误都将被链接到屏幕上,并且不会被保存在磁盘文件中。

另外,许多程序从一个称为标准输入(standard input,表示为stdin)的设备来得到输入。默认情况下,标准输入连接到键盘。

I/O重定向功能可以改变输出内容发送的目的地,也可以改变输入内容的来源地。通常来说,输出内容显示在屏幕上,输入内容来自于键盘。使用I/O重定向功能可以改变。

标准输出重定向(’>’、’>>’)

I/O重定向功能可以重新定义标准输出内容发送到哪里。使用重定向操作符“>”,后面接文件名,就可以把标准输出重定向到另一个文件中,而不是显示在屏幕上。

1
ls -l /usr/bin > ls-output.txt

使用重定向符>>将使得输出内容添加在文件的尾部。如果这个文件不存在,将于操作符>的作用一样创建这个文件。

1
ls -l /usr/bin >> ls-output.txt

标准错误重定向(‘2>’’)

标准错误重定向并不能简单的使用一个专用的重定向符来实现。要实现标准错误的重定向,不得不提到它的文件描述符。一个程序可以把生成的输出内容发送到任意文件流中。如果把这些文件流中的前三个分别对应标准输入内容,标准输出文件和标准错误文件,那么shell将在内部用文件描述符分别索引它们为0、1和2.shell提供了使用文件描述符编号来重定向文件的表示法。由于标准错误等同于文件描述符2,所以可以使用这种表示法来重定向标准错误。

1
ls -l /bin/usr 2> ls-error.txt

将标准输出和标准错误重定向到同一个文件(‘&>’)

将一个命令的所有输出内容都放在同一个文件中。

1
ls -l /bin/usr > ls-output.txt 2>&1
1
ls -l /bin/usr &> ls-output.txt

处理不想要的输出

通过把输出重定向到/dev/null(一个称为位桶的设备),可以实现命令执行后不得到输出的效果。

1
ls -l /bin/usr 2> /dev/null

标准输入重定向

使用重定向符”<”,我们可以把标准输入的源从键盘变为lazy_dog.txt 文件。(结果和只传文件名是一样的)

命令从标准输入到读取数据,并将数据发送到标准输出的能力,是使用了名位管道的shell特性。使用管道操作符“|”(竖线) 可以把一个命令的标准输出传送到另一个命令的标准输入中。

标签:
来源: https://haxianhe.com/2018/11/16/命令行最酷的功能——I-O重定向/

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有