重定向标准 I/O

Linux shell(比如 Bash)接收或发送序列和字符串流 形式的输入或输出。每个字符都独立于与之相邻的字符。字符没有被组织成结构化记录或固定大小的块。不管实际的字符串流进入或来自文件、键盘、显示窗口或其他 I/O 设备,都使用文件 I/O 技术来访问流。Linux shell 使用 3 种标准的 I/O 流,每种流都与一个文件描述符相关联:
stdout 是标准输出流,它显示来自命令的输出。它的文件描述符为 1。
stderr 是标准错误流,它显示来自命令的错误输出。它的文件描述符为 2。
stdin 是标准输入流,它为命令提供输入。它的文件描述符为 0。

重定向常用命令

cat - 连接文件

sort - 排序文本行

uniq - 报道或省略重复行

grep - 打印匹配行

wc - 打印文件中换行符,字,和字节个数

head - 输出文件第一部分

tail - 输出文件最后一部分

tee - 从标准输入读取数据,并同时写到标准输出和文件

标准输入,输出,和错误

到目前为止,我们用到的许多程序都会产生某种输出。这种输出,经常由两种类型组成。 第一,程序运行结果;这是说,程序要完成的功能。第二,我们得到状态和错误信息, 这些告诉我们程序进展。如果我们观察一个命令,像 ls,会看到它的运行结果和错误信息 显示在屏幕上。

与 Unix 主题“任何东西都是一个文件”保持一致,程序,比方说 ls,实际上把他们的运行结果 输送到一个叫做标准输出的特殊文件(经常用 stdout 表示),而它们的状态信息则送到另一个 叫做标准错误的文件(stderr)。默认情况下,标准输出和标准错误都连接到屏幕,而不是 保存到磁盘文件。除此之外,许多程序从一个叫做标准输入(stdin)的设备得到输入,默认情况下, 标准输入连接到键盘。

注意

I/O 重定向允许我们可以更改输出走向和输入来向。一般地,输出送到屏幕,输入来自键盘, 但是通过 I/O 重定向,我们可以改变输入输出方向。

重定向输出

可以通过两种方法将输出重定向到文件:

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

将输出从文件描述符 n 重定向到文件。您必须具有该文件的写权限。如果该文件不存在,将创建它。如果该文件已经存在,通常将覆盖所有现有内容,并且没有任何警告。\


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

还可以将输出从文件描述符 n 重定向到一个文件中。这里也一样要求您具有该文件的写权限。如果该文件不存在,将创建它。如果该文件已经存在,输出将附加到现有的内容后面。

重定向标准错误

重定向标准错误缺乏专用的重定向操作符。重定向标准错误,我们必须参考它的文件描述符。 一个程序可以在几个编号的文件流中的任一个上产生输出。然而我们必须把这些文件流的前 三个看作标准输入,输出和错误,shell 内部参考它们为文件描述符0,1和2,各自地。shell 提供 了一种表示法来重定向文件,使用文件描述符。因为标准错误和文件描述符2一样,我们用这种 表示法来重定向标准错误:

[me@linuxbox ~]$ ls -l /bin/usr 2> ls-error.txt
文件描述符”2”,紧挨着放在重定向操作符之前,来执行重定向标准错误到文件 ls-error.txt 任务。

重定向标准输出和错误到同一个文件
可能有这种情况,我们希望捕捉一个命令的所有输出到一个文件。为了完成这个,我们 必须同时重定向标准输出和标准错误。有两种方法来完成任务。第一个,传统的方法, 在旧版本 shell 中也有效:

输入重定向


[me@linuxbox ~]$ ls -l /bin/usr > ls-output.txt 2>&1[me@linuxbox ~]$ cat < lazy_dog.txt

The quick brown fox jumped over the lazy dog.
使用“<”重定向操作符,我们把标准输入源从键盘改到文件 lazy_dog.tx。我们看到结果 和传递单个文件名作为参数的执行结果一样。把这和传递一个文件名参数作比较,不是特别有意义, 但它是用来说明把一个文件作为标准输入源。有其他的命令更好地利用了标准输入,我们不久将会看到。

管道线

命令可以从标准输入读取数据,然后再把数据输送到标准输出,命令的这种能力被 一个 shell 特性所利用,这个特性叫做管道线。使用管道操作符”|”(竖杠),一个命令的 标准输出可以管道到另一个命令的标准输入:

command1 | command2
为了全面地说明这个命令,我们需要一些命令。是否记得我们说过,我们已经知道有一个 命令接受标准输入?它是 less 命令。我们用 less 来一页一页地显示任何命令的输出,命令把 它的运行结果输送到标准输出:

[me@linuxbox ~]$ ls -l /usr/bin | less
这极其方便!使用这项技术,我们可以方便地检测会产生标准输出的任一命令的运行结果。

过滤器

管道线经常用来对数据完成复杂的操作。有可能会把几个命令放在一起组成一个管道线。 通常,以这种方式使用的命令被称为过滤器。过滤器接受输入,以某种方式改变它,然后 输出它。第一个我们想试验的过滤器是 sort。想象一下,我们想把目录/bin 和/usr/bin 中 的可执行程序都联合在一起,再把它们排序,然后浏览执行结果:

[me@linuxbox ~]$ ls /bin /usr/bin | sort | less

