UNIX 命令 mv 和 rm 如何处理打开的文件?

2024-01-19

如果我正在读取存储在 NTFS 文件系统上的文件,并且尝试在读取该文件时移动/重命名该文件,我将无法这样做。如果我在 UNIX 文件系统(例如 EXT3)上尝试此操作,它会成功,并且执行读取的进程不受影响。我什至可以 rm 文件并且读取过程不受影响。这是如何运作的?有人可以向我解释为什么这种行为在 UNIX 文件系统下受支持,但在 NTFS 下不受支持吗?我有一种模糊的感觉,它与硬链接和索引节点有关,但我希望有一个好的解释。


Unix 文件系统使用引用计数和两层架构来查找文件。

文件名指的是一个叫做inode https://secure.wikimedia.org/wikipedia/en/wiki/Inode,对于信息节点或索引节点。索引节点存储(指向)文件内容以及一些元数据,例如文件的类型(普通、目录、设备等)以及谁拥有它。

多个文件名可以引用同一个 inode;然后他们被称为硬链接 https://secure.wikimedia.org/wikipedia/en/wiki/Hard_link。此外,还有一个文件描述符 https://secure.wikimedia.org/wikipedia/en/wiki/File_descriptor(fd) 指的是索引节点。 fd 是进程打开文件时获取的对象类型。

Unix 文件系统中的文件只有在最后一个引用消失时才会消失,即不再有名称(硬链接)或 fd 引用它时。所以,rm实际上并没有删除文件;它删除了一个参考 a file.

