[linux]cp和mv对文件和链接影响的区别

news/2024/7/2 1:19:28

  好久不写blog了。。。加油,继续写blog。今天和同事讨论到一个问题,问题描述:

  有文件a,a1为其硬链接,即: ln a a1

  现在有文件b,对其进行以下两种操作:

    1. mv b a

    2. cp b a

      问这两种操作对a1有何影响?

 

     这个问题以前还真没关注过,之前的项目的做法是对一个文件用ln old back, 然后mv back histroy/,过一段时间若有新文件产生是进行mv new old操作并做类似的backup操作,没有想过在做mv new old的时候是否对之前的back文件造成任何的影响(毕竟backup文件在不出问题的情况下没人去关心)。

  今天做了一个实验搞明白了其中的奥秘。

  1. 创建文件a 和 ln a a1

  2. 创建文件b

 

  

  3. 执行mv b a

  

  可以看出a的inode变为了b的inode,而a1不变。并且a的变为b文件的内容,a1内容不变。

  而且a1对应的inode的引用数变为了1。

  4. 将环境重置

 

  

  5. 执行 cp b a

 

  

  可以看出inode和引用数没有发生变化, 但是a和a1的内容变为了b的内容。

  6. 执行 cp a a2

 

  

  这时可以看出a2的inode已经和a、a1不同,并且a,a1的inode和引用数都没有发生变化。

 

  结论: mv 操作只是改变文件的inode,并没有对inode所指向的磁盘block做任何的改动。

      cp操作是改变(创建)inode所指向的block(在创建时,会分配新的block)。

 

      注:cp -i选项不在此讨论范围内。

转载于:https://www.cnblogs.com/wwillforever/archive/2012/01/30/2332396.html


http://www.niftyadmin.cn/n/1493280.html

相关文章

【机器学习】【操作系统】【网络】【算法与数据结构】知识汇总

机器学习 L1不可导的时候该怎么办 操作系统 堆栈区别 堆和栈的区别: 一、堆栈空间分配区别: 1)、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其…

记录tomcat服务器开启关闭时间

1、IO流 package com.zy.exercise; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import javax.servl…

graph embedding源码阅读

文章目录LINEstruc2vec计算结构距离计算每个结点的有序度序列遍历边表的顶点,每个都计算有序度序列LINE 看到 ge.models.line.LINE#_gen_sampling_table node_degree 表示出度 归一化后,得到顶点的分布norm_prob,然后算alias_table 构建al…

ORM到底如何使用了?

公司最近一个项目用到了实体类,借助其他成熟的框架实现了orm,可是在使用过程中却对于多表查询支持并不好。nbear看上去orm挺不错的,有空得研究下看看代码转载于:https://www.cnblogs.com/ocean2000/archive/2007/06/13/781755.html

Kubeflow调研

文章目录Kubeflow基本概念创建Kubeflow的Component通过Yaml定义在代码中创建在Jupyter中创建Kubeflow的架构TensorFlow Training 的支持 (TFJob)与 Jupyter Notebook 的整合KFServing以解决一个分子属性预测问题为例,阐述如何用kubeflow实现Kubeflow 的总结Kubeflow…

利用consul在spring boot中实现最简单的分布式锁

因为在项目实际过程中所采用的是微服务架构,考虑到承载量基本每个相同业务的服务都是多节点部署,所以针对某些资源的访问就不得不用到用到分布式锁了。 这里列举一个最简单的场景,假如有一个智能售货机,由于机器本身的原因不能同一…

Oracle常用结构或函数使用笔记一

With用法: The WITH query_name clause lets you assign a name to a subquery block. You can then reference the subquery block multiple places in the query by specifying the query name. Oracle optimizes the query by treating the query name as either…

*在scanf printf中的作用

在网上看到的&#xff0c;贴过来记录一下 http://www.cppleyuan.com/viewthread.php?tid9428 一个有趣的打印菱形的程序 1 #include <stdio.h>2 3 int line 1;4 int main()5 {6 printf("%*s\n",7 7-(line>4? line-4: 4-line),8 …