本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程

Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为大家介绍下Shell输入输出重定向的相关知识。

一、Shell输入输出重定向概述

在了解重定向相关知识之前,我们先来看看Linux的文件描述符。

Linux的文件描述符可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作。

用户可以自定义文件描述符范围是:3-max,max跟用户的ulimit –n 定义数字有关系,不能超过最大值。

linux启动后,会默认打开3个文件描述符,分别是:

1)标准输入standard input——0

2)正确输出standard output——1

3)错误输出:error output——2

对于所有运行的Shell命令,都会有默认3个文件描述符。

在一个Shell命令执行时,会先有一个输入:可以从键盘输入,也可以从文件得到

在命令执行完成后:成功了,会把成功结果输出到屏幕,正确输出默认是屏幕。

命令执行有错误:会把错误也输出到屏幕上面,错误输出默认也是指的屏幕。

我们今天介绍的Shell输入输出重定向就是将上面讲的默认的输入输出等重定向到别的位置。

二、Shell输出重定向

Shell输出重定向主要用向右的尖括号来作为符号>,主要有“>”和“>>”两种方式。

格式如下:

command-line1 [1-n] > file或文件操作符或设备
command-line1 [1-n] >> file或文件操作符或设备

当使用“>”时,系统会判断右边文件是否存在,如果存在就先删除,并且创建新文件。不存在则直接创建。因此无论左边命令执行是否成功,右边文件都会变为空。

当使用“>>”操作符时,系统会判断右边文件是否存在,如果不存在,先创建。然后以添加方式打开文件,系统会分配一个文件描述符与左边的标准输出【1】或错误输出【2】绑定。

当命令执行完以后,这条命令绑定文件的描述符也自动失效。0,1,2又会空闲。

当一条命令执行时,命令的输入,正确输出,错误输出,默认会分别绑定0,1,2文件描述符。

一条命令在执行前,先会检查输出是否正确,如果输出设备错误,将不会进行命令执行。

输出重定向的详细说明请看下方表格:

命令格式 命令说明
Command > filename 把标准输出重定向到一个文件中
Command > filename 2>&1 把标准输出和错误一起重定向到一个文件中
Command 2 > filename 把标准错误重定向到一个文件中
Command 2 >> filename 把标准输出重定向到一个文件中(追加)
Command >> filename2>&1 把标准输出和错误一起重定向到一个文件(追加)

三、Shell输出重定向示例

我们还是通过例子来看下Shell下的输出重定向。

示例:

#date > date.txt
#cat date.txt
Thu Jun 2 15:25:20 CST 2016

这条命令将date这个命令的标准输出结果重定向到date.txt中,并且会将date.txt清空。

示例2:

#whoami > date.txt
#cat date.txt
root

这个将whoami的命令重定向到date.txt中,可以看到,之前date.txt中的内容已被删除。

示例3:

#echo "Linuxdaxue.com" >> date.txt
#cat date.txt
root
Linuxdaxue.com

这个命令以追加的方式输出了一个字符串输出重定向到了date.txt,可以看到输出的东西被追加到了文件结尾。

四、Shell输入重定向介绍

Shell输入重定向主要用向左的尖括号(小于号)“<”表示,命令格式如下:

command-line [n] <file或文件描述符&设备

命令默认从键盘获得的输入,重定向后改为从文件,或者其它打开文件以及设备输入。

这样,本来需要从键盘获取输入的命令会转移到文件读取内容。

接下来通过例子来学习下Shell输入重定向。

五、Shell输入重定向示例

示例1:

#cat num.txt
1
2
4
3
5
7
6
8
9
#sort < num.txt
1
2
3
4
5
6
7
8
9

说明:num.txt里有一些数字,然后将num.txt重定向到sort命令的输入端,sort就会对这些数字进行排序,然后输出。

六、Shell其他重定向

上文中已经说到,Linux文件描述符中,2代表标准错误。现在讲下如何将标准错误进行重定向。

使用方法:

command > out.put 2>&1
将command执行的标准输出和标准错误重定向到out.put(也就是说不管command执行正确还是错误,输出都打印到out.put)。

还可以将错误输出重定向到/dev/null,意思是丢弃这部分输出,如下:

command 2> /dev/null
如果command执行出错,将错误的信息重定向到空设备(忽略掉错误输出)

以上就是Shell输入输出重定向的相关介绍,大家需要多多练习,争取熟练掌握。

更多Linux Shell教程请看:Linux Shell系列教程