这种文件系统设置可能看起来很混乱,有时会带来问题(尤其是 NFS),但它的优点是对于许多应用程序来说不需要锁定。许多 Unix 程序也利用这种情况,打开一个临时文件,然后立即将其删除。一旦它们终止,即使它们崩溃,临时文件也会消失。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UNIX 命令 mv 和 rm 如何处理打开的文件? 的相关文章

  • 如何杀死 Linux 中特定端口上运行的进程?

    我尝试使用关闭tomcat shutdown sh来自雄猫 bin目录 但发现服务器没有正常关闭 因此我无法重新启动我的 tomcat 正在端口上运行8080 我想杀死正在运行的tomcat进程8080 我首先想要获得在特定端口 8080
  • 如何根据第一列的内容分割一个巨大的csv文件?

    我有一个 250MB 以上的巨大 csv 文件要上传 文件格式是group id application id reading数据可能看起来像 1 a1 0 1 1 a1 0 2 1 a1 0 4 1 a1 0 3 1 a1 0 0 1 a
  • 如何在嵌入式Linux中高效地在VFAT分区上创建大文件

    我正在尝试在嵌入式 Linux 盒子中使用 dd 命令在 VFAT 分区上创建一个大的空文件 dd if dev zero of mnt flash file bs 1M count 1 seek 1023 目的是跳过前 1023 个块并在
  • 在自己的处理程序中捕获信号

    include
  • grep UNIX 中的一个选项卡

    我如何grepUnix 平台上文件中的制表符 t 如果使用 GNU grep 则可以使用 Perl 风格的正则表达式 grep P t
  • unix系统上C++中的简单glob?

    我想检索遵循此模式的所有匹配路径vector
  • Linux 消息队列 - 多个接收者

    我最近一直在研究和研究 Linux 消息队列 并遇到了一些我不太明白为什么会发生的事情 如果我们运行两个程序 它们都在无限 for 循环中使用 msgrcv 来检查消息 然后发送两条消息 那么第一个运行的程序将收到第一条消息 第二个程序将收
  • 在 shell 脚本中禁止输出到屏幕

    你好 我写了一个小脚本 usr bin ksh for i in DAT do awk BEGIN OFS FS 3 353 3 353861958962 print i gt gt i changed awk 3 353 i change
  • Java更改系统换行符

    在 Windows 上 使用System out println 打印出来 n r而在 Unix 系统上你会得到 n 有没有办法告诉java你想使用什么换行符 正如其他人已经说过的 系统属性line separator包含实际的行分隔符 奇
  • 我不明白这个 fork() 的例子

    我有这个代码示例 但我不明白为什么这段代码会创建 5 个进程加上原来的进程 总共6个过程 include
  • 递归相对于 git rm -r [文件名] 意味着什么

    我正在学习一些 git 教程 但不明白运行之间的区别 git rm path to file and git rm r path to file 递归到底是什么意思 提前致谢 从 git rm 手册页 主目录名称 例如dir去除dir fi
  • Curl,发布当前时间

    我每小时使用 cronjob 我在 Mac 上 触发此命令 usr bin curl s data gr 0123 press OK http www myurl com myphp php gt dev null 有没有办法以 HH MM
  • 使用curl复制本地文件[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有办法用curl复制本地文件 我需要它作为cp命令的替代品 这有点奇怪 但我正在一个 cp 不可用的环境中工作 你可以说 curl o
  • 缺少 /var/lib/mysql/mysql.sock 文件

    我正在尝试访问 mysql 当我运行 mysql 命令时 我得到以下信息 root ip 10 229 65 166 tpdatabase 1 8 0 28356 mysql 错误 2002 HY000 无法连接到 通过socket本地My
  • 如何在 ruby​​ 中后台运行多个外部命令

    给定这个 Unix shell 脚本 test sh bin sh sleep 2 sleep 5 sleep 1 wait 时间 test sh real 0m5 008s user 0m0 040s sys 0m0 000s 如何在 U
  • 如何使用 shell 脚本 ftp 多个文件

    我正在尝试使用 shell 脚本将多个文件从一台计算机传输到另一台计算机 下面是我的脚本 ftp nv lt
  • PHP exec - 检查是否启用或禁用

    有没有办法检查 php 脚本是否exec 在服务器上启用还是禁用 这将检查该功能是否确实有效 权限 权利等 if exec echo EXEC EXEC echo exec works
  • 使用 AWK 或 SED 以及以下标签以逗号分隔

    使用 AWK 或 SED 以及下面使用的标签以逗号分隔 BEGIN AccountID BEGIN CallerID BEGIN Billed Account Attributes 1111111 1111111 1111111 END B
  • 如何触发并忘记子进程?

    我有一个长时间运行的进程 我需要它来启动另一个进程 该进程也会运行很长一段时间 我只需要开始它 然后就完全忘记它 我设法通过从 Ruby 编程 一书中获取一些代码来完成我需要的操作 但我想找到最好 正确的方法 并了解发生了什么 这是我最初得
  • 将多个参数传递给 UNIX shell 脚本

    我有以下 bash shell 脚本 理想情况下我会用它来按名称杀死多个进程 bin bash kill ps A grep awk print 1 然而 虽然此脚本有效 但传递了一个参数 端镀铬 脚本名称为end 如果传递多个参数 则它不

随机推荐

  • 有什么方法可以将 HTML 添加到 Xamarin.Forms 页面中吗?

    我希望能够将一些 HTML 添加到 Xamarin Forms 页面中 这可能吗 是否可以将其添加为标签的一部分 如果您想要完整的 html 支持 那么 Xamarin formsWebView将会是一个不错的选择 但如果你想要一些基本的格
  • Angular 2,设置默认值以选择选项

    我尝试为选项添加默认值 它就像一种占位符 我使用这个方法 https stackoverflow com questions 5805059 how do i make a placeholder for a select box去做吧 在
  • 混合 C++ ABI 以针对遗留库进行构建

    情况是这样的 我有一个使用最新 GCC 4 3 3 的 C 代码库 但我需要链接到使用 GCC 3 2 3 构建的旧库 该库没有可用的新版本 我不能没有它 而且它是闭源的 因此无法重建 这似乎造成了一个问题 因为 GCC 4 3 3 和 3
  • 用 PHP 编译带有多个附件的电子邮件

    我需要从 PHP 发送一封包含多个图像附件的电子邮件 我目前有一个使用两个硬编码图像的测试设置 我用所有必要的标题编译电子邮件并将其发送出去 但是 当我收到它时 它只显示第一张图片作为附件 第二张图片似乎被忽略了 使用 Groupwise
  • 将关联数组变成类似于 Eloquent 查询集合的集合

    我有一个正在接收 API 数据的类 我想将所有响应包装到一个集合类中 因此 我从 API 调用接收数据 将其转换为普通的关联 php 数组 并使用collect helper 我本以为它能像 Eloquent 一样工作 你可以将键引用为集合
  • 如何使用 Selenium Web 驱动程序上传文件/处理窗口

    我正在尝试自动化一个场景 在该场景中我必须上传文档 但我无法处理上传文件一旦我单击网络应用程序上的 选择文件 按钮 就会出现窗口 我使用的是 C 语言和 Chrome 浏览器 我的 C 测试用例 Test Description JAVA
  • ARM 模板部署不会删除旧管道

    我正在使用 ARM 模板部署我的数据工厂 当我删除管道时 旧版本不会从目标环境中删除 重命名也会发生同样的情况 我的目标环境包含一个具有旧名称的管道和一个具有新名称的管道 如何删除带有 ARM 模板部署的旧管道 注意 我只想删除数据工厂内的
  • Mathematica 中的树数据结构

    我主要使用mathematica 作为数学工作台和编写相对较小的临时程序 然而 我正在设计一个系统 打算在 Mathematica 中编程 我需要将数据存储在树中 并搜索和遍历树 尽管我知道如何实现树 但我更喜欢标准的 经过测试的代码 我在
  • Spring:正确设置@ComponentScan

    我为我的设置进行了以下设置Spring Application Context Configuration public class RmiContext Bean public RmiProxyFactoryBean service Rm
  • 可空类型“int”的默认值是多少? (包括问号)?

    在C 中 类型的类实例变量的默认值是多少int 例如 在下面的代码中 什么值将MyNullableInt如果从未明确分配的话有吗 class MyClass public int MyNullableInt 看来答案几乎肯定是null or
  • 无法删除表用户,因为其他对象依赖于它

    我想将我的表删除到数据库中 但是 当我使用时 例如 DROP TABLE if exists users 我收到这条消息 cannot drop table users because other objects depend on it
  • Laravel 路由不调用控制器的功能

    我在页面 刀片 中有一个表单 它重定向到一个路由 该路由要调用控制器中的函数 但它甚至不会进入函数内部 因为即使是简单的 dd 不能被执行 在途中 如果我更改为 Route post edit profile function Reques
  • 无法使用自定义样式编织为 pdf

    尝试使用自定义 mystyles sty 文件从 RStudio 编织为 pdf 这曾经工作正常 但现在我已经升级到 RStudio 1 044 我收到错误 Example title Test output pdf document in
  • 分析(可能受 I/O 限制)进程以减少延迟

    我想提高大型应用程序中特定方法的性能 目标是改善延迟 特定功能所花费的挂钟时间 而不是 必然 系统负载 要求 由于我预计大部分延迟是由 I O 造成的 因此请考虑等待 阻塞所花费的时间 换句话说 查看挂钟时间而不是 CPU 时间 由于该程序
  • 已解析的依赖项中存在不兼容的版本

    我正在尝试运行我的 python 项目 该项目似乎在我的 Mac 上运行良好 在 pycharm 中最好 不太好 但可以在 VSCode 中运行 但在 VSCode 中的树莓派上运行得很糟糕 每当我运行pipenv shell然后一个pip
  • StepFunction 的 Choice 规则检查数组字段是否为空

    有没有办法在 Step Function 中创建选择规则来确定数组字段是否有元素 当前 StepFunction 文档 https docs aws amazon com step functions latest dg amazon st
  • 在 C 和 C++ 中 main() 应该返回什么?

    定义的正确 最有效 方法是什么main C 和 C 中的函数 int main or void main 为什么 那么论点又如何呢 如果int main then return 1 or return 0 返回值为main指示程序如何退出
  • 使用蓝牙在其他 iOS 设备上拍照

    如果有 iOS 蓝牙经验的人可以向我展示如何使用蓝牙类在其他 iOS 设备上拍照 我将不胜感激 该应用程序允许用户登录 注册 然后拍摄并上传照片 http www raywenderlich com 13511 how to create
  • 使用 PHP 将特殊字符转换为普通字符,例如将 ã、é、ç 转换为 a、e、c [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想使用 PHP 将特殊字符转换为普
  • UNIX 命令 mv 和 rm 如何处理打开的文件?

    如果我正在读取存储在 NTFS 文件系统上的文件 并且尝试在读取该文件时移动 重命名该文件 我将无法这样做 如果我在 UNIX 文件系统 例如 EXT3 上尝试此操作 它会成功 并且执行读取的进程不受影响 我什至可以 rm 文件并且读取过程