用vim保存文件和echo命令到底有什么不同?

ADB命令解锁Android手机屏幕的3种实用方法(附详细步骤) 本文详细介绍了在Android手机屏幕失灵或密码遗忘时,利用ADB命令解锁屏幕的三种实用方法。包括通过ADB模拟输入事件、移除锁屏认证文件(需Root权限)以及结合恢复模式抢救数据。文章提供了详细的操作步骤与风险提示,强调提前开启USB调试的重要性,是Android用户应对紧急锁屏情况的有效技术指南。 阅读详情

现象

最近在调试一个filebeat程序时需要制造一些log,我是直接使用vim直接对文件打开然后直接保存的。

但是有个奇怪的现象:每次写入一行新的日志,filebeat都会将整个文件的内容又重新进行上报一遍导致日志上传重复,同时观察到filebeat的文件采集状态文件registry都会进行增加一个重复的文件。

操作一番后以为是程序的问题,最后才反应过来,最终使用echo "test some log">>test.log追加的方式发现不会有此问题。

同时看了下两者的inode信息,确认了是因为vim会改变文件的inode(一个新的文件),echo则不会:

1、查看文件inode为908488

[root@localhost work]# stat test.log
  文件:"test.log"
  大小:0          块:0          IO 块:4096   普通空文件
设备:fd00h/64768d Inode:908488      硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-05-10 04:38:39.399791808 -0400
最近更改:2020-05-10 04:38:39.399791808 -0400
最近改动:2020-05-10 04:38:39.399791808 -0400
创建时间:-

2、当我用vim/vi工具进行编辑保存之后,变为了:908490

[root@localhost work]# vi test.log
[root@localhost work]# stat test.log
  文件:"test.log"
  大小:7         	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:908490      硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-05-10 04:39:01.950055784 -0400
最近更改:2020-05-10 04:39:01.950055784 -0400
最近改动:2020-05-10 04:39:01.953305882 -0400
创建时间:-

3、而用echo命令修改看到inode信息并没有改变, 908490

[root@localhost work]# echo "test some log">>test.log
[root@localhost work]# stat test.log
  文件:"test.log"
  大小:21        	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:908490      硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-05-10 04:39:01.950055784 -0400
最近更改:2020-05-10 04:41:16.794459151 -0400
最近改动:2020-05-10 04:41:16.794459151 -0400
创建时间:-

验证

其实通过inode的改变以及可以猜测出在使用vi/vim进行编辑的时候,文件以及变为了一个新的文件,这里我主要通过inotifywait来看一下,在进行vim编辑的时候,文件会产生什么时间

一开始本来打算使用golang中github.com/fsnotify/fsnotify去看的,但是发现包中对event进行了合并,不够原始。所以才直接使用inotifywait来看

inotifywait命令:

inotifywait -rm test.log

1、使用vim进行编辑的结果:

[root@localhost work]# inotifywait -rm test.log
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
test.log OPEN
test.log ACCESS
test.log CLOSE_NOWRITE,CLOSE
test.log MOVE_SELF
test.log ATTRIB
test.log DELETE_SELF

可以看到对文件进行了DELETE_SELF

注意当再次进行编辑的时候,已经无法监听到了,因为原有文件已经被删除,需要重新监听

2、使用echo进行追加写入的结果

[root@localhost work]# inotifywait -rm test.log
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
test.log OPEN
test.log MODIFY
test.log CLOSE_WRITE,CLOSE

3、监听整个目录,可以看到更多信息

[root@localhost work]# inotifywait -rm ./dir/
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.

# 当进行文件写入时
./dir/ OPEN test.log
./dir/ CREATE .test.log.swp
./dir/ OPEN .test.log.swp
./dir/ CREATE .test.log.swx
./dir/ OPEN .test.log.swx
./dir/ CLOSE_WRITE,CLOSE .test.log.swx
./dir/ DELETE .test.log.swx
./dir/ CLOSE_WRITE,CLOSE .test.log.swp
./dir/ DELETE .test.log.swp
./dir/ CREATE .test.log.swp
./dir/ OPEN .test.log.swp
./dir/ MODIFY .test.log.swp
./dir/ ATTRIB .test.log.swp
./dir/ ACCESS test.log
./dir/ CLOSE_NOWRITE,CLOSE test.log
./dir/ MODIFY .test.log.swp

# 当进行文件保存是