Linux Shell系列教程之(十六) Shell输入输出重定向的更多相关文章

  1. Linux Shell系列教程之(六)Shell数组

    本文是Linux Shell系列教程的第(六)篇,更多shell教程请看:Linux Shell系列教程 Shell在编程方面非常强大,其数组功能也非常的完善,今天就为大家介绍下Shell数组的用法. ...

  2. Spring Boot2 系列教程(二十六)Spring Boot 整合 Redis

    在 Redis 出现之前,我们的缓存框架各种各样,有了 Redis ,缓存方案基本上都统一了,关于 Redis,松哥之前有一个系列教程,尚不了解 Redis 的小伙伴可以参考这个教程: Redis 教 ...

  3. Linux系列教程(十六)——Linux权限管理之ACL权限

    通过前面的两篇博客我们介绍了Linux系统的用户管理,Linux用户和用户组管理之相关配置文件 讲解了用户管理的相关配置文件,包括用户信息文件/etc/passwd,用户密码文件/etc/shadow ...

  4. FL studio系列教程(十六):FL Studio查看菜单讲解

    FL Studio中每个窗口的显示.隐藏和布局命令都在查看菜单中.其中它被分为窗口.布局和浏览器3个部分,各项名称都有其单独的作用.窗口部分主要是软件的显示的一些菜单这里就不详细讲解了,接下来我们重点 ...

  5. guitar pro系列教程(十六):Guitar Pro如何编辑琵音

    上一章节我们讲了播放没有声音的解决,本章节我们通过图文结合的方式为大家讲解使用Guitar Pro如何来编辑琵音,有兴趣的朋友可以一起来学习哦. 首先我们要先搞明白什么事吉他的琵音. 其实吉他琶音就是 ...

  6. (转)Linux Shell系列教程之(十四) Shell Select教程

    本文属于<Linux Shell 系列教程>文章系列,该系列共包括以下 18 部分: Linux Shell系列教程之(一)Shell简介 Linux Shell系列教程之(二)第一个Sh ...

  7. Linux Shell系列教程

    学习Linux Shell知识,就来Linux大学网(Linuxdaxue.com)! 本系列适合Linux初学者,属于Linux入门级教程,主要介绍了Shell的分类.语法格式以及脚本的使用和编写格 ...

  8. Spring Boot2 系列教程(三十)Spring Boot 整合 Ehcache

    用惯了 Redis ,很多人已经忘记了还有另一个缓存方案 Ehcache ,是的,在 Redis 一统江湖的时代,Ehcache 渐渐有点没落了,不过,我们还是有必要了解下 Ehcache ,在有的场 ...

  9. Linux Shell系列教程之(十五) Shell函数简介

    本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...

随机推荐

  1. 99 Lisp Problems 二叉树(P54~P69)

    P54A (*) Check whether a given term represents a binary tree Write a predicate istree which returns ...

  2. npoi与memcached中的ICSharpCode.SharpZipLib版本冲突的解决方案

    项目中一直使用NPOI与memcached,一直相安无事,但是最近升级了npoi到最新版本,发生了ICSharpCode.SharpZipLib的版本冲突问题. 因为此前一直使用的是NPOI的1.x的 ...

  3. SQL数据库对于保存特殊字符的解决办法

    数据库的Char.Vachar类型可以兼容汉字,但特殊字符不行,在保存包含有特殊字符的字符串.正文时,会将特殊符号替换成一个”?”号. 例如: “基础教育课程手机报•特刊” == > “基础教育 ...

  4. 深入浅出MySQL 数据库开发、优化与管理维护(第2版) -- 读书笔记 -- 基础篇

      1.切换数据库 use blog; 2.显示当前数据库 所有的表. show tables; +----------------+ | Tables_in_blog | +------------ ...

  5. easyui menubutton combobox 被遮盖问题

    如图一所示,menubutton 中的 combobox 被遮盖 z-Index 不够.这是作者给出的解决方案 <a href="#" class="easyui- ...

  6. VC文件夹大小(转)

    使用自带的类 CFileFind finder.FindNextFile();  遍历所有文件,按照修改时间顺序遍历 //参数输入 文件夹路径 //返回文件夹大小 byte DWORD GetDirS ...

  7. 听声辨位识DUMP

    要处理的dump成千上万,每个都用眼睛去看也太累了,不如用耳朵听好了.相信经过一段时间适应,一定可以做到凭听就解决dump分析.(逃 DumpMusican 这个小exe只需要把dump路径作为参数传 ...

  8. vmware workstation11+centos7+lnmp一键安装包 环境搭建

    vmware workstation11 1.下载:http://pan.baidu.com/s/1gecipOJ 2.安装:直接下一步. centos7 1.下载:网易镜像 http://mirro ...

  9. 【HTML】Iframe中的onload事件

    当iframe.src重新指定一个url时会重新执行iframe的onload事件 <iframe id="indexFrame" name="index" ...

  10. Web 项目可能会用到的20款优秀的开源工具

    开源的应用程序和它们的源代码可以免费获得,因为版权是属于任何进行过修改或者提交代码的人.大多数提供开源软件的公司都可以建立行业标准,因此可以获得有利的竞争优势. 很多的开源应用程序和工具都有很强的替代 ...