一个关于 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)修改了文本,导致某些信息缺失,所以出现了文本查看工具没办法判断这个文本到底是什么类型,只能以二进制处理,有没有大佬能解惑,是否是这个原因,怎么进行验证?
一个关于 Linux环境下输出操作符 >和>>的问题的更多相关文章
- [笔记]Go语言在Linux环境下输出彩色字符
Go语言要打印彩色字符与Linux终端输出彩色字符类似,以黑色背景高亮绿色字体为例: fmt.Printf("\n %c[1;40;32m%s%c[0m\n\n", 0x1B, & ...
- 由一个简单需求到Linux环境下的syslog、unix domain socket
本文记录了因为一个简单的日志需求,继而对linux环境下syslog.rsyslog.unix domain socket的学习.本文关注使用层面,并不涉及rsyslog的实现原理,感兴趣的读者可以参 ...
- Linux环境下部署完JDK后运行一个简单的Java程序
前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...
- Linux环境下段错误的产生原因及调试方法小结(转)
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且 项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation F ...
- 【环境配置】Linux环境下下载、配置java环境、安装eclipse、建立eclipse快捷方式详解
一.首先是下载Java JDK 到目前为止的最新版本为(jdk1.8.0_60),有两种方式进行下载: 1.使用shell来进行下载,可使用如下命令直接进行下载: wget --no-check-ce ...
- Linux环境下段错误的产生原因及调试方法小结
转载自http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...
- linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg)
linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg) 2013-11-10 16:51:14 分类: 系统运维 为什么要写这篇文章? 答:通过常规的三大步(./confi ...
- 【转】【调试技巧】Linux环境下段错误的产生原因及调试方法小结
本文转自:http://www.cnblogs.com/panfeng412/archive/2011/11/06/segmentation-fault-in-linux.html 1. 段错误是什么 ...
- 多线程编程之Linux环境下的多线程(一)
一.Linux环境下的线程 相对于其他操作系统,Linux系统内核只提供了轻量级进程的支持,并未实现线程模型.Linux是一种“多进程单线程”的操作系统,Linux本身只有进程的概念,而其所谓的“线程 ...
- mosquitto在Linux环境下的部署/安装/使用/测试
mosquitto在Linux环境下的部署 看了有三四天的的源码,(当然没怎么好好看了),突然发现对mosquitto的源码有了一点点感觉,于是在第五天决定在Linux环境下部署mosquitto. ...
随机推荐
- 51定时器:0xee的由来
定时时间=(65536-初值)×(12/晶振频率) 因为51实验板的晶振为11.0592,所以 定时时间=(65536-初值)×(12/11.0592) 定时1ms:1000=(65536-初值)×( ...
- ssr next 学习记录
预加载页面 只有生产环境才有 当页面初始化加载时,getInitialProps只会加载在服务端.只有当路由跳转(Link组件跳转或 API 方法跳转)时,客户端才会执行getInitialPro ...
- 根据指定月份,打印该月份所属的季节。 3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季 if和switch各写一版
1.public class Month{ public static void main(String args[]){ for (int i = 1;i <= 12 ;i++ ) { if ...
- HTML复习(18.图片样式)
重点 掌握图片样式属性(大小.边框.对齐)了解float属性 图片大小在CSS中,我们也是使用width和height这2个属性来定义图片的大小(也就是宽度和高度).在实际开发中,如果你需要多大的图片 ...
- JS中Promise
Promise的作用: Promise是异步微任务,解决了异步多层嵌套回调的问题,让代码的可读性更高,更容易维护. Promise如何使用: Promise是ES6提供的一个构造函数,可以使用Prom ...
- Java 获取【.jar】文件里的资源文件
获取jar文件里的图片等文件时,会发现使用相对路径不行了. 因为打包后的jar文件,在获取路径时稍有不同. 下面是获取jar文件中图片的例子: 1 Resource[] resources = new ...
- mysqld 打开连接卡
把client的ip写在mysql服务器的/etc/hosts文件里 echo [ip] [hostname] >>/etc/hosts
- 前端本地 Nginx 反向代理
一.问题引入 本地开发遇到线上bug,debug得stash代码切换分支,同时需切换开发环境与生产环境服务,npm run serve 或 npm start 费时 二.webpack-dev-ser ...
- AUTO Uninstaller 9.3.28 最新免费密钥绿色版下载【转载】
大家在使用autodesk系列软件之后,想要彻底卸载清除重新安装却发现无法卸载或者清除不干净的问题,这该怎么办?这里小编就给大家分享一个好用的CAD清理工具AUTO Uninstaller,轻松卸载a ...
- leetcode 1636
一些关于hashmap和list的用法 class Solution { public int[] frequencySort(int[] nums) { Map<Integer, Intege ...