zoukankan      html  css  js  c++  java
  • linux中>和>>的区别

      '>'  输出到文件中。文件不存在会创建。文件已存在,内容会被覆盖。文件时间会更新。

    第一次输入'> test', 第二次输入'> test again', 发现内容

    [root@localhost ~]# echo '> test' > echo.log
    [root@localhost ~]# ll
    总用量 8
    -rw-------. 1 root root 1555 8月  20 15:30 anaconda-ks.cfg
    -rw-r--r--  1 root root    7 2月   1 18:03 echo.log
    [root@localhost ~]# cat echo.log 
    > test
    [root@localhost ~]# echo '> test again' > echo.log
    [root@localhost ~]# cat echo.log 
    > test again
    [root@localhost ~]# ll
    总用量 8
    -rw-------. 1 root root 1555 8月  20 15:30 anaconda-ks.cfg
    -rw-r--r--  1 root root   13 2月   1 18:04 echo.log

    最后输出只有:'> test again' 

    删除echo.log, 测试'>>'

    '>>'输出到文件中。文件不存在会创建。文件已存在,内容会继续追加在后面。文件时间会更新。

    [root@localhost ~]# rm echo.log 
    rm:是否删除普通文件 "echo.log"?y
    [root@localhost ~]# ll
    总用量 4
    -rw-------. 1 root root 1555 8月  20 15:30 anaconda-ks.cfg
    [root@localhost ~]# echo '> test' >> echo.log
    [root@localhost ~]# ll
    总用量 8
    -rw-------. 1 root root 1555 8月  20 15:30 anaconda-ks.cfg
    -rw-r--r--  1 root root    7 2月   1 18:11 echo.log
    [root@localhost ~]# cat echo.log 
    > test
    [root@localhost ~]# echo '> test again' >> echo.log
    [root@localhost ~]# ll
    总用量 8
    -rw-------. 1 root root 1555 8月  20 15:30 anaconda-ks.cfg
    -rw-r--r--  1 root root   20 2月   1 18:12 echo.log
    [root@localhost ~]# cat echo.log 
    > test
    > test again
    最后输出,文本中有两行。
    > test > test again

    辅助记忆:
    这两个都是重定向,
    >> 比较长,只有继续跟在后面附加,文本才会比较长。
    > 比较短,理解成替换文本,才不会那么长。


    1>> 和 1> 跟 >> 和 > 类似(暂没发现什么区别),都是标准输出(stdout)。以下是测试demo。

    [root@localhost ~]# echo 'hello' 1>> echo.log
    [root@localhost ~]# ll
    总用量 8
    -rw-------. 1 root root 1555 8月  20 15:30 anaconda-ks.cfg
    -rw-r--r--  1 root root    6 2月   2 17:02 echo.log
    [root@localhost ~]# cat echo.log 
    hello
    [root@localhost ~]# echo 'world' 1>> echo.log
    [root@localhost ~]# cat echo.log 
    hello
    world
    [root@localhost ~]# echo 'world' 1> echo.log
    [root@localhost ~]# cat echo.log 
    world

     2> 和 2>> 这个代表的是标准错误输出(stderr)。

    现在用echo肯定看不出结果,因为没有发生错误。

    把命令改错,echo --> echoc, 没有echoc这个命令的。

    [root@localhost ~]# echoc 'hello' 2>> echo.log
    [root@localhost ~]# cat echo.log 
    -bash: echoc: 未找到命令
    [root@localhost ~]# echoc 'hello' 2>> echo.log
    [root@localhost ~]# cat echo.log 
    -bash: echoc: 未找到命令
    -bash: echoc: 未找到命令
    [root@localhost ~]# echoc 'hello' 2> echo.log
    [root@localhost ~]# cat echo.log 
    -bash: echoc: 未找到命令

    可以看出2>是内容覆盖。2>>是错误输出的追加。

     还有一个符号是>&, 这是一个整体。>是代表重定向,&符号,我个人把这个理解成类似于java的那种转义的意思。

    2>&1,表示的是把标准错误输出(2表示标准错误输出)定位到标准输出(1表示标准输出)。

    如果不加&那就是 2>1, 这个表示的含义是错误输出到名字为1的文件中,1在这边就是表示文件了。所以需要加个&。

    例如,这边有一个rocketmq的启动命令

    nohup mqnamesrv >/usr/local/log/rocketmqlogs/namesrv.log 2>&1 &  

    nohup和最后的&可以先忽略。跟我们讨论关系不大。

     mqnamesrv  >/usr/local/log/rocketmqlogs/namesrv.log  2>&1这个命令中

    >/usr/local/log/rocketmqlogs/namesrv.log表示把命令的输出定向到/usr/local/log/rocketmqlogs/namesrv.log

    2>&1,表示的是把标准错误输出定位到标准输出。表示错误的也定向到/usr/local/log/rocketmqlogs/namesrv.log

    但是>/usr/local/log/rocketmqlogs/namesrv.log和2>&1的顺序不能反。

  • 相关阅读:
    一个神秘现象引发对beego框架的思考
    利用golang优雅的实现单实例
    Go语言及Beego框架环境搭建
    go语言正则表达式
    爬取珍爱网后用户信息展示
    Django之modelform简介
    Django之分页功能
    Django之ORM操作
    selenium模拟鼠标操作
    Django之模型注册
  • 原文地址:https://www.cnblogs.com/chenmz1995/p/12249399.html
Copyright © 2011-2022 走看看