./dir/ CREATE 4913
./dir/ OPEN 4913
./dir/ ATTRIB 4913
./dir/ CLOSE_WRITE,CLOSE 4913
./dir/ DELETE 4913
./dir/ MOVED_FROM test.log
./dir/ MOVED_TO test.log~
./dir/ CREATE test.log
./dir/ OPEN test.log
./dir/ MODIFY test.log
./dir/ CLOSE_WRITE,CLOSE test.log
./dir/ ATTRIB test.log
./dir/ MODIFY .test.log.swp
./dir/ DELETE test.log~
./dir/ CLOSE_WRITE,CLOSE .test.log.swp
./dir/ DELETE .test.log.swp

可以看到在进行文件保存时,将原有test.log 移动为test.log~,并新创建一个文件test.log,最后对test.log~备份文件和.test.log.swp缓冲区文件进行删除

总结

  • vim编辑是产生了一个新的文件,所以看到inode信息变化了,而echo仅仅只是对文件进行写入。

  • 在vim编辑过程中,会生成swp缓冲区文件,在进行vim编辑时时刻将内容保存进入swp,防止程序退出未保存

  • 产生后缀带 ~ 的备份文件,这个是在对文件进行保存时产生,如果文件被正常保存则该文件会被立即删除,正常情况下是看不到这个文件

OAuth2.0集成SpringSecurity加JWT实现单点登录 单点登录(Single sign on),英文名称缩写SSO,SSO的意思就是在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统。也就是说只要登录一次单体系统就可以 阅读详情

相关推荐

ESP32 IDF开发 应用篇⑲ 空中升级OTA

在实际产品开发过程中,在线升级可以远程解决产品软件开发引入的问题,更好地满足用户需求。OTA(空中)更新是使用 Wi-Fi 连接而不是串行端口将固件加载到 ESP 模块的过程。(1)、ESP32 的 OTA 升级有三种方式:·Arduino IDE:主要用于软件开发阶段,实现不接线固件烧写·Web Browser:通过 Web 浏览器手动提供应用程序更新模块·HTTP Server:自动使用http服务器 - 针对产品应用在三种升级情况下,必须通过串行端口完成第一个固件上传。

lu330274924的博客 3324

Linux:vim 与 echo 的区别

接上一篇博客遇到的问题,我做了如下测试,新建了一个测试文件 test 使用 vim 向 test 文件添加内容,可以看到如下文件信息 一、使用 echo 修改文件内容,可以看到如下文件信息 二、使用 vim 修改文件内容,可以看到如下文件信息       如上,可以清晰的看到当使用 vim 修改文件时,Inode 产生了变化及生成了一个新的文件,而使用 echo 修改文件时是在源文件追加信息,对 linux 文件系统 Inode 说明如下。

不懂一休 1万+

【鼠标在不点击的情况下,直接移动到QT控件上不显示提示信息】

有时明明已经调用了setToolTips方法,鼠标移动到QT控件上仍然不会有提示信息,这时候就需要具体分析下。重点就是标红的这段话,大概意思就是。.h文件中加入鼠标移动事件的定义。.cpp文件中实现该事件。

ZTH_G的博客 2423

使用vi、vim、sed、echo、cat操作文件

记录:324 场景:在CentOS 7.9操作系统上,使用vi编辑器、vim编辑器、sed编辑器操作文件读、写、删、替换等操作;使用echo命令和cat命令将内容输出文件并查看内容。

zhangbeizhen18的博客 3111

DevEco Studio在初始化时出现Installing pnpm@8.13.1...npm ERR! code ETIMEDOUTnpm ERR! syscall connectnpm E

npm的仓库源设置的有问题,下载不了鸿蒙相关组件,所以你的启动依赖都没有,或者以前下载过npm,使用的源改的乱七八糟了。以前安装过前端相关的node.js的话,启动的时候记得使用管理远权限。(DevEco Studio)就出错,npm显示超时。

qq_56392862的博客 2628

实战拆解:RAG vs Agent在金融风控中的性能对比

2024年上半年我帮某华东地区城商行做零售交易反欺诈系统升级时,技术团队曾发生过一次激烈争论:一派认为应该优先上RAG(检索增强生成)方案,成本低、落地快、合规性好;另一派坚持要上Agent(智能体)方案,推理能力强、能应对复杂新型欺诈。最终我们做了完整的AB测试,结论是两者没有绝对的优劣,只有场景适配的差异:RAG适合高并发、低时延的实时风控场景,Agent适合低并发、高准确率要求的事后核查/大额审批场景,两者结合的 hybrid 方案能覆盖95%以上的风控需求。本文我会结合真实项目的测试数据,从核心概念

AI天才研究院 251

find命令&&echo命令&vim替换&grep

