1、shell重定向概念:shell重定向包含输出重定向和输入重定向

何为输入输出方向?何为标准输入输出方向?

标准输入方向:从键盘读取用户输入的数据,然后再把数据拿到程序(C语言程序、Shell 脚本程序等)中使用;这就是标准的输入方向,也就是从键盘到程序。

标准输出方向:相反,程序运行产生的数据一般都是直接呈现到显示器上,这就是标准的输出方向,也就是从程序到显示器。

其实,输入输出方向就是数据流动的方向,那么

输入重定向就是改变程序数据的来源的

输出重定向就是改变程序输出屏幕到其他地方

2、硬件设备和文件描述符

计算机硬件有很多,常见的输入设备有键盘、鼠标、麦克风、手写板等,输出设备有显示器、投影仪、打印机等。不过,在 Linux 中,标准输入设备指的是键盘,标准输出设备指的是显示器

同时,Linux 中一切皆文件,包括标准输入设备(键盘)和标准输出设备(显示器)在内的所有计算机硬件都是文件,为了表示和区分已经打开的文件,Linux 会给每个文件分配一个 ID,这个 ID 就是一个整数,被称为文件描述符(File Descriptor)。

与输入输出有关的文件描述符
文件描述符 文件名 类型 硬件
0 stdin 标准输入 键盘
1 stdout 标准输出 显示器
2 stderr 标准错误输出 显示器

Linux 程序在执行任何形式的 I/O 操作时,都是在读取或者写入一个文件描述符。一个文件描述符只是一个和打开的文件相关联的整数,它的背后可能是一个硬盘上的普通文件、FIFO、管道、终端、键盘、显示器,甚至是一个网络连接

3、Shell输出重定向

表2:Bash 支持的输出重定向符号
类 型 符 号 作 用
标准输出重定向 命令 > 文件 以覆盖的方式,把命令的正确输出结果输出到指定的文件或设备中。
命令 >> 文件 以追加的方式,把命令的正确输出结果输出到指定的文件或设备中。
标准错误输出重定向 命令 2> 文件 以覆盖的方式,把命令的错误信息输出到指定的文件或设备中。
命令 2>> 文件 以追加的方式,把命令的错误信息输出到指定的文件或设备中。
正确输出和错误信息同时保存 命令 > 文件 2> &1 以覆盖的方式,把正确输出和错误信息同时保存到同一个文件中。
命令 >> 文件 2> &1 以追加的方式,把正确输出和错误信息同时保存到同一个文件中。
命令 &> 文件 以覆盖的方式,把正确输出和错误信息同时保存到同一个文件中。
命令 &>> 文件 以追加的方式,把正确输出和错误信息同时保存到同一个文件中。
命令 >> 文件1  2>> 文件2 把正确的输出追加到文件1中,把错误信息追加到文件2中。

在输出重定向中,>代表的是覆盖,>>代表的是追加。

注意,在类似命令 2> 文件这样的写法中,2是文件描述符,它对应的是 stderr。

对于重定向中的标准输出文件,可以省略文件描述符 1 不写,而标准错误输出文件,必须要写上文件描述如 2。如果你愿意,也可以将命令 > 文件写作命令 1> 文件,但这样做是多此一举。

另外还要注意,2>之间不能有空格,也就是说,不能将命令 2> 文件写作命令 2 > 文件

使用案例可查看https://www.cnblogs.com/clarenceyang/p/9837352.html

4、Shell输入重定向

输入重定向就是改变输入的方向,不再使用键盘作为命令输入的来源,而是使用文件作为命令的输入

Bash 支持的输出重定向符号
符号 说明
命令 < 文件 将指定的文件作为命令的输入。
命令 << 分界符 从标准输入(键盘)中读取数据,直到遇见分界符才停止。
命令 < 文件1 > 文件2 将文件1作为命令的输入,并将命令的处理结果输出到文件2。
统计 readme.txt 文件中有多少行文本:
[c.biancheng.net]$ cat readme.txt #预览一下文件内容
C语言中文网
http://c.biancheng.net/
成立7年了
日IP数万
[c.biancheng.net]$ wc -l < readme.txt #输入重定向

实例1

