1、标准输入和输出
1> 程序:指令+数据(指令服务于数据)
  读入数据:input
  输出数据:output

2> 三种 I/O 设备
  Linux 给程序提供三种 I/O 设备

 标准输入(STDIN) - 默认接受来自键盘的输入
标准输出(STDOUT)- 默认输出到终端窗口
标准错误(STDERR)- 默认输出到终端窗口

3> 把 I/O 重定向至文件
  I/O 重定向:改变默认位置
  标准输出的重定向:可以重定向至不同终端设备,也可以重定向至文件

[root@centos7 ~]#ls >output.txt    # >等同于1>

  标准错误的重定向:
    使用:2>
  >>两个大于号追加
  也可以将正确、错误分开重定向至不同的文件:

[root@centos7 ~]#ls /tmp/ /error >1.txt 2>2.txt

  正确错误混合重定向至一个文件:

[root@centos7 ~]#ls /tmp/ /error >f1 2>&1    # 等同于ls /tmp/ /error %> f1
cmd > log.txt >&  # 正确错误混合重定向
cmd >& > log.txt  # 错误显示,正确重定向
cmd &> log.txt   # 正确错误混合重定向
cmd >log.txt >&   # 正确错误混合重定向

  >重定向即'覆盖';>>即追加

[root@centos7 ~]#ls
anaconda-ks.cfg bin
[root@centos7 ~]#echo "123" > f1 # 输出123重定向至f1(f1不存在则创建)
[root@centos7 ~]#cat f1
123
[root@centos7 ~]#set -C # 禁止覆盖
[root@centos7 ~]#echo "456" > f1
-bash: f1: 无法覆盖已存在的文件
[root@centos7 ~]#echo "456" >| f1 # 强制覆盖
[root@centos7 ~]#cat f1
456
[root@centos7 ~]#set +C # 取消禁止覆盖

  可以将输出信息、垃圾文件重定向至垃圾桶:/dev/null

2、tr命令:转换和删除字符
  tr [OPTION]…SET1 [SET2]
    -c 取字符集的补集
    -d 删除所有属于第一字符集的字符
    -s 压缩字符
    -t 将第一个字符装换为第二个字符

[root@192 ~]#tr 'a-z' 'A-Z'         # 将小写转换为大写
afgbsgsgfdfd # 支持标准输入
AFGBSGSGFDFD # 显示标准输出
[root@centos7 ~]#tr 'abc' '1234' # 前少后多,以前面为准
abcdef
123def
[root@centos7 ~]#tr 'abcd' '123' # 前多后少
abcdef
1233ef
[root@centos7 ~]#tr -t 'abcd' '123' # -t 前多后少
abcdef
123def
[root@centos7 ~]#tr -d abc # 删除
abcdef
def

3、单行重定向

[root@centos7 ~]#cat >test1.txt
aaa # 输入aaa后在另一个终端查看,数据已经写入
bbb
^C
[root@centos7 ~]#

4、多行重定向

[root@centos7 ~]#cat >test2.txt<<EOF
> aaa # 输入aaa,在另一个终端查看数据未写入
> bbb
> EOF # 输入终止词EOF数据写入
[root@centos7 ~]#

5、管道
  管道(使用符号“|”表示)用来连接命令

[标准输出] 2>&1 | [标准输入]           # 使用 2>&1 |,不论正确错误都输出(即|&)

  less:一页一页的查看输入

[root@centos7 ~]#ls -l /etc | less    # 查看/etc下的目录文件,分页显示
......

  mail:通过邮件发送输入

echo “test email” | mail -s “test” user@enample.com

  lpr:把输出发送到打印机

echo “test print” | lpr -P printer_name

  管道中-符号

打包再解压(例):tar -cvf - /home | tar -xvf -

6、实例:运用管道、tr等命令实现1+2+...+100

[root@centos7 ~]#echo {1..100} | tr ' ' '+' | bc    # 输出1-100,用+替换空格,经管道传递给bc计算器
5050
[root@centos7 ~]#seq -s + 1 100 | bc # seq输出序列化的东西,输出1-100,-s指定分隔符
5050

