• 一个关于 Linux环境下输出操作符 >和>>的问题


    【>和>>的区别】
    命令>文件,表示以覆盖的方式,把命令正确输出到指定的文件或者设备当中;
    命令>>文件,表示以追加的方式,把命令正确输出到指定的文件或者设备当中。

    【遇到的问题】
    在开发环境中调试接口时,发现log文件有点大,前面大部分内容与我正在排查的问题都无关,于是想把这部分内容抹去,然后单独让有问题的接口输出一些关键信息,再把文件放到本地来仔细查询。
    于是在原有的log基础上,做了如下操作:

    echo '123' > charge-service_1644545243.log

    再将有问题的接口调用,以便让java将日志输出到这个文件中,但下载到本地后发现这个文件成了一个二进制:

    --是不是字符集的问题?--
    是不是因为echo输入时使用的字符集,和日志本身使用的字符集不同导致的?
    之前在终端使用echo进入后,文件的字符集前后确实有点变化,如图:

    于是,在echo时,使用中文输入,看看会不会有变化:

    echo '测试' > charge-service_1644545243.log

    此时,再调用一次接口,结果发现在java再次将日志输出到这个文件后,文件打开还是二进制。而且在linux终端file查看这个文件时,charset为二进制:

    file -i charge-service_1644546551.log
    charge-service_1644546551.log: text/plain; charset=binary

    --可能是>的问题?--
    此时想着查看一下,java进程是怎么把日志输入到这个文本中的,于是看了下这个程序相关的配置和启动脚本,结果发现,这个程序是用nohup直接将日志内容定向输出到log文件中,关键的一句如下:

    nohup java -Xms256m -Xmx512m -jar $module_service_package $jarParam '--spring.profiles.active=dev'>$log_file 2>&1 &

    所以到这里基本排除了java进程怎么控制输出的,因为这里的输出是通过>写入到了log中。之前说到>和>>的区别一个是覆盖,一个是追加,那么我们在程序运行中进行echo >的操作,相当于在一个>操作还没有结束的时候又进行了另一次>操作,会不会是这个原因呢?

    为了验证这个想法,把启动脚本改为如下:

    nohup java -Xms256m -Xmx512m -jar $module_service_package $jarParam '--spring.profiles.active=dev'>>$log_file 2>&1 &

    把原本的>到文件改为>>的方式,再次进行之前的操作,如图:

    在nohup输入了日志后,log文件的charset还是utf-8,下载到了本地之后发现可以正常查看了。

    这里怀疑是>操作过程中被其它的操作(echo)修改了文本,导致某些信息缺失,所以出现了文本查看工具没办法判断这个文本到底是什么类型,只能以二进制处理,有没有大佬能解惑,是否是这个原因,怎么进行验证?

  • 相关阅读:
    初识lunece(同义词检索)
    初识IKAnalyzer
    初识springmvc_01
    初识mybatis_03 一级缓存和二级缓存
    初识mybatis_02 基于注解实现增删改查
    初识mybatis_01
    Javascript中的this指向问题
    JS中的深拷贝与浅拷贝
    移动端1像素边框问题
    css的一些知识点的总结(四)
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/15882381.html
Copyright © 2020-2023  润新知