这些基本 Unix 命令的幕后发生了什么?

这些基本 Unix 命令的幕后发生了什么?

我只是在玩一些基本的 Unix 命令和以下操作

  1. 创建一个文件“一”
  2. 创建“二”到“一”的链接 ( ln one two)
  3. 编辑文件“one”并将单词 - 一、二、三、四放在不同的行上。
  4. 检查了“两个”的内容 - 它具有相同的内容,到目前为止一切顺利。
  5. 创建“三”对一的软链接。三个也有相同的内容
  6. 使用 验证链接数量ls -l
  7. 编辑文件“一”并在单独的行上添加单词“五”。
  8. 检查文件“二”和“三”是否具有相同的内容 - 到目前为止一切顺利
  9. 编辑了软链接三 ( vim three) 并在末尾添加了“六”字样。
  10. 查了一下,三个文件现在都有一到六个字。

问题 - 我知道文件“一”是否获取文件“三”的内容。但为什么文件“二”也能得到它们呢?

如果我这样做ls -l,我会看到文件一和文件二有 28 个字节,而文件三只有 3 个字节(可能有 6 个字节)。这是什么原因呢?

现在,如果我删除文件“一”,我会看到三个仍然显示为链接到一个,但我不能cat three并收到文件不存在的错误。但是为什么会在ls命令中显示呢?

答案1

为什么文件“二”也得到它们?

ln(1)根据手册页,默认情况下会创建硬链接,而“two”是“one”的硬链接:

文件的硬链接与原始目录条目无法区分;对文件的任何更改实际上都独立于引用该文件的名称。


如果我执行 ls -l,我会看到文件一和文件二有 28 个字节,而文件三只有 3 个字节(可能有 6 个字节)。这是什么原因呢?

因为文件内容有28个字节,如下所示:

$ wc -c <<<'one two three four five six'
      28

除了用空格替换的新行字符。

对于文件“三”,它是一个符号链接。符号链接包含它所链接的文件的名称。因此“三”的大小与文件“一”的名称大小相同,为 3 个字节。


现在,如果我删除文件“一”,我会看到三个仍然显示为链接到一个,但我无法识别三个并收到文件不存在的错误。但为什么它会显示在 ls 命令中呢?

如果删除文件“一”,“三”将成为损坏的符号链接。符号链接是一种特定的文件类型,除非您明确删除它,否则当它链接到的文件被删除时,它不会消失。

相关内容