浅谈Linux下mv和cp命令的区别

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

我之前在项目中遇到一个很奇怪的问题,对于inotify监视一个文件的时候,发现有些时候inotify有些时候会

“失效”。后来我就没办法,去监视文件所在的目录。看下面的,

#!/bin/bash

src=/tmp/test/test.txt      # directory to monitor
/usr/local/bin/inotifywait -rmq  -e modify $src |  while read  event
do
    echo "hello"
done


奇怪的现象就是如果我 mv test.txt  /tmp/test/test.txt 的时候,发现 inotify 竟然没有除非,但是我无意中

发现 cp test.txt  /tmp/test/test.txt 的时候,强制覆盖了,发现 inotity 就触发了。我这两天上OS的时候,突

然间想到了原因。可能是 inode 节点的问题,看下面

上面注意 inode 节点的变化,cp 的时候是真正意义上的内容copy,对于 inode 节点却是不会变化的

mv 的时候是把目标文件直接删除了(inode 删除了),新的文件其实已经不是以前的文件了,只是名字

一样而已。这样就可以解释 inotify 的“异常”了,mv 之后原文件的 inode 节点都已经删除了,inotify是跑

在内存里面的,它依然在读取之前的 inode 节点,但是已经删除了,这导致了inotify挂了。

inode 是OS在磁盘上寻找文件一个必不可少的,下面可以再来看个例子.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>

int main(int argc, char const *argv[])
{
	/* code */
	int fd = open("./1.txt",O_RDWR);
	char buff[256] = {'\0'};
	if (fd < 0)
	{
		printf("error open file\n");
		exit(1);
	}
	int i = 0;
	while(1)
	{
		sprintf(buff,"%d %s\n",i,"hello");
		write(fd,buff,strlen(buff)+1);
		printf("%s\n",buff );
		++i;
		sleep(1);
	}
	close(fd);
	return 0;
}


上面的程序就是向1.txt写文件,前提是 1.txt 是存在的,真正的原因就是没有 inode 节点,也就没有了对应

的磁盘文件.现在假设有了 1.txt 这时候程序 1s 钟写一次文件,我们 mv 1.txt 2.txt ,这时候会发现程序竟

然向 2.txt 里面写数据了,原因就是程序是在内存里面,对于1.txt 的抽象就是文件描述符号,write只认识它

,write 通过写描述符,描述符去找相应的 inode 节点,然后写磁盘.mv 了之后 inode 节点还是存在的,也

就是写 2.txt 了.

NVIDIA vGPU License服务器及GPU驱动部署配置详解 一、背景 在Horizon Daas环境,因部分桌面虚拟机采用vGPU规格发布,因此环境中需要有GPU License服务器,完成对租户环境的GPU许可。 当配置有vGPU桌面虚拟机发起License授权请求后,授权服务器会根据License中所包含的GRID License版本,加载不同的vGPU驱动(普通驱动专业Quodra卡驱动)。目前vPCvApp的License对应加载的都是普通的显示驱动。 二、vGPU License服务器的工作原理 vGPU跟传统的GPU类似,具有固定数量的GPU帧缓冲器 阅读详情

相关推荐

Linuxmvcp命令区别及编程实例

mv命令用于移动文件或目录,或重命名文件或目录,而cp命令用于复制文件或目录。mv命令会修改源文件或目录的属性,而cp命令不会修改源文件或目录的属性。在Linux操作系统中,mvcp是两个常用的命令,用于在文件系统中移动复制文件或目录。本文将深入探讨mvcp命令区别,并提供相应的编程实例。函数,可以在脚本中执行mvcp命令,实现文件的移动复制操作。函数执行mvcp命令,实现了文件的移动复制操作。希望本文对你理解mvcp命令区别以及在编程中的应用有所帮助。表示要复制的源文件或目录,

DevGOOD的博客 493

inotify+rsync突然失效,同步文件失败

1、检查防火墙端口问题2、检查配置文件3、检查rsync是否开启等等4、以上步骤都检查不出错误,cat /var/log/rsync.log 查看日志发现密码文件权限错误,修改chmod +x /etc/rsyncd.secrets解决问题...

iris_csdn的博客 1888

Linuxmvcp指令的区别

1、功能上的区别 mv:用户可以使用该命令为文件或目录重命名或将文件由一个目录移入另一个目录中(该文件从原来的文件夹中消失)。 cp: 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中(该文件仍保存在原文件夹中)。 2、从inode角度来区分 mv:会将存储于indoe索引节点上的文件元信息也移动到新文件中。 cp : 只会复制文件数据,不会复制inode索引节点上的文件元信息。 参考 https://www.cnblogs.com/fqnb001/p/8777054.html ...

杨小浩浩的博客 8595

linux指令

基础指令 1、ls指 令含义:ls(list) 用法1:#ls含义:列出当前工作目录下的所有文件/文件夹的名称用法 2:#ls路径 含义:列出指定路径下的所有文件/文件夹的名称 关于路径(重要): 路径可以分为两种:相对路径、绝对路径 。相对路径:相对首先得有一个参照物(一般就是当前的工作路径) ;相对路径的写法:在相对路径中通常会用到2个符号“./”【表示当前目录下】、“../”【上一级目录下】。 绝对路径:绝对路径不需要参照物,直接从根“/”开始寻找对应路径; 用法3:#ls选项路

