我只是在玩一些基本的 Unix 命令和以下操作
- 创建一个文件“一”
- 创建“二”到“一”的链接 (
ln one two
) - 编辑文件“one”并将单词 - 一、二、三、四放在不同的行上。
- 检查了“两个”的内容 - 它具有相同的内容,到目前为止一切顺利。
- 创建“三”对一的软链接。三个也有相同的内容
- 使用 验证链接数量
ls -l
。 - 编辑文件“一”并在单独的行上添加单词“五”。
- 检查文件“二”和“三”是否具有相同的内容 - 到目前为止一切顺利
- 编辑了软链接三 (
vim three
) 并在末尾添加了“六”字样。 - 查了一下,三个文件现在都有一到六个字。
问题 - 我知道文件“一”是否获取文件“三”的内容。但为什么文件“二”也能得到它们呢?
如果我这样做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 命令中呢?
如果删除文件“一”,“三”将成为损坏的符号链接。符号链接是一种特定的文件类型,除非您明确删除它,否则当它链接到的文件被删除时,它不会消失。