统计当前目录及其子目录下面所有文件的行数:find . -name "*" | xargs wc -l 或 wc -l $(find . -name "*") find命令 find [起始目录] 寻找条件 查找的字符串 操作 起始目录:      ~ 表示$HOME目录        . 表示当前目录        / 表示根目录  寻找条件(常用的):     

xu_ya_fei的专栏 2090

osgEarth添加线特征

部分关键代码: osgEarth::Annotation::FeatureNode* pathNode = 0; osgEarth::Symbology::Geometry* path = new osgEarth::Symbology::LineString(); Track*track = dynamic_cast<Track*>(entity->getProperty(PS_TRACK)); if (track == nullptr) { return; } st.

wb175208的专栏 2967

【笔记】字符集&系统提示符&vim进阶& echo & cat & less & more & grep &‘ ‘和“ “的区别& tr

字符集 字符集作用: 文字在Linux系统中一种表达方式 我们在工作中我们是使用远程连接工具连接操作系统 注意: xshell和操作系统的字符集不统一 则产生乱码 默认相同 两种常用的字符集: 第一种字符集: UTF-8 万国码 xshell默认的 操作系统默认的 第二种字符集: GBK 国标 查看字符集 使用变量 LANG [root@ahui ~]# echo $LANG en_US.UTF-8 临时修改系统的语言 (字符集) 重启 退出xshell失效 [root@ahui ~]# LANG="

AHui_优快云的博客 706

小龙虾 OpenClaw 权限全攻略:轻松激活 elevated (最新版 OpenClaw 自动化任务降智、无权限、无法执行sudo等系统命令、提升 elevated 权限的解决方案)

升级小龙虾 OpenClaw 后权限不足?elevated 报错?📛 本文教你如何正确配置 OpenClaw 权限💻,让自动化任务顺利执行 🚀

XiaoqiangClub的博客 733

K8s(十二):监控与报警(163邮箱+钉钉)-Prometheus + Grafana + Alertmanager(超详细)

🔴 K8s(十二):监控与报警(163邮箱+钉钉)-Prometheus + Grafana + Alertmanager(超详细)

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3万+

【核心命令 cd pwd mkdir touch ls mv cp echo vim rm】

linux核心命令详解

qq_68631072的博客 898

UE实现贴地线(SurfaceLine)效果

UnrealEngine实现贴地线效果

专注GIS开发 4572

Linux查看和编辑文件

例如,要想test.txt文件添加内容"I am a boy",test.txt在当前目录中 方法一:vi编辑法   打开终端,输入vi test.txt 回车,按a或i进入编辑模式,输入 I am a boy,然后按esc键退出编辑模式,输入:wq保存并退出。 方法二:echo命令法   打开终端,输入echo ‘I am a boy’ >> ./test.txt   注:追加单行文本法 方法三:cat命令法   cat >> ./test.txt <&lt..

风的专栏 633

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

创建目录文件、重定向以及vim编辑器

正常模式→插入模式:按下 i (在光标前插入)、 I (在当前行首插入)、 a (在光标后插入)、 A (在当前行尾插入)、 o (在当前行下方新建一行并进入插入模式)、 O (在当前行上方新建一行并进入插入模式)。- 光标移动: h (左移)、 j (下移)、 k (上移)、 l (右移);(强制退出,不保存修改)、 wq (保存并退出)、 x (保存并退出,文件无修改时直接退出,比 wq 更高效)。- 进入Vim:在终端输入 vim 文件名 ,若文件存在则打开,不存在则创建新文件并进入。

jsjbdjhd的博客 536

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Linux 创建删除 查看指定行数

1.创建目录test 使用两种方式在test目录中创建文本文件text1.txt, text2.txt 使用Vim在文件text1.txt中写入 Welcome to my Linux. You are the best. This is my first file to create on linux 设置行号,并将文本中my替换成your,将文件另存为new_test1.txt 将test中的文件拷贝到test2目录 ...

GaLeng_Yang的博客 283

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

RHCSA/Linux基础(第三次)

作业 1.创建目录test 使用两种方式在test目录中创建文本文件text1.txt, text2.txt 使用Vim在文件text1.txt中写入 Welcome to my Linux. You are the best. This is my first file to create on linux 设置行号,并将文本中my替换成your,将文件另存为new_test1.txt 将test中的文件拷贝到test2目录 ...

m0_48684060的博客 104

Linux基本指令

