一、多命令协作

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

Linux 中几乎所有命令的返回数据都是纯文本的(因为每个命令都是运行在 CLI 下),而纯文本形式的数据又是绝大多数命令的输入格式,这就让多命令协作成为可能。

Linux 的命令行提供了管道和重定向机制,多命令协作就是通过管道和重定向完成的。

二、标准流

对于一个终端而言,可能要处理各种类型的数据,int 型、float 型、double 型、char 型、string 型,甚至是一个文本文件,终端更重视数据本身的内容,无视这些数据的类型而着重于他们的内容,将它们抽象为一个“流”(Stream)的概念。数据流一般也称 I/O 流。

每一个终端几乎都会有数据流的 I/O(输入输出),普遍地,基于流的走向和用途有输入流、输出流、错误流、文件流等等,而一般地,有 3 个默认的标准流:

名称 说明

编号

(文件描述符)

默认设备
STDIN 标准输入流 0 键盘
STDOUT 标准输出流 1 终端
STDERR 标准错误刘 2 终端

STDIN 表示标准输入流 ,一般默认是键盘,文件描述符为 0。 STDOUT 和 STDERR 分别表示标准输出流和标准错误流,一般默认是终端,文件描述符分别为 1 和 2。

三、管道和重定向

1. 重定向

重定向可以将 I/O 流定向(关联)到文件,而不是默认的终端。重定向通常用来将某命令的输出或错误信息保存到一个指定的文件中。

常见的操作符有以下几个:

>       将STDOUT重定向到文件(覆盖)
>> 将STDOUT重定向到文件(追加)
2> 将STDERR重定向到文件(覆盖)
2>&1 将STDERR和STDOUT重定向到文件(覆盖)
< 将STDIN重定向到文件

示例:

echo Hello,Linux > echo.md     打印一段语句,输出到文件
echo cnblogs.com >> echo.md 打印一段语句,追加到文件
ls noexist 2> ls.md 列出目录,将错误信息输出到文件
ls noexist 1> a.md 2>&1 列出目录、输出到文件,并把错误信息合并到标准输出(也输出到文件)
cat > output.md < input.md input.md文件作为标准输入,output.md作为标准输出

2. 管道

管道操作可以实现将一个命令的输出作为另一个命令的输入。管道通常用来组合不同的命令,以实现一个复杂的功能。

操作符:

|   将一个命令的STDOUT作为另一个命令的STDIN

示例:

ls -ld . | cat > ls.md     列出目录信息并输出到文件

  

参考链接:

Linux输入输出错误重定向

linux shell数据重定向(输入重定向与输出重定向)详细分析

Linux 入门记录:十六、Linux 多命令协作:管道及重定向的更多相关文章

  1. Linux基本配置和管理 2 ---- Linux多命令协作----管道及重定向

    1 管道和重定向 1 在Linux中大多数命令都很简单,很少出现复杂的命令,每个命令只是实现一个简单的功能,我们可以通过组合不同的命令来实现复杂的功能 2 在Linux中几乎所有的命令返回的数据都是纯 ...

  2. Linux 入门记录:六、Linux 硬件相关概念(硬盘、磁盘、磁道、柱面、磁头、扇区、分区、MBR、GPT)

    一.硬盘 硬盘的功能相当简单但很重要,它负责记录系统所需要的各种数据.硬盘记录数据有两个方面,一个是硬件方面的存储原理和结构,另外一方面则是软件方面的数据和文件系统.硬盘的主要行为就是数据的存放和取出 ...

  3. Linux学习之十六-Linux用户管理

    Linux用户管理 Linux系统跟Windows系统一样,可以创建不同的用户,不同的用户组.在不同用户下使用系统具有相应的权限 创建一个普通用户时,会修改几个文件,拷贝一些初始文件到用户家目录中 修 ...

  4. Linux 入门记录:二十、Linux 包管理工具 YUM

    一.YUM(Yellowdog Updater, Modified) 1. YUM 简介 RPM 软件包形式管理软件虽然方便,但是需要手动解决软件包的依赖问题.很多时候安装一个软件首先需要安装 1 个 ...

  5. Linux学习之十四、管线命令

    Linux学习之十四.管线命令 地址:http://vbird.dic.ksu.edu.tw/linux_basic/0320bash_6.php

  6. Linux入门基础教程之Linux下软件安装

    Linux入门基础教程之Linux下软件安装 一.在线安装: sudo apt-get install 即可安装 如果在安装完后无法用Tab键补全命令,可以执行: source ~/.zshrc AP ...

  7. 无废话ExtJs 入门教程十六[页面布局:Layout]

    无废话ExtJs 入门教程十六[页面布局:Layout] extjs技术交流,欢迎加群(201926085) 首先解释什么是布局: 来自百度词典的官方解释:◎ 布局 bùjú: [distributi ...

  8. Bootstrap入门(十六)组件10:well和具有响应式特性的嵌入内容

    Bootstrap入门(十六)组件10:well和具有响应式特性的嵌入内容 well组件可以为内容增添一种切入效果. 具有响应式特性的嵌入内容可以根据被嵌入内容的外部容器的宽度,自动创建一个固定的比例 ...

  9. MyBatis基础入门《十六》缓存

    MyBatis基础入门<十六>缓存 >> 一级缓存 >> 二级缓存 >> MyBatis的全局cache配置 >> 在Mapper XML文 ...

  10. Inno Setup入门(十六)——Inno Setup类参考(2)

    Inno Setup入门(十六)——Inno Setup类参考(2) http://379910987.blog.163.com/blog/static/33523797201112755641236 ...

随机推荐

  1. [计算机网络] DNS何时使用TCP协议,何时使用UDP协议

    DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类.但很少有人知道DNS分别在什么情况下使用这两种协议. 先简单介绍下TCP与UDP. ...

  2. 在mvc返回JSON时出错:序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用 的解决办法

    在MVC中返回JSON时出错,序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用. public ActionResul ...

  3. Runtime介绍

    本文目录 1.Runtime简介 2.Runtime相关的头文件 3.技术点和应用场景 3_1.获取属性\成员变量列表 3_2.交换方法实现 3_3.类\对象的关联对象,假属性 3_4.动态添加方法, ...

  4. FTP-Server

    1.目录: 2. ftp_client.py import socket,os,json client=socket.socket() client.connect(('localhost',9999 ...

  5. 个人vim配置

    YouCompletMe支持golang cd .vim/bundle/YouCompleteMe ./install.sh --clang-completer --go-completer clan ...

  6. BZOJ4943 & 洛谷3823 & UOJ315:[NOI2017]蚯蚓排队——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4943 http://uoj.ac/problem/315 https://www.luogu.or ...

  7. BZOJ1012:[JSOI2008]最大数——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=1012 https://www.luogu.org/problemnew/show/P1198 现在 ...

  8. BZOJ3196 & 洛谷3380:二逼平衡树——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3196 https://www.luogu.org/problemnew/show/P3380 (题 ...

  9. 【贪心】【UVA10905】 Children's Game

    传送门 Description 给定n个正整数,求他们相连接后能形成的最大整数.例如:12,23这两个数能连接的最大数是2312,. Input 多组数据,每组数据中: 第一行为一个整数n 第二行有n ...

  10. stout代码分析之四:Try类

    stout的在异常捕获上遵循于谷歌类似的原则,不适用try...catch...,而是从函数返回值判断异常.Try类正是实现了这样的一个功能. 同Option一样,Try是一个模板类,每个类对象都有两 ...