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

【遇到的问题】
在开发环境中调试接口时,发现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)修改了文本,导致某些信息缺失,所以出现了文本查看工具没办法判断这个文本到底是什么类型,只能以二进制处理,有没有大佬能解惑,是否是这个原因,怎么进行验证?

一个关于 Linux环境下输出操作符 >和>>的问题的更多相关文章

  1. [笔记]Go语言在Linux环境下输出彩色字符

    Go语言要打印彩色字符与Linux终端输出彩色字符类似,以黑色背景高亮绿色字体为例: fmt.Printf("\n %c[1;40;32m%s%c[0m\n\n", 0x1B, & ...

  2. 由一个简单需求到Linux环境下的syslog、unix domain socket

    本文记录了因为一个简单的日志需求,继而对linux环境下syslog.rsyslog.unix domain socket的学习.本文关注使用层面,并不涉及rsyslog的实现原理,感兴趣的读者可以参 ...

  3. Linux环境下部署完JDK后运行一个简单的Java程序

    前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...

  4. Linux环境下段错误的产生原因及调试方法小结(转)

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且 项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation F ...

  5. 【环境配置】Linux环境下下载、配置java环境、安装eclipse、建立eclipse快捷方式详解

    一.首先是下载Java JDK 到目前为止的最新版本为(jdk1.8.0_60),有两种方式进行下载: 1.使用shell来进行下载,可使用如下命令直接进行下载: wget --no-check-ce ...

  6. Linux环境下段错误的产生原因及调试方法小结

    转载自http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...

  7. linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg)

     linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg) 2013-11-10 16:51:14 分类: 系统运维 为什么要写这篇文章? 答:通过常规的三大步(./confi ...

  8. 【转】【调试技巧】Linux环境下段错误的产生原因及调试方法小结

    本文转自:http://www.cnblogs.com/panfeng412/archive/2011/11/06/segmentation-fault-in-linux.html 1. 段错误是什么 ...

  9. 多线程编程之Linux环境下的多线程(一)

    一.Linux环境下的线程 相对于其他操作系统,Linux系统内核只提供了轻量级进程的支持,并未实现线程模型.Linux是一种“多进程单线程”的操作系统,Linux本身只有进程的概念,而其所谓的“线程 ...

  10. mosquitto在Linux环境下的部署/安装/使用/测试

    mosquitto在Linux环境下的部署 看了有三四天的的源码,(当然没怎么好好看了),突然发现对mosquitto的源码有了一点点感觉,于是在第五天决定在Linux环境下部署mosquitto. ...

随机推荐

  1. asp.net mvc api swagger 配置

    1.安装插件 Swashbuckle(版本5.6.0) 和 Swagger.Net.UI(版本1.1.0) 2.SwaggerNet类中注释掉一下代码: using System; using Sys ...

  2. 全新BPMN常用图形标识一览表

    BPMN符号与BPMN的关系 BPMN,即业务流程建模与标记(手法),表达此类手法的即是业务流程模型示意图.业务流程示意图是由一系列的元素符号构成.作为BPMN的基础,这些符号将业务流程建模简单化.图 ...

  3. 最简单明了的yield from解释

    def one(): print('one start') res = yield from two() print('function get res: ', res) return 'one' + ...

  4. 点击div实现选中效果

    先上一份效果图.原来的checked多选框还是存在的,我只不过隐藏了,让他的整个div的范围都是可以点击的,右上角三个点是可以删除当前元素,左下角的播放按钮可以点击播放语音,主要是利用z-index把 ...

  5. c# HttpServer 的使用

    在很多的时候,我们写的应用程序需要提供一个信息说明或者告示功能,希望借助于HttpServer来发布一个简单的网站功能,但是又不想架一个臃肿的Http服务器功能, 这时候,标准框架提供的HttpSer ...

  6. python菜鸟学习: 10. 函数的基本用法

    # -*- coding: utf-8 -*-# 回参函数def test01(): return 0# 以元组返回参数def test02(): return 1, [1, 2, 3, 4, 5], ...

  7. nkIO方法

    import java.util.*; public class Main{ public static void main(String args[]){ Scanner sc = new Scan ...

  8. cpu主频对网络传输性能的影响

    数据包长度是:2KB iperf的测试结果:3.2GHz的cpu能上40Gb/s, 2.1GHz的cpu只能到28Gb/s.

  9. 基于 Docker 安装 Nginx 搭建静态服务器

    最近一直在准备家里的服务器部署一个自己用的网站玩玩,一来是用来学习部署的基础知识,二来,后面有空学点前端,可以部署到自己网站玩玩. 参考链接:https://juejin.cn/post/705740 ...

  10. 1903021126 申文骏 Java 第六周作业 类与对象

    项目 内容 课程班级博客链接 19级信计班(本) 作业要求链接 第六周作业 博客名称 1903021126  申文骏  Java 第六周作业  类与对象 要求 每道题要有题目,代码(使用插入代码,不会 ...