linux命令重定向>、>>、 1>、 2>、 1>>、 2>>、 <

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

先看>和>>:

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

(thrift_rpc)piperck?  Desktop  ?  ll >> 123.txt
(thrift_rpc)piperck?  Desktop  ?  ll | grep 123.txt
-rw-r--r--   1 piperck  staff   2.8K Dec 25 00:24 123.txt

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

(thrift_rpc)piperck?  Desktop  ?  ls > /poweqpikp/123
zsh: no such file or directory: /poweqpikp/123
(thrift_rpc)piperck?  Desktop  ?  ls >> /poweqpikp/123
zsh: no such file or directory: /poweqpikp/123
(thrift_rpc)piperck?  Desktop  ?  ls > 123
(thrift_rpc)piperck?  Desktop  ?  ls >> 1234

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

然后是 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 - 命令重定向

时间: 2024-12-09 13:00:04

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

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

一.Linux重定向 重定向能够实现Linux命令的输入输出与文件之间重定向,以及实现将多个命令组合起来实现更加强大的命令.这部分涉及到的比较多的命令主要有: 涉及到的比较多的命令主要有: cat:连接文件 sort:排序文本行 uniq:忽略或者报告重复行 wc:统计文件的行数.词数.字节数 grep:打印匹配制定模式的行 head:输出文件的头部 tail:输出文件的尾部 tee:从标准输入读,并往标准输出或者文件写 1.重定向标准输出 使用>可以将本来出现在屏幕的标准输出信息重定向到一个文

linux 命令 htop &amp; 重定向 top

最近在用linux服务器跑程序,有几条linux命令还蛮重要的,总结一下: 1. 直接跑代码: python test.py 2. 若想程序在后台跑,即使本地和服务器断开也能运行: nohup python test.py >test.out & 这里把输出在控制台的结果重定向到了 test.out 这个文件中,即可以在test.out中查看输出结果了. 3. cat 命令:文本输出命令,通常是用于观看某个文件的内容 cat test.out 这样就可以显示test.out里面的内容了. 4

linux命令学习笔记

操作文件和目录: copy: $ cp file1 file2 $ cp -r dir1 dir2 move: $ mv file .. $ mv file dir/ rename: $ mv file1 file2 $ mv dir1 dir2 # dir2如果存在,则为移动操作 remove: $ rm file $ rm -r dir 创建文件: $ touch a.txt $ >a.txt 创建目录: $ mkdir dir 查看文件: #一般 $ cat file #查看文件类型: $

cv:显示Linux命令运行进度

cv: 显示 cp.mv 等命令的进度 2014-07-14 By toy Posted in Apps Edit on GitHub 在 Linux 系统中 , 大多数命令从来都是信奉 “ 沉默是金 ” 的准则 , 所以当我们利用 cp 复制文件的时候并不能看到所谓的进度条 . 如果你在意这一点 , 那么不妨来用用 cv. cv 是 Coreutils Viewer, 它能够显示传输数据的进度 , 包括百分比 . 大小 . 以及速率等信息 .cv 支持 coreutils 中的基本命令 , 比

118笔记 Linux 命令篇

linux  命令总结 1  mkdir     make directorys  例子:  mkdir /data 在根/下创建data目录 2.ls   list(列表)  列表目录文件 例子:  ls /列根/目录下目录和文件. -l(long)长格式,-d(directorys)查看目录. 3.   备注    '/'    这个就叫根. cd      change directory  改变目录路径 例子: cd /etc  就是切换到 etc里面去了. cd后跟相对路径或者绝对路径

Linux命令随笔

1 Linux命令总结 2 3 man ==命令帮助; 4 help ==命令的帮助(bash的内置命令); 5 ls ==list,查看目录列表; 6 -ld:查看目录权限; 7 -l:(long)长格式显示属性; 8 -F:给不同的文件类型结尾加标识 9 -p:给目录加斜线 10 -r:(reverse)反转排序 11 -t:按时间排序 12 --color=auto 给输出的不同类型文件加不同颜色 13 -a:显示隐藏文件 14 ls -l --time-style=long-iso,显示

十年linux命令总结

十年linux命令总结 本文链接: http://codingstandards.iteye.com/blog/786653 关于命令类型划分 本表中列出了我穷尽了我所有的记忆整理出来的Linux命令,其中关于外部命令.关键字或内建命令的划分,不一定正确.有很多命令,既是内建命令也 可能是外部命令,为啥?Bash为了更高效率的执行命令和脚本,把很多外部命令以内建命令的方式实现了.我们使用type这个命令就可以知道一个命令的类 型了,如下所示: [[email protected] ~]# typ

Linux命令工具基础02 文件及目录管理

文件及目录管理 文件管理不外乎文件或目录的创建.删除.查询.移动,有mkdir/rm/mv 文件查询是重点,用find来进行查询:find的参数丰富,也非常强大: 查看文件内容是个大的话题,文本的处理有太多的工具供我们使用,在本章中只是点到即止,后面会有专门的一章来介绍文本的处理工具: 有时候,需要给文件创建一个别名,我们需要用到ln,使用这个别名和使用原文件是相同的效果: 创建和删除 创建:mkdir 删除:rm 删除非空目录:rm -rf file目录 删除日志 $rm *log 等价: $

Linux学习记录-----《快乐的Linux命令行》.

之前自学python的时候一直用的Win7,没想过,也有点怕使用Linux,可能人对未知的东西都有点恐惧,但是,但是,学了4个多月,退无可退了,不管是网站的部署,还是基于后端工作的需求,Linux的学习必须提上日程, 参考用书,,, <快乐的Linux命令行>,操作系统通过虚拟机安装的Ubuntu  16 很喜欢书中的一句话 最开始的准备工作进入超级用户,,,, su -这样,就在当前目录下,变更成超级用户如果之前没有设置过超级用户密码的话需要使用sudo passwd root按照提示,如果