一,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

    不支持文件作为参数的命令,必须明确使用<,才能够重定向输入。比如tr

    tr命令用途:替换或者删除特定的字符

    语法: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重定向及管道的更多相关文章

  1. linux输入输出、重定向、管道

    本篇讲述linux系统的输入输出.管道和重定向. 1. liunx的输入输出 一个linux系统要想发挥作用,就要有输入输出,这样才可以与外界交互. 类型 设备文件名 文件描述符 设备名称 说明 备注 ...

  2. LINUX常用命令--重定向、管道篇(四)

    一.Linux重定向 重定向能够实现Linux命令的输入输出与文件之间重定向,以及实现将多个命令组合起来实现更加强大的命令.这部分涉及到的比较多的命令主要有: 涉及到的比较多的命令主要有: cat:连 ...

  3. linux——(8)数据流重定向、管道命令

    概念一:数据流重定向 数据流分输入流和输出流,还有一个标准错误流,负责管理出错信息,比如一般的命令的输出会输出到屏幕上,我们可以用重定向让他输入到某个文件内. 相关操作: 1,标准输入(stdin): ...

  4. Linux Shell 重定向与管道【转帖】

    by 程默 在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以 ...

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

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

  6. 【Linux】【专项突破】Linux重定向与管道

    [专项突破]Linux重定向与管道 This article is written by Xrilang(Chinese Name:萌狼蓝天) If you want find me ,You can ...

  7. Linux I/O 重定向详解及应用实例

    Linux I/O 重定向详解及应用实例 简解 > 输出 < 输入 >> 追加 & [> | < | >>]之前:输入输出; ls /dev & ...

  8. Linux-I/O重定向和管道

    Linux I/O重定向 标准输入(stdin):文件描述符0 标准输入(stdout):文件描述符1 标准错误(stderr):文件描述符2 file descriptors(FD,文件描述符 或 ...

  9. linux 标准输入输出 重定向

    背景: 屏幕打印不一定都是从标准输出来的,也包括标准错误输出流stderr中的信息 文件描述符定义(系统定义了12个) 0 标准输入 1 标准输出 2 标准错误   0 默认键盘输入 1,2默认从屏幕 ...

随机推荐

  1. P1046 陶陶摘苹果

    题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出1010个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个3030厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在 ...

  2. React - 组件:类组件

    目录: 1. 类组件有自己的状态 2. 继承React.Component-会有生命周期和this 3. 内部需要一个render函数(类组件会默认调用render方法,但不会默认添加,需要手动填写r ...

  3. 基于SpringBoot+Netty实现一个自己的推送服务系统

    目标 实现一个WebSocket服务中心,支持水平扩展 技术栈 SpringBoot.Netty.JDK8.MySQL.Redis.RabbitMQ.MyBatis-Plus 环境搭建 主要功能点说明 ...

  4. #华为云·寻找黑马程序员#微服务-你真的懂 Yaml 吗?

    在Java 的世界里,配置的事情都交给了 Properties,要追溯起来这个模块还是从古老的JDK1.0 就开始了的. "天哪,这可是20年前的东西了,我居然还在用 Properties. ...

  5. 转:ETL讲解(很详细!!!)

    ETL讲解(很详细!!!) ETL是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提供分析依据. ETL是BI项目重要 ...

  6. Node.js 中 __dirname 和 ./ 的区别

    概要 __dirname 总是指向被执行 js 文件的绝对路径 在 /d1/d2/myscript.js 文件中写了 __dirname, 它的值就是 /d1/d2 . ./ 会返回你执行 node ...

  7. Asp.net Core 异常日志与API返回值处理

    需求: 1.对异常进行捕获记录日志 并且修改返回值给前端 解释: ILogger4是自定义的一个日志,更改它就好 解决方案1: 使用中间件进行异常捕获并且修改其返回值 public class Err ...

  8. CYPRESS最新的USB3.0控制器

    CYPRESS近日发布了其最新的USB3.0控制器,产品序号为CX3,主要是针对高像素摄像头方面的应用,接口支持MIPI的CSI-2,并不支持传统的基于并口的数据传输模式. MIPI(Mobile I ...

  9. Linux—cat

    cat:查看文件内容 cat -A: 显示文件中一些比较特殊的符号,如行尾的$ cat -n:  显示行号包括空白行 cat -b:  显示行号不包括空白行

  10. Python3 面向对象进阶2

    目录 Classmethod Staticmethod Isinstance Issubclass 反射 概念 hasattr getattr setattr delattr 魔法方法 概念 __ne ...