linux I/O重定向及管道
一,I/O重定向
重定向正常输出
> :覆盖以存在文件的内容,很危险的操作
>>:如果文件已经存在,则是在原内容的最后追加。
可以禁止>的覆盖行为,使用
set -C。只在当前会话有效。set +C恢复覆盖行为。# set -C
# cat /etc/issue > /tmp/is1
-bash: /tmp/is1: cannot overwrite existing file
# cat /etc/issue >| /tmp/is1
>|:
set -C已经禁止了覆盖,但是确认就是要覆盖,可以使用。
重定向错误输出
- 2>:覆盖以存在文件的内容,很危险的操作
- 2>>:如果文件已经存在,则是在原内容的最后追加。
- 2>|:强制覆盖
合并重定向正常输出和错误输出
- &>:覆盖以存在文件的内容,很危险的操作
- &>>:如果文件已经存在,则是在原内容的最后追加。
- &>|:不支持,语法报错。
把错误输出,重定向到正常输出:2>&1
# cat /etc/issue2 >> /tmp/is1 2>&1
如果命令产生的是正常输出,则重定向到/tmp/is1;如果产生的是错误输出,则把错误输出重定向到正常输出。由于正常输出已经重定向到了/tmp/is1了,所以错误输出也重定向到了/tmp/is1.
重定向输入:
<支持文件作为参数的命令,可以不使用
<,也能够重定向输入,比如cat# cat < /etc/issue
\S
Kernel \r on an \m
# cat /etc/issue
\S
Kernel \r on an \m不支持文件作为参数的命令,必须明确使用
<,才能够重定向输入。比如trtr命令用途:替换或者删除特定的字符语法:
tr [OPTION]... SET1 [SET2]把输入的1替换成2,把输入的2替换成4
$ tr [12] [34]
12//输入的12
34//被替换成了34
22//输入的22
44//被替换成了44
利用重定向,把文件里的小写字母,全部替换成相应的大写字母,把结果显示到标准输出。
# cat /etc/issue
\S
Kernel \r on an \m
# tr [:lower:] [:upper:] < /etc/issue
\S
KERNEL \R ON AN \M
利用重定向,把文件里的小写字母,全部删除后,把结果显示到标准输出。
# cat /etc/issue
\S
Kernel \r on an \m
# tr -d [a-z] < /etc/issue
\S
K \ \
<<:是干什么的?<<后面的词作为结尾,把内容重定向到文件里# cat > /tmp/is1.out << EOF
> hello
> cat cat
> EOF
# cat /tmp/is1.out
hello
cat cat
特殊设备:/dev/null
重定向到/dev/null,就相当于消失了。
在shell脚本程序里,当关心的是,命令的执行结果(成功,还是失败),而不是命令执行后的输出的时候,就可以把命令的输出重定向到/dev/null里。
例子:只想知道/etc/passwd文件里是否有第一行,而不关心第一行的内容时,使用下面的命令。
# head -1 /etc/passwds &> /dev/null
# echo $?
1
# head -1 /etc/passwd &> /dev/null
# echo $?
0
二,管道
连接程序,把前一个命令的输出作为后一个命令的输入。
command1 | command2 | command3 ...
例子1:把cat的输出,作为tr的输入
# cat /etc/issue
\S
Kernel \r on an \m
# cat /etc/issue | tr [a-z] [A-Z]
\S
KERNEL \R ON AN \M
例子:把who的输出,作为tail的输入,再把tail的输出,作为tr的输入。
# who
ys :0 2019-12-16 10:22 (:0)
ys pts/0 2019-12-16 10:22 (:0)
root pts/1 2019-12-16 10:23 ()
# who | tail -2
aa pts/0 2019-12-16 10:22 (:0)
root pts/1 2019-12-16 10:23 ()
# who | tail -2 | tr [a-z] [A-Z]
AA PTS/0 2019-12-16 10:22 (:0)
ROOT PTS/1 2019-12-16 10:23 ()
重定向后,原来命令的输出就没有了,能够保存上一个命令的输出吗?使用tee命令。
tee:read from standard input and write to standard output and files。从标准输入读取,然后写入到标准输出和文件中。
例子:保留cat的输出,并把cat的输出,传递给tr命令
# cat /etc/issue | tee /tmp/is3.out | tr [a-z] [A-Z]
\S
KERNEL \R ON AN \M
# cat /tmp/is3.out
\S
Kernel \r on an \m
练习1:把/etc/passwd文件的前6行的信息转换为大写字母后输出
# head -6 /etc/passwd | tr [a-z] [A-Z]
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN
LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN
SYNC:X:5:0:SYNC:/SBIN:/BIN/SYNC
c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854
linux I/O重定向及管道的更多相关文章
- linux输入输出、重定向、管道
本篇讲述linux系统的输入输出.管道和重定向. 1. liunx的输入输出 一个linux系统要想发挥作用,就要有输入输出,这样才可以与外界交互. 类型 设备文件名 文件描述符 设备名称 说明 备注 ...
- LINUX常用命令--重定向、管道篇(四)
一.Linux重定向 重定向能够实现Linux命令的输入输出与文件之间重定向,以及实现将多个命令组合起来实现更加强大的命令.这部分涉及到的比较多的命令主要有: 涉及到的比较多的命令主要有: cat:连 ...
- linux——(8)数据流重定向、管道命令
概念一:数据流重定向 数据流分输入流和输出流,还有一个标准错误流,负责管理出错信息,比如一般的命令的输出会输出到屏幕上,我们可以用重定向让他输入到某个文件内. 相关操作: 1,标准输入(stdin): ...
- Linux Shell 重定向与管道【转帖】
by 程默 在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以 ...
- Linux 入门记录:十六、Linux 多命令协作:管道及重定向
一.多命令协作 在 Linux 系统当中,大多数命令都很简单,很少出现复杂功能的命令,每个命令往往只实现一个或多个很简单的功能.通过将不同功能的命令组合一起使用,可以实现某个复杂功能的. Linux ...
- 【Linux】【专项突破】Linux重定向与管道
[专项突破]Linux重定向与管道 This article is written by Xrilang(Chinese Name:萌狼蓝天) If you want find me ,You can ...
- Linux I/O 重定向详解及应用实例
Linux I/O 重定向详解及应用实例 简解 > 输出 < 输入 >> 追加 & [> | < | >>]之前:输入输出; ls /dev & ...
- Linux-I/O重定向和管道
Linux I/O重定向 标准输入(stdin):文件描述符0 标准输入(stdout):文件描述符1 标准错误(stderr):文件描述符2 file descriptors(FD,文件描述符 或 ...
- linux 标准输入输出 重定向
背景: 屏幕打印不一定都是从标准输出来的,也包括标准错误输出流stderr中的信息 文件描述符定义(系统定义了12个) 0 标准输入 1 标准输出 2 标准错误 0 默认键盘输入 1,2默认从屏幕 ...
随机推荐
- Spring Boot 注解之ObjectProvider源码追踪
最近依旧在学习阅读Spring Boot的源代码,在此过程中涉及到很多在日常项目中比较少见的功能特性,对此深入研究一下,也挺有意思,这也是阅读源码的魅力之一.这里写成文章,分享给大家. 自动配置中的O ...
- django框架简介及自定义简易版框架
web应用与web框架本质 概念 什么是web应用程序呢? Web应用程序就一种可以通过互联网来访问资源的应用程序, 用户可以只需要用一个浏览器而不需要安装其他程序就可以访问自己需要的资源. 应用软件 ...
- JS获取当前完整的url地址以及参数的方法
javascript 获取当前 URL 参数的两种方法: //返回的是字符串形式的参数,例如:class_id=3&id=2& function getUrlArgStr(){ var ...
- 2019-2020-1 20199304《Linux内核原理与分析》第三周作业
1.操作系统是如何工作的? 计算机三个法宝(3个关键性的方法机制): 存储程序计算机.函数调用堆栈.中断机制. 1.1堆栈: 在计算机领域,堆栈是一个不容忽视的概念,堆栈是一种数据结构.堆栈都是一种数 ...
- Spring Security OAuth2 Demo —— 授权码模式
本文可以转载,但请注明出处https://www.cnblogs.com/hellxz/p/oauth2_oauthcode_pattern.html 写在前边 在文章OAuth 2.0 概念及授权流 ...
- 【nodejs原理&源码赏析(5)】net模块与通讯的实现
[摘要] Node.js net模块的原理及使用 示例代码托管在:http://www.github.com/dashnowords/blogs 一. net模块简介 net模块是nodejs通讯功能 ...
- 机器学习算法在用户行为检测(UBA)领域的应用
[摘要]最近看到越来越多的安全圈的同学开始关注UBA或者UEBA的相关产品和技术,恰好这一段时也一直在跟进UBA产品的状况,正如Gartner报告所述,最具创新能力的UBA供应商往往都是一些初创公司, ...
- 华为云ModelArts2.0来袭
[摘要] modelarts自发布以来,不断地更新增加新的功能来为AI工程师们带来新的服务,在这次的全联接大会上EI服务产品部总经理贾永利宣布--华为云AI重装升级,并重磅发布一站式AI开发管理平台M ...
- luogu P1712 [NOI2016]区间
题目描述 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x,使得对于每一 ...
- git 使用详解(5)—— get log 查看提交历史
git log 查看 提交历史 在提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,可以使用 git log 命令查看. 接下来的例子会用我专门用于演示的 simplegit 项目,运行下面 ...