【问题标题】:Linux: The command ls -la shows a file pointing to another file. What does that mean?Linux:命令 ls -la 显示指向另一个文件的文件。这意味着什么?
【发布时间】:2013-07-09 20:24:16
【问题描述】:

当我输入ls -la 列出所有文件时,我看到了:

11 Jul  9 12:04 libcrypto.so -> libcrypto.so.0

我尝试更改 libcrypto 的名称:

mv libcryto.so libpmcrypto.so

现在它显示了:

11 Jul  9 12:04 libpmcrypto.so -> libcrypto.so.0

这有什么影响吗?箭头是什么意思?

【问题讨论】:

  • 箭头表示libcrypto.so 是(曾经)一个符号链接。重命名它将破坏任何以名称libcrypto.so 查找该共享库的二进制文件(或其他共享库,或构建程序,或...)。

标签: bash symlink ls


【解决方案1】:

有问题的文件是一个符号链接。这在概念上类似于快捷方式的概念,但如果您使用它(打开、复制等),它似乎是真正的文件。符号链接是“指向”真实文件的另一个名称。当您执行ls -l 时,它还会向您显示链接指向的文件。重命名链接对原始文件没有影响,但可能会破坏依赖链接名称的内容,就像任何其他文件名一样。删除链接只是删除指针,对原始文件没有影响。删除原始文件将使链接处于“断开状态”,链接指向任何内容。

编辑 您无法真正编辑符号链接指向的内容。您可以使用rm 删除它们,然后使用ln -s 命令重新创建它们。查看手册页以获取更多信息。

【讨论】:

  • 感谢您的回答。所有这些文件都链接在一起。如何编辑此链接?例如,它是这样的:A->B。 B->C。 C. 但是现在我将 C 的名称更改为 D,这破坏了所有链接。 A & B 变空。我怎样才能做到 B->D?
【解决方案2】:

-> 表示 libpmcrypto.so 是一个符号链接,存储在 libcrypto.so.0 中的信息可通过 libpmcrypto.so 文件访问。

如何创建符号链接:

ln -s [TARGET DIRECTORY OR FILE] ./[SHORTCUT]

例如:

ln -s /usr/local/apache/logs /home/el/logs

如果您删除软链接本身 (/home/el/logs),文件 (/usr/local/apache/logs) 仍然存在。

如何找到符号链接:

find ./ -type l

阅读 man ln 了解有关链接的更多信息。

【讨论】:

    【解决方案3】:

    ls -la 将使用符号链接显示指向模块的文件

    例如,在您的库目录中,您有指向 .so 文件(共享对象)的文件。

    这意味着它不需要重新编译。您没有简单的方法来判断文件是如何链接的。

    【讨论】:

      【解决方案4】:

      是的,这确实改变了一些东西,事实上你不应该改变共享库,因为当第 3 方程序尝试调用 libcryto.so 时,它不会再存在了。

      但如果您确定要更改名称,我建议您在超级用户模式下调用 nautilus:

      sudo nautilus /THE/FOLDER/WHERE/YOUR/FILE/IS
      

      并通过在符号链接名称的末尾添加 .0 来手动编辑它。您正在更改其名称的一部分,因此每当程序尝试调用它时,它都无法找到它。

      【讨论】:

        猜你喜欢
        • 2012-03-17
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 2020-06-03
        • 2012-10-10
        • 1970-01-01
        • 2012-10-06
        • 1970-01-01
        相关资源
        最近更新 更多