unlink 和 rm 在 unix 上的区别

2024-04-04

这两个命令之间真正的区别是什么?为什么删除文件的系统调用叫unlink代替delete?


你需要了解一些关于原始 Unix 文件系统的知识才能理解这个非常重要的问题。

与同时代的其他操作系统(60 年代末、70 年代初)不同,Unix 没有将文件名与实际文件名一起存储。目录信息(文件存储在磁盘上的位置)。相反,Unix 创建了一个separate "索引节点表“包含目录信息,并识别实际文件,然后允许单独的文本文件成为名称和索引节点的目录。最初,目录文件应该像所有其他文件一样作为直接文本文件进行操作,使用相同的工具(cat, cut, sed等)是 shell 程序员至今所熟悉的。

这一架构决策的一个重要后果是单个文件可以有多个名称!特定目录文件中索引节点的每次出现本质上都是linking到 inode,所以它是已知的。要将文件名连接到文件的索引节点(“实际”文件),您需要“链接”它,而当您从目录中删除该名称时,您需要“取消链接”它。

当然,取消文件名链接确实可以not自动意味着您正在从磁盘中删除/删除该文件,因为该文件在其他目录中可能仍以其他名称命名。 Inode表还包括一个链接数跟踪一个 inode(一个文件)有多少个名字;将名称链接到文件的链接计数会增加 1,取消链接则会删除链接计数。当链接计数降至零时,该文件不再在任何目录中被引用,被认为是“不需要的”,只有这样才能将其删除。

因此,按名称“删除”文件unlinks它 - 因此是系统调用的名称 - 并且还有非常重要的ln命令创建一个到文件(实际上是文件的索引节点)的附加链接,并以另一种方式显示它。

其他较新的操作系统及其文件系统必须模拟/尊重此行为才能符合 Posix 标准。

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

unlink 和 rm 在 unix 上的区别 的相关文章

随机推荐

  • 导入错误:无法导入名称“语言”

    我正在尝试运行 python 脚本 但收到此错误 from iso639 import languages ImportError cannot import name languages 我已经安装了iso639 但仍然出现此错误 任何想
  • 如何在 PHP 中从 ipinfo.io 获取位置?

    我在用ipinfo io http ipinfo io使用 PHP 获取我当前的城市 位置 但是 使用这段代码时我无法看到我的城市 ipaddress SERVER REMOTE ADDR function ip details ip js
  • Rails:如何限制 has_many 关联中的项目数量(来自父级)

    我想限制协会中的项目数量 我想确保用户拥有的东西不超过 X 件 这个问题之前被问过 https stackoverflow com questions 7863618 rails 3 1 limit user created objects
  • flutter 使用 url_launcher uri 发送电子邮件

    我正在使用 url launcher 在我的应用程序中使用系统电子邮件发送电子邮件 我正在使用下面的代码 这个人做得很好 void launchEmailSubmission async final Uri params Uri schem
  • 类只有静态字段和方法是不好的做法吗?

    我有一堂课 其中包括only静态成员变量和静态方法 本质上 它充当通用实用程序类 类只包含静态成员变量和静态方法是不好的做法吗 不 我一点也不这么认为 拥有一个充满实例方法的类是更糟糕的做法 而这些实例方法实际上并不依赖于特定实例 使它们静
  • int b=0,a=1;b=++a+++a; b 的值是多少?它的计算方法是什么? [复制]

    这个问题在这里已经有答案了 int main int b 0 a 1 initialize a and b b a a calculate assign the value of b print f d b return 0 b 的值是多少
  • CMake不知道Qt4 qmake在哪里

    我正在使用 Debian 操作系统 我试图指出 cmake 我的 Qt4 在哪里 我尝试构建 qjson 库及其 CMakeLists txt http pastebin com fKNp0Qgy http pastebin com fKN
  • 如何使用 os.listdir 仅选择一种文件类型?

    连接同一图像的 10 个条带后 我想将它们转换为反射率 然后将它们除以 10 000 尽管如此 我的文件夹中有两种类型的文件 但我只想将代码应用于 my img 文件而不是 hdr 您知道我如何使用 os listdir 进行此选择吗 我的
  • Jenkins 多配置项目处理并发设备使用

    Case 我有一个詹金斯奴隶女巫在移动设备 android ios 上运行葫芦测试 为了区分测试在哪些机器 iOS 的 mac 或 Android 的 Linux 上运行 我还使用Throttle 并发构建插件 通过这种方式 我可以区分设备
  • Spring Boot + Spring Security + CORS 中没有“Access-Control-Allow-Origin”

    我正在尝试使用 Spring security 进行 CORS 这是我的 WebSecurityConfigurerAdapter Configuration public class SecurityConfig extends WebS
  • 仅允许从触发器内插入

    我是 SQL 编程新手 我在网上找不到这个问题的答案 我正在使用 pl pgsql 希望获得以下结果 我有一个具有某些属性的表 A 我应该随时更新此表 因此 每当进行可能影响 A 值的更改 在与 A 相关的其他表 B 或 C 中 时 都会触
  • 如何删除启动画面之前出现的白屏?

    打开 java 文件时 我首先看到空白屏幕 然后出现闪屏布局 我有java文件 new Handler postDelayed new Runnable Override public void run Task finish ARG SP
  • 与 HibernateTemplate 和 SessionFactory 的单个数据库连接

    在java方面 一切工作正常 但是当我查看V SESSION特殊的oracle表 以及记录任何登录或注销操作的日志表时 这是一场灾难 每个查询都会执行登录 注销操作 所以这是我的问题 有没有办法配置 Spring 与数据库有一个唯一的连接
  • 从 .vbs 文件调用 VBA 宏会引发 800A03EC 错误

    我正在尝试通过 VBS 文件 文件名 Check final vbs 运行 VBA 宏 这是代码 Option Explicit run macro Sub run macro Dim xl1 Dim sCurPath Dim xlBook
  • 空响应返回 204

    当我执行 GET 请求但没有找到任何数据时 我的控制器返回 204 Route user v1 controller public class UserLoginController Controller HttpGet public as
  • 使用 Moq 模拟存储库

    为了模拟存储库 我使用下面的代码 我不明白为什么变量empl总是null 你知道我错过了什么吗 Thanks TestMethod public void Test var employee new Employee EmployeeID
  • Plotly.express choropleth 仅显示一种颜色

    我正在尝试使用创建一个 choroplethplotly express 该图能够加载 但它只显示一种颜色 我可以将鼠标悬停在每个功能上 它会显示相关信息 但不以可变颜色显示 这意味着它正在读取 geojson 但无法正确显示 u geds
  • 情节子图与规格问题,值错误

    我正在尝试使用辅助 y 轴和绘图子图绘制 3 个子图 但无论我如何尝试 仍然会遇到此类错误 值错误 make subplots 的 specs 参数必须是维度为 3 x 1 的字典的 2D 列表 收到类型 的值 secondary y Tr
  • 捆绑 JavaScript 课程 Uncaught SyntaxError: Unexpected token <

    使用mvc4课程的bundle功能 未捕获的语法错误 意外的标记 加载时 和debug true 一切都像例外一样工作 我该如何解决该错误 或 者我可以禁用脚本的捆绑功能吗 Solved 重命名了捆绑包名称 使其与任何目录都不匹配 在回答导
  • unlink 和 rm 在 unix 上的区别

    这两个命令之间真正的区别是什么 为什么删除文件的系统调用叫unlink代替delete 你需要了解一些关于原始 Unix 文件系统的知识才能理解这个非常重要的问题 与同时代的其他操作系统 60 年代末 70 年代初 不同 Unix 没有将文