标准 I/O 和管道的更多相关文章

  1. 5-1 标准I/O和管道

    标准I/O和管道 程序:指令+数据 读入数据:Input 输出数据:Output 打开的文件都有一个fd: file descriptor (文件描述符) Linux给程序提供三种 I/O 设备 标准 ...

  2. 初学Linux之标准I/O和管道

    标准输入和输出 程序是由指令+数据组成 程序的数据流有三种: 输入数据流:<–标准输入(stdin),一般默认是键盘 输出数据流:–>标准输出(stdout),一般默认到终端窗口 错误输出 ...

  3. 了解有哪几个C标准&了解C编译管道

    下列哪个不是C标准.参考:C语言标准 小知识:C语言标准的发展 K&R C: 1978年,丹尼斯·里奇(Dennis Ritchie)和布莱恩·科尔尼干(Brian Kernighan)出版了 ...

  4. C语言----管道

    一.管道的概念 管道是一种队列类型的数据结构,它的数据从一端输入,另一端输出.管道最常见的应用是连接两个进程的输入输出,即把一个进程的输出编程另一个进程的输入.shell中存在专门的管道运算符&quo ...

  5. Linux Shell中管道的原理及C实现框架

    在shell中我们经常用到管道,有没考虑过Shell是怎么实现管道的呢? cat minicom.log | grep "error" 标准输入.标准输出与管道 我们知道,每一个进 ...

  6. GoJS研究,简单图表制作。

    话不多说,先上图 我在这个中加入了缩略图.鼠标放大缩小等功能. <!doctype html> <html> <head> <title>Flowcha ...

  7. Node.js规范化应用

    Node.js运行在一个单线程模式,但它使用一个事件驱动范例来处理并发.它还有助于创建子进程,以充分利用并行处理的多核CPU系统. 子进程总是有三个流child.stdin,child.stdout和 ...

  8. Linux & Python 导航目录

    < Python学习手册(第4版)>< Python Cookbook(第2版)>中文版.pdf< Python 高级编程>< Python 基础教程 第二版 ...

  9. 网络技术教程笔记(20)ISDN

    广域网与接入网技术 广域网与接入网技术 常见接入技术--ISDN 综合业务数字网(Integrated Services Digital Network,ISDN)由电话综合数字网IDN演化而成,能够 ...

随机推荐

  1. Docker学习(十)Docker容器编排 Docker-compose

    Docker学习(十)Docker容器编排 Docker-compose 标签(空格分隔): docker 容器编排是什么 应用一般由单独容器化的组件组成,须按照一定顺序在网络级别进行组织,以使其能够 ...

  2. 异数OS 2017 DPDK 峰会观后感

    1.DPDK in Container 使用虚拟网卡设备技术为每一个容器分配一个IP 网卡适配器(queue).容器技术可以解决虚拟机技术中虚拟机过于臃肿,难于热迁移的问题,可能可以代替美团OVS方案 ...

  3. 大叔 Frameworks.Entity.Core 3 Predicate

    Frameworks.Entity.Core\Commons\Predicate\ 1LinqEntity.cs /// IQueryable扩展方法:条件过滤与排序功能    /// Modify ...

  4. QEMU和KVM的关系

    首先KVM(Kernel Virtual Machine)是Linux的一个内核驱动模块,它能够让Linux主机成为一个Hypervisor(虚拟机监控器).在支持VMX(Virtual Machin ...

  5. 论文翻译:Mastering the Game of Go without Human Knowledge (第一部分)

    长久以来,人工智能的一个目标是在那些具有挑战性的领域实现超过人类表现的算法.最近,AlphaGo成为了在围棋上第一个打败了世界冠军的程序.在AlphaGo中,使用深度神经网络来进行树搜索,评估位置,和 ...

  6. SSH(三)

    在Spring中引用属性文件:    优点:        1.防止随意更改jdbc的连接        2.给不懂代码的人使用    步骤:        1.数据库连接信息写在属性文件中      ...

  7. tmobst2

    (单选题)与下面代码效果相同的HQL 语句是( ). Criteria criteria = session.createCriteria(User.class); criteria.add(Rest ...

  8. StringBuffer StringBuilder String 区别

    String       字符串常量   不可变  使用字符串拼接时是不同的2个空间 StringBuffer  字符串变量   可变   线程安全  字符串拼接直接在字符串后追加 StringBui ...

  9. ListFragment 使用ListView and 自定义Adapter

    在开发过程中经常使用Tabs + ListFragment 作为表现形式. ListFragment 中加入ListView显示方式很容易. [java] view plaincopy package ...

  10. VirtualBox 安装ghost版windows XP

    昨天尝试在VirtualBox中安装深度技术的GhostXP SP3 V8.02版本的系统,可是安装过程中出现了问题,无法安装,错误提示如下图: 昨天搞了一会,没有结果,今天对于这个无法安装的问题耿耿 ...