m0_68065558的博客 478

云原生高级必备基础

(1)软链接可以理解成快捷方式。windows下得快捷方式得作用是一样的。(2)软链接文件的大小、创建时间源文件不同。(3)软链接文件只是一个指向关系(从链接文件到源文件的指向关系),不是源文件的内容,大小不一样。说明:1.源文件被删除后,并没有影响硬链接文件;软链接文件在centos系统下不断的闪烁,提示源文件已经不存在2.重建源文件后,软链接不在闪烁提示,说明已经链接成功,找到了链接文件系统;

m2282475145的博客 1610

mvcp区别

mvcp区别

m0_71335202的博客 1206

linux cp mv区别,浅谈Linuxmvcp命令区别

1、功能上的区别mv:用户可以使用该命令为文件或目录重命名或将文件由一个目录移入另一个目录中。cp: 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中。2、从inode角度来区分mv:会将存储于indoe索引节点上的文件元信息也移动到新文件中。cp : 只会复制文件数据,不会复制inode索引节点上的文件元信息。测试效果如下图所示,注意看inode号的变化。mv命令执行后,test的ino...

weixin_39688750的博客 3450

linux系统mv是什么意思中文,浅谈Linuxmvcp命令区别

浅谈Linuxmvcp命令区别我之前在项目中遇到一个很奇怪的问题,对于inotify监视一个文件的时候,发现有些时候inotify有些时候会“失效”。后来我就没办法,去监视文件所在的目录。看下面的,#!/bin/bashsrc=/tmp/test/test.txt # directory to monitor/usr/local/bin/inotifywait -rmq -e m...

weixin_39632397的博客 579

浅谈Linuxmvcp命令区别--转载

我之前在项目中遇到一个很奇怪的问题,对于inotify监视一个文件的时候,发现有些时候inotify有些时候会 “失效”。后来我就没办法,去监视文件所在的目录。看下面的, [python] view plaincopyprint? #!/bin/bash src=/tmp/test/test.txt # directory to monitor /usr/loc...

weixin_30794851的博客 125

浅谈Linux基本命令

浅谈Linux基本命令 本篇文章作为Linux 入门的必备篇,主要简述Linux系统目录结构Linux 基本Shell命令,大致内容如下: ​ 一 Linux目录及其概述 如下目录为CentOS 7目录结构 ​ 1.建立目录 mkdir 该命令用来创建目录。 (1)一次性创建一个目录 mkdir mydir ​ (2)一次性创建多个目录 mkdir mydir1 ...

Alan_beijing 178

linux 基础知识(2)

文章目录一、基础知识1.1 inodeblock1.2 查看文件的inode1.3 cpmv命令区别1.4 参考1.5 硬链接1.6 软链接1.7 查看每个硬盘分区的inode总数已使用二、基础命令2.1 查看文件的创建时间2.2 三种时间介绍2.3 touch修改文件的时间2.4 touch指令创建文件的默认权限三、linux中的查找3.1 find命令3.2 find查找条件 一、基础...

初心魏的博客 189

Unix_Linux_AIX_常用命令总结

■前言 Unix,Linux 介绍 https://blog.csdn.net/sxzlc/article/details/103652857(介绍内容在文章底部) ■各种命令 0.cd 目录跳转 1.uname uanme -a 显示服务器全部信息 uname -n 显示服务器名字 2.ifconfig ifconfig -a 查看网络配置 3.who 显示当前在线用户 4.chown ch...............

sun0322 4万+

浅谈Linux操作系统(文件与目录)

众所周知,Linux在最初的时候是没有图形界面的,人们只能靠Linux的指令来进行操作。而在作为一个合格的后端人员,掌握一些基础的Linux指令是必不可少技能。 笔者也是刚接触了Linux一段时间,感受到了Linux的强大与复杂,因此,今天便谈一下自己对于Linux文件与目录方面的理解。 首先便来说说目录。在我们打开一个目录是,是需要知道改目录所在的路径的,我们在终端常用的比较简洁的方法便是直接将文件拖入终端中,来查看它所在的路径。而此时它的格式一般为 /user/share/doc等等之类的,而这便

qq_63434799的博客 1270

Linux基本指令

ls [选项] [目录或文件]对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。指令中的选项可以多个结合使用。当指令未明确指定文件 / 路径时,通常默认作用于当前工作目录(或有特殊默认行为的命令除外)。

2402_88062890的博客 940

【计算机网络】套接字编程(套接字API/UDPTCP服务器/网络相关指令)

本文介绍了网络编程中的端口号、TCP/UDP协议、网络字节序及套接字编程等内容。端口号用于标识进程,TCP是面向连接的可靠协议,UDP是无连接的快速协议。套接字编程涉及创建socket、填充sockaddr结构、绑定socket等步骤,并详细说明了UDPTCP专用的API函数。此外,文章还介绍了netstattelnet指令的使用方法,以及回环地址的特殊性。最后,通过示例代码展示了如何实现UDPTCP服务器与客户端的功能。

wefg1的博客 663

Linux操作系统常用命令(一)

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

END0728的博客 369
上一篇: inotify 安装
下一篇: Linux文件系统
firefoxbug
博客等级 码龄16年 259粉丝 165原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值