#!/bin/bash

while read str; do
echo $str
done < readme.txt
运行结果:
C语言中文网
http://c.biancheng.net/
成立7年了
日IP数万

实例2

我们使用输入重定向符号<<,这个符号的作用是使用特定的分界符作为命令输入的结束标志,而不使用 Ctrl+D 键。

[c.biancheng.net]$ wc -l << END
>
>
> abc
> xyz
> END
4
wc 命令会一直等待用输入,直到遇见分界符 END 才结束读取

linux之重定向命令的更多相关文章

  1. Linux中重定向命令行

    http://www.ahlinux.com/start/base/3170.html

  2. Linux重定向命令

    linux重定向命令应用及语法  [复制链接]   发表于 2008-12-18 18:24 | 来自  51CTO网页 [只看他] 楼主     1. 标准输入的控制语法:命令 文件将命令的执行结果 ...

  3. Linux输入输出重定向和文件查找值grep命令

    Linux输入输出重定向和文件查找值grep命令 一.文件描述符Linux 的shell命令,可以通过文件描述符来引用一些文件,通常使用到的文件描述符为0,1,2.Linux系统实际上有12个文件描述 ...

  4. Linux 重定向命令有哪些?有什么区别?

    1.重定向>Linux 允许将命令执行结果重定向到一个文件,本应显示在终端上的内容保存到指定文件中.如:ls >test.txt ( test.txt 如果不存在,则创建,存在则覆盖其内容 ...

  5. linux 之管道命令与重定向

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

  6. linux 重定向命令

    标准输入,输出和错误 --------------------------------- 文件文件                描写叙述符 ----------------------------- ...

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

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

  8. Linux下who命令之C语言实现

    Linux下who命令之C语言实现 Step1:前期准备 首先要有一个清楚的认识:linux中一切皆文件 实现who命令,who命令也是Linux中的一个文件,那我们怎么找到它呢?我们可以" ...

  9. Linux中exec命令相关

    Linux中exec命令相关 exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. b ...

随机推荐

  1. Docker的网络类型和固定IP设置

    Docker的网络机制 Docker的网络有三种类型(driver): bridge, host 和 null. birdge: 就如同桥接的switch/hub, 使用bridge网络的contai ...

  2. goaccess geoip 测试

      goaccess 是一个很不错的日志实时统计分析工具,我们可以用来方便的分析nginx apcahe iis 等的日志信息 对于geoip 的支持是需要源码编译的,所以基于官方docker 镜像添 ...

  3. zombodb 数据类型映射

    zombodb 与es 数据类型的映射处理 通用数据类型映射 Postgres 类型 Elasticsearch JSON 映射定义 bytea {"type": "bi ...

  4. fullCalendar使用经验总结

    fullCalendar日历控件官方网址: https://fullcalendar.io/ 1.需要引入的文件 <link href="~/assets/fullcalendar-3 ...

  5. redis 双写一致性 看一篇成高手系列1

    首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用.在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作. 但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存.又或者 ...

  6. 配置jboss为windows服务

    先确保jdk和jboss的环境变量是正常可用的 1.(下载binaries 2.x.x-windows x86)找到service.bat和jbosssvc.exe两个文件 1.1 binaries ...

  7. jenkins使用(ubuntu16.0环境)

    本文总结了使用jenkins过程.大部分是网上链接,以后自已查看使用. ssh远程链接服务器 检查是否开启ssh   ps -ef|grep ssh 1.安装ssh 2.开启root用户 3.充许ro ...

  8. threading模块小结

    这篇文章是别人文章的一个观后小结,不是什么原创. 首先第一个例子: import threading import time def worker():     print "worker& ...

  9. 自己动手,丰衣足食!Python3网络爬虫实战案例

    本教程是崔大大的爬虫实战教程的笔记:网易云课堂 Python3+Pip环境配置 Windows下安装Python: http://www.cnblogs.com/0bug/p/8228378.html ...

  10. mysqli字符编码

    mysqli 字符编码: 汉字编码: 1.gbk 最久的编码格式,不能写繁体: 2.国内的gb2312: 3.国际的标准:utf-8; 查看数据库的字符编码: show variables like ...