linux的重定向管道详解
重定向标准 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的重定向管道详解相关推荐
- linux标准输出重定向到文件夹,linux输入输出重定向使用详解
1. 输出重定向: 默认条件下,标准输出和错误输出都是终端,可以把标准输出和错误内容进行重定向: [~]# echo "hello\!" hello\! [~]# echo &qu ...
- linux cat命令缩写,linux下cat命令详解
cat 能够一同显现多个文件的内容,比方咱们能够在一个cat指令上一同显现两个文件的内容;那么你知道linux下cat命令详解么?接下来是小编为大家收集的linux下cat命令详解,欢迎大家阅读: l ...
- linux nc命令使用详解
linux nc命令使用详解 功能说明:功能强大的网络工具 语 法:nc [-hlnruz][-g<网关->][-G<指向器数目>][-i<延迟秒数>][-o< ...
- linux中用less命令,Linux less 命令用法详解
原标题:Linux less 命令用法详解 less 是一个Linux命令行实用程序,用于显示文件或命令输出的内容,它一次只显示一个页面.它类似于 more ,但具有更高级的功能,允许您在文件中向前和 ...
- linux tee错误日志,linux tee命令使用详解教程
在执行Linux命令时,我们既想把输出保存到文件中,又想在屏幕上看到输出内容,就可以使用tee命令.接下来是小编为大家收集的linux tee 命令使用详解教程,希望能帮到大家. linux tee ...
- linux命令行使用ppt,linux命令行系统详解.ppt
linux命令行系统详解.ppt (161页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 29.9 积分 第2章 命令与示例 1为什么要学习命令?命令对于 ...
- linux语言的说明顺序有哪些,(linux常用头文件详解.doc
(linux常用头文件详解 linux常用头文件详解 POSIX标准定义的头文件??????? 目录项 ???????? 文件控制 ??? 文件名匹配类型 ??? 路径名模式匹配类型 ??????? ...
- linux下tree命令详解
From:http://blog.163.com/ly_89/blog/static/186902299201161302812880/ linux下tree命令详解---linux以树状图逐级列出目 ...
- Linux 用户及权限详解
Linux 用户及权限详解 用户 , 组 ,权限 安全上下文(secure context): 权限: r,w,x 文件: r : 可读,可以使用类似cat 等命令查看文件内容. w : 可写,可以编 ...
- linux权限可被登录用户读取,Linux 用户及权限详解
Linux 用户及权限详解 用户 , 组 ,权限 安全上下文(secure context): 权限: r,w,x 文件: r : 可读,可以使用类似cat 等命令查看文件内容. w : 可写,可以编 ...
最新文章
- 【python】命令行解析工具getopt用法
- .NET Framework 3.5 SP1 bootstrapper 包(安装和部署)的解决方法
- 100_框架对象事件
- Hdu 1072 【广搜】.cpp
- eclispse调试为什么什么都看不到_【科普6】单号出了为什么还是看不到物流信息?...
- 如何使用SAP Fiori Launchpad Designer
- 鸿蒙系统有那些上市,鸿蒙上市整套系统究竟意味着什么
- 案例:对比使用Java代码与EL表达式获取信息
- 随机效应估算与固定效应估算_【机器学习】随机生存森林
- 作为一个对电脑配置一概不知的人,怎样才能一步一步了解电脑构造并且由此来学会怎样自己配置电脑?
- sublime text 64位_Python学习第一步 - 用Sublime搭建Python运行环境
- 使用List在Java中的HashMap实现
- yolov5 解码使用GPU进行加速
- 【数据结构笔记】Leetcode:718. 最长重复子数组(动态规划)
- 【软件项目管理】期末复习
- 如何检索某学术会议全部论文?
- 《5K入门级项目实战:好来屋在线影院》之第 6 战 —— 添加电影信息、CKEditor富文本编辑器、SpringBoot 加载本地文件
- 慕课课程《简明世界史》课堂笔记二
- panda经典四道题期末考核分享
- jmeter中的响应断言
热门文章
- cesium添加环形扩散波纹
- HarmonyOS应用开发02-程序框架UIAbility、启动模式与路由跳转
- idea推送git仓库被拒绝如何解决
- win10安装CAJViewer 错误1305
- Stata17 MP/SE/BE(包含常用模型代码和熵值法计算代码)
- 浅析红楼梦主题曲《枉凝眉》演唱技巧——论文文档
- MIT的新成果震惊了科学界,我们真的可以用意念控制机器人了
- oracle 10g透明网关,安装oracle 10g的透明网关笔记
- 微信下载APP方法 IOS跳转商店(App Store)安卓直接跳转浏览器下载
- websocket收发包解析 - 抓包看看都是啥