先 :w +文件名 (先保存) 再 :q退出。2.要想进入编辑模式 最简单的是插入模式(insert mode)按i。删除目录要带上-r因为目录是一系列的要通过递归来删除。a(after)表示进入插入模式且定位在光标之后。1.ls指令(list)当前列表下的目录都有啥。在文件复制之后粘贴的文件名字存在就是移动。在文件复制之后粘贴的文件名字存在就是复制。-f(force)强制删除目录或文件。c 表示删除光标内容且进入插入模式。

muyou0507的博客 220

cat、echo和vim编辑器

Linux基本命令,vim编辑器

weixin_44254079的博客 1540

Linux命令速查:从echo到vim全攻略

1.打开终端,输入以下命令创建并编辑文件:bash复制代码vim test.txt,您会进入 Vim的正常模式(命令模式)代表 command1 的输出作为 command2 的输入使用,而 command2 的输出又作为 command3。这里需要注意的是,如果文件不存在,将会创建文件,如果文件存在,原有的文件内容将。:%s/old/new/gc:替换整个文件中的所有old,但在每次出现时提示。paste 命令可以将多个文件以列对列的方式加以合并(单纯的合并)。标移动到你想放置文本的地方,输入p命令。

RT__Wang的博客 749

linux vim无法编辑文件内容,Linux 使用vim命令编辑文件内容

在终端可以使用vim命令来直接编辑文件内容。vim,也可以叫做vi。vim有三种模式:命令模式、输入模式、底线命令模式。命令模式vim 文件名 进入命令模式,vim也可以写成vi。如果文件不存在,先创建再打开,如果文件已存在,直接打开。只能是当前目录下的文件,不能是document/1.txt这种子孙目录下的文件。此模式下敲击键盘动作会被Vim识别为命令,而非输入字符。常用命令:i 切...

weixin_30792221的博客 3839

Linux系统:vim编辑器常用的文件操作命令集、文件的查看

1.vim编辑器: Vim 是linux系统中的文件编辑器,一般系统中默认的是vi编辑器,vim要比vi要强大一点;使用vim需要安装,安装方式:yum install vim -y (-y表示安装过程不需要确认),vim或vi对小文件操作是很快的,但是较大的文件就打开是有点耗时; vi/vim编辑器的操作模式分为三种: a.命令行模式:vi、vim的默认模式;在这一模式中,所有的输入被解...

白骨梦儿 5692

echo命令的运用

如果在使用命令vim时,指定了一个不存在的filename,vim会开辟一段新的缓冲区域来。如果在使用命令vim时,指定了一个已有文件的名字,vim会读取该文件的所有内容,但是一行一行地来回移动会特别麻烦,vim提供了一些能够提高移动速度的命令。paste 命令可以将多个文件以列对列的方式加以合并(单纯的合并)。在插入模式下,vim会将你在当前光标位置输入的每个键都插入到缓冲区。在命令行模式下有几个命令可以将缓冲区的数据保存到文件中并退出vim。式命令行,可以输入额外的命令来控制vim的行为。

c_y_l__的博客 528

Linux——echo命令,管道符,vi/vim 文本编辑器

命令模式:也成为了阅读模式,可以控制光标移动,对文本进行查看、删除、复制粘贴等操作(默认)用于两个命令或多个命令相连接,将左侧命令的结果作为右侧命令的数据输入。可通过如下任意一种功能键从命令模式切换到编辑模式。编辑模式:也称为插入模式,可以对文本进行编辑。刚打开文件后进入的为命令模式(默认)命令模式中点击冒号进入末行模式,点击。输入模式与末行模式不可以相互进入。键可从末行模式切换到命令模式。键可从编辑模式切换到命令模式。可从命令模式切换到末行模式。编辑器的提升版本,最大的。键进入输入模式,点击。

nianwan2157的博客 1212

linux创建新文件的命令

用vi编辑器编辑文本后,如果是新创建的文件,默认保存在当前目录下,如果想保存到指定目录下,可以在vi编辑器中,按Esc键切换到命令模式,然后用w命令写到指定目录下的指定新建文件,如写到/tmp/test.txt文件,则在vi命令模式下输入w/tmp/test.txt写好后,在/tmp目录下新的文件test.txt就被创建了。[root@localhost~]#cd>>file4.txt//创建新的空文件file3.txt。(说明使用>>指令向文件追加内容,原内容将保存。...

优快云lzy的博客 3万+

ubuntu用终端将文件打开、编辑、保存的方法:gedit 推荐或nano 或vim 或vi

ubuntu用终端将文件打开、编辑、保存的方法:gedit 推荐或nano 或vim 或vi

终身学习,每天进步一点点 2万+
上一篇: postgres入门
下一篇: 如何在K8S中创建一个自定义Controller?
学点程序
博客等级 码龄12年 65粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值