因为我们指定了两个目录(/bin 和/usr/bin),ls 命令的输出结果由有序列表组成, 各自针对一个目录。通过在管道线中包含 sort,我们改变输出数据,从而产生一个 有序列表。

重定向和管道的区别

重定向不管是输入和输出,都是把一个方向的输入和输出换成其他的形式,然而管道是把两个方向的输出和输入做一个转化。

参考:
https://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-103-4/
https://billie66.github.io/TLCL/book/zh/chap07.html

linux的重定向管道详解相关推荐

  1. linux标准输出重定向到文件夹,linux输入输出重定向使用详解

    1. 输出重定向: 默认条件下,标准输出和错误输出都是终端,可以把标准输出和错误内容进行重定向: [~]# echo "hello\!" hello\! [~]# echo &qu ...

  2. linux cat命令缩写,linux下cat命令详解

    cat 能够一同显现多个文件的内容,比方咱们能够在一个cat指令上一同显现两个文件的内容;那么你知道linux下cat命令详解么?接下来是小编为大家收集的linux下cat命令详解,欢迎大家阅读: l ...

  3. linux nc命令使用详解

    linux nc命令使用详解 功能说明:功能强大的网络工具 语 法:nc [-hlnruz][-g<网关->][-G<指向器数目>][-i<延迟秒数>][-o< ...

  4. linux中用less命令,Linux less 命令用法详解

    原标题:Linux less 命令用法详解 less 是一个Linux命令行实用程序,用于显示文件或命令输出的内容,它一次只显示一个页面.它类似于 more ,但具有更高级的功能,允许您在文件中向前和 ...

  5. linux tee错误日志,linux tee命令使用详解教程

    在执行Linux命令时,我们既想把输出保存到文件中,又想在屏幕上看到输出内容,就可以使用tee命令.接下来是小编为大家收集的linux tee 命令使用详解教程,希望能帮到大家. linux tee ...

  6. linux命令行使用ppt,linux命令行系统详解.ppt

    linux命令行系统详解.ppt (161页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 29.9 积分 第2章 命令与示例 1为什么要学习命令?命令对于 ...

  7. linux语言的说明顺序有哪些,(linux常用头文件详解.doc

    (linux常用头文件详解 linux常用头文件详解 POSIX标准定义的头文件??????? 目录项 ???????? 文件控制 ??? 文件名匹配类型 ??? 路径名模式匹配类型 ??????? ...

  8. linux下tree命令详解

    From:http://blog.163.com/ly_89/blog/static/186902299201161302812880/ linux下tree命令详解---linux以树状图逐级列出目 ...

  9. Linux 用户及权限详解

    Linux 用户及权限详解 用户 , 组 ,权限 安全上下文(secure context): 权限: r,w,x 文件: r : 可读,可以使用类似cat 等命令查看文件内容. w : 可写,可以编 ...

  10. linux权限可被登录用户读取,Linux 用户及权限详解

    Linux 用户及权限详解 用户 , 组 ,权限 安全上下文(secure context): 权限: r,w,x 文件: r : 可读,可以使用类似cat 等命令查看文件内容. w : 可写,可以编 ...

最新文章

  1. 【python】命令行解析工具getopt用法
  2. .NET Framework 3.5 SP1 bootstrapper 包(安装和部署)的解决方法
  3. 100_框架对象事件
  4. Hdu 1072 【广搜】.cpp
  5. eclispse调试为什么什么都看不到_【科普6】单号出了为什么还是看不到物流信息?...
  6. 如何使用SAP Fiori Launchpad Designer
  7. 鸿蒙系统有那些上市,鸿蒙上市整套系统究竟意味着什么
  8. 案例:对比使用Java代码与EL表达式获取信息
  9. 随机效应估算与固定效应估算_【机器学习】随机生存森林
  10. 作为一个对电脑配置一概不知的人,怎样才能一步一步了解电脑构造并且由此来学会怎样自己配置电脑?
  11. sublime text 64位_Python学习第一步 - 用Sublime搭建Python运行环境
  12. 使用List在Java中的HashMap实现
  13. yolov5 解码使用GPU进行加速
  14. 【数据结构笔记】Leetcode:718. 最长重复子数组(动态规划)
  15. 【软件项目管理】期末复习
  16. 如何检索某学术会议全部论文?
  17. 《5K入门级项目实战:好来屋在线影院》之第 6 战 —— 添加电影信息、CKEditor富文本编辑器、SpringBoot 加载本地文件
  18. 慕课课程《简明世界史》课堂笔记二
  19. panda经典四道题期末考核分享
  20. jmeter中的响应断言

热门文章

  1. cesium添加环形扩散波纹
  2. HarmonyOS应用开发02-程序框架UIAbility、启动模式与路由跳转
  3. idea推送git仓库被拒绝如何解决
  4. win10安装CAJViewer 错误1305
  5. Stata17 MP/SE/BE(包含常用模型代码和熵值法计算代码)
  6. 浅析红楼梦主题曲《枉凝眉》演唱技巧——论文文档
  7. MIT的新成果震惊了科学界,我们真的可以用意念控制机器人了
  8. oracle 10g透明网关,安装oracle 10g的透明网关笔记
  9. 微信下载APP方法 IOS跳转商店(App Store)安卓直接跳转浏览器下载
  10. websocket收发包解析 - 抓包看看都是啥