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

先看>和>>:

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

(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. 常用http/https以及socks5代理总结

    代理 格式 # 设置http代理 export http_proxy= # 设置https代理 export HTTPS_PROXY= # 设置ftp代理 export FTP_PROXY= # 同时 ...

  2. solr6.4.1搜索引擎(3)增量同步mysql数据库

    尚未实现首次同步mysql数据库的,请参考我的另一篇文章http://www.cnblogs.com/zhuwenjoyce/p/6512378.html(solr6.4.1搜索引擎同步mysql数据 ...

  3. 数据库SQL语言学习----左外连接,右外连接,外连接,自然连接的形象对比

    现在有两张表,一张Student 另一张Score   1.查询每个学生及其选修课程的情况: 自然连接,Sno在Cscore中找不到就不显示,Cno在Cscore中找不到也不显示 SELECT Stu ...

  4. access数据库编号转换成统一3位数长度方法,不足3位前面补零

    select C_CUN+Format(Val(NZ(C_LB)),"000") from LBM 这条SQL只能在access数据库中执行,因为sql不支持NZ函数,而且c_lb ...

  5. MySQL安全机制 DDL DCL

    一.MySQL用户管理 1. 修改用户密码 ===root修改自己密码=== 方法一: # mysqladmin -uroot -p'123' password 'new_password' //12 ...

  6. mysql相关碎碎念

    取得当天: SELECT curdate(); mysql> SELECT curdate();+------------+| curdate()  |+------------+| 2013- ...

  7. redis消息通知(任务队列/优先级队列/发布订阅模式)

    1.任务队列 对于发送邮件或者是复杂计算这样的操作,常常需要比较长的时间,为了不影响web应用的正常使用,避免页面显示被阻塞,常常会将此类任务存入任务队列交由专门的进程去处理. 队列最基础的方法如下: ...

  8. uva-10041-水题

    题意:有个人想找到个房子住,并且他经常去其他街道,输入n条街,给这个人选择一条街,使得他去其他街道的距离总和最小. 排序,双重for #include <string> #include& ...

  9. C# String 与 StringBuilder

    String 字符串不可变性,每次为字符串进行增删或重写赋值会销毁原来的字符串,重新开辟内存空间,因此是非常消耗资源的 字符串可以看做是 char 数组,因此可以用 foreach 对其进行遍历,或者 ...

  10. POI richText和html的转换案例

    private XSSFRichTextString parseHtmlStrToRichText(String htmlStr) { Document document = parseHtmlStr ...