重定向命令其实用得不少吧,只是重来都没有仔细看过,这波正好又用到 又有空总结一波。

先看>和>>:

他们俩其实唯一的区别就是>是重定向到一个文件,>>是追加内容到文件。两个命令都是如果文件不存在则创建文件。举个例子来看看:

(thrift_rpc)piperck➜  Desktop  ᐅ  ll >> .txt
(thrift_rpc)piperck➜ Desktop ᐅ ll | grep .txt
-rw-r--r-- piperck staff .8K Dec : .txt

可以看到可以将ll的输出 重定向到123.txt中, >也是同样的效果。只是如果使用>执行重定向的位置没有这个文件

(thrift_rpc)piperck➜  Desktop  ᐅ  ls > /poweqpikp/
zsh: no such file or directory: /poweqpikp/
(thrift_rpc)piperck➜ Desktop ᐅ ls >> /poweqpikp/
zsh: no such file or directory: /poweqpikp/
(thrift_rpc)piperck➜ Desktop ᐅ ls >
(thrift_rpc)piperck➜ Desktop ᐅ ls >>

但是如果你重定向的是没有的文件夹里面的文件,那么文件夹他是不会帮你创建的,所以会报出错误,这点要注意。

然后是 1>、 2>、 1>>、 2>>的使用,

当我们需要把一个文件正确的输出,和错误的输出分开保存的时候就能用到他们啦。让我用一个简单的python脚本来做一个实验

python脚本如下

# coding: utf-8

if __name__ == '__main__':
print 'gogogog'
int('qiowjeioqwjeo')

该脚本会正确执打印gogogog 然后 报出下面强转的错误。

(thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1> right.txt 2> wrong.txt
(thrift_rpc)piperck➜ py_pra ᐅ ls
NS8A_client gevent pp.py starcraft2
baidu_phoneassist laplace_pra right.txt wrong.txt
(thrift_rpc)piperck➜ py_pra ᐅ cat right.txt
gogogog
(thrift_rpc)piperck➜ py_pra ᐅ cat wrong.txt
Traceback (most recent call last):
File "pp.py", line 6, in <module>
int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'

可以看到,正确的输出被保存进了right.txt 而错误的输出被重定向到了wrong.txt 。

那么如果我们不区分1>2>这样的重定向规则,运行结果会被保存成什么样子呢?

(thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py > pp.txt
Traceback (most recent call last):
File "pp.py", line 6, in <module>
int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'
(thrift_rpc)piperck➜ py_pra ᐅ cat pp.txt
gogogog

可以看到只保存了正确的结果,错误的信息被打印到标准输出上面。

那如果我们想让错误和正确的结果都被重定向到同一个文件又应该怎么做呢。

(thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1> ppp.txt 2>&1
(thrift_rpc)piperck➜ py_pra ᐅ cat ppp.txt
gogogog
Traceback (most recent call last):
File "pp.py", line 6, in <module>
int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'

可以看到,我们将错误也重定向到和1相同的文件 就实现了这个需求。

同理1>> 2>>其实也就是追加数据到文件中,和前面介绍的> >>没有什么不同,需要提到的一点是,如果我们想将错误的和正确的信息重定向追加到同一个文件应该怎么做呢?你可能会想到2>>&1。。。然而现实是,并没有这个语法。

然而我们却可以使用1>>pp.txt 2>&1的语法实现这个功能

(thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1>> pp.txt 2>&1
(thrift_rpc)piperck➜ py_pra ᐅ cat pp.txt
gogogog
gogogog
Traceback (most recent call last):
File "pp.py", line 6, in <module>
int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'
gogogog
Traceback (most recent call last):
File "pp.py", line 6, in <module>
int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'

可见看似1> 1>> 2> 2>>是相一一对应的,但是其实不是,他们可以混用,比方说正确的结果想追加,错误的结果我想覆盖。

(thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1>>right.txt 2>wrong.txt
(thrift_rpc)piperck➜ py_pra ᐅ cat right.txt
gogogog
(thrift_rpc)piperck➜ py_pra ᐅ cat wrong.txt
Traceback (most recent call last):
File "pp.py", line 6, in <module>
int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'
(thrift_rpc)piperck➜ py_pra ᐅ python pp.py 1>>right.txt 2>wrong.txt
(thrift_rpc)piperck➜ py_pra ᐅ cat right.txt
gogogog
gogogog
(thrift_rpc)piperck➜ py_pra ᐅ cat wrong.txt
Traceback (most recent call last):
File "pp.py", line 6, in <module>
int('qiowjeioqwjeo')
ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'

类似这种组合混用的情况,相对来说也不少见。也可以看出重定向标识的灵活性。

那么如果我们想保存正确的结果,错误的结果直接丢向垃圾站,既不保存为文件,也不在标准输出打印又该怎么做呢?

(thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1>>right.txt 2>/dev/null
(thrift_rpc)piperck➜ py_pra ᐅ cat right.txt
gogogog
gogogog
gogogog

直接将错误输出重定向到/dev/null 就好了,他就像一个无底洞,丢进去的东西就不见了。

那么<又是什么意思呢?<可以将原本由标准输入改为由指定地方输入举个例子就明白了:

(thrift_rpc)piperck➜  py_pra  ᐅ  vi hh
(thrift_rpc)piperck➜ py_pra ᐅ >> txt.py < hh
(thrift_rpc)piperck➜ py_pra ᐅ cat txt.py
qwejqwoijeoq

灵活使用重定向标识符 将极大方便我们日常对系统的操作,和灵活控制脚本的运作,所以一定要掌握哟!

Reference:

http://blog.chinaunix.net/uid-298599-id-2443108.html   Linux - 命令重定向

linux命令重定向>、>>、 1>、 2>、 1>>、 2>>、 <的更多相关文章

  1. Linux - 命令重定向

    命令重定向, 就是将目前得到的数据转移到指定的地方.分为以下几种: >>>1>2>1>>2>>< 1. > 与 >>先看一 ...

  2. linux命令重定向>、>>、 1>、 2>、 1>>、 2>>、 <(转)

    原文章地址:https://www.cnblogs.com/piperck/p/6219330.html >和>>: 他们俩其实唯一的区别就是>是重定向到一个文件,>&g ...

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

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

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

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

  5. linux 命令 htop & 重定向 top, bashrc文件

    最近在用linux服务器跑程序,有几条linux命令还蛮重要的,总结一下: 1. 直接跑代码: python test.py 2. 若想程序在后台跑,即使本地和服务器断开也能运行: nohup pyt ...

  6. Linux命令之文件重定向2

    linux中重定向用符号“>”表示,语法一般是 源文件 > 目标文件 1)创出.txt文件touch 1.txt 注意:创建文件夹用mkdir 2)向.txt文件中写入内容 注意:①cat ...

  7. Linux命令- echo、grep 、重定向、1>&2、2>&1的介绍

    最近笔试遇到一道题,关于Linux命令的,题目如下 下面两条命令分别会有怎样的输出 echo  hello 1>&2 |grep aaa echo  hello 2>&1 ...

  8. Linux入门之常用命令(6)Bash命令重定向 管线命令

    命令重定向 将目前所得数据转移到其他地方 >  将输出结果导入文件 如  ls -l / >test     (1)若test文件不存在则创建 (2)若test文件存在 清空后写入 > ...

  9. Linux实战教学笔记04:Linux命令基础

    第四节:Linux命令基础 标签(空格分隔):Linux实战教学笔记 第1章 认识操作环境 root:当前登陆的用户名 @分隔符 chensiqi:主机名 -:当前路径位置 用户的提示符 1.1 Li ...

随机推荐

  1. globals和locals的区别

    Python的两个内置函数,locals 和globals,它们提供了基于字典的访问局部和全局变量的方式. 1.locals()是只读的.globals()不是.这里说的只读,是值对于原有变量的只读. ...

  2. centos7-软件安装-jdk1.8

    JDK1.8下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装目录 ...

  3. Ubuntu16.04安装Truffle和TestRPC

    系统环境 Ubuntu16.04;   NodeJS: v6.10.2;    NPM: 3.10.10: Truffle: 2.0.8; TestRPC: 3.0.5 安装步骤 注意:以root用户 ...

  4. [转]Oracle left join \ right join

    select 1 from a,b where a.id=b.id(+) 等同于 a left join b on a.id=b.id select 1 from a,b where a.id(+)= ...

  5. python网页爬虫开发之五-反爬

    1.头信息检查是否频繁相同 随机产生一个headers, #user_agent 集合 user_agent_list = [  'Mozilla/5.0 (Windows NT 6.1; WOW64 ...

  6. python学习笔记_week28

    heap import heapq import random heap = [] data = list(range(10000)) random.shuffle(data) # for num i ...

  7. 最近面试 Java 后端的感受!

    来源:cnblogs.com/JavaArchitect/p/10011253.html 上周,密集面试了若干位Java后端候选人,工作经验在3到5年间.我的标准其实不复杂: 第一能干活,第二Java ...

  8. MySQL索引原理及优化

    一.各种数据结构介绍 这一小节结合哈希表.完全平衡二叉树.B树以及B+树的优缺点来介绍为什么选择B+树. 假如有这么一张表(表名:sanguo): (1)Hash索引 对name字段建立哈希索引: 根 ...

  9. jquery.validate和jquery.form配合实现验证表单后AJAX提交

    基础代码其实很简单,之后一点一点扩充.最终代码写在最后. 表单: <form action="@Url.Action("AddColumns","Cont ...

  10. Netty4.0源码解析 NioServerSocketChannel

    一.引言Netty的Channel在JDK NIO的Channel基础上做了一层封装,提供了更多的功能.Netty的中的Channel实现类主要有:NioServerSocketChannel(用于服 ...