连接文件问题

ln sln

ln

在linux中会用到连接,之前学过hard link和symbolic link。这两个的解释如下:

文件创建时,会将数据写入到block中,同时建立一个inode,指向block地址。读取文件信息的时候先通过文件名找到inode,通过inode找到数据。

  • hard link:创建hard Link既是另外一个文件名保存了相同的inode信息

    1
    2
    917514 -rw-r--r--  2 narcissus narcissus     0 Mar 24 22:32  1
    917514 -rw-r--r-- 2 narcissus narcissus 0 Mar 24 22:32 1.h
  • symbolic link:创建了一个文件,这个文件保存了连接文件的路径,通过路径找到信息

区别:

  • hard link:
    • 不能建立目录的连接
    • 删除其中一个连接/原始文件,不影响其它连接
    • 可以随意移动原始文件位置
  • symbolic link:
    • 可以建立目录的连接
    • 删除了原始文件后,连接失效
    • 不能改变原始文件位置

有一个错误的简单理解方法:那就是将hard link理解为复制,将symblic link理解为一个快捷方式。

sln

今天发现还有这个命令,解释如下:

1
The  sln  program  creates  symbolic  links.   Unlike the ln(1) program, it is statically linked.  This means that if for some reason the dynamic linker is not working, sln can be used to make symbolic links to dynamic libraries.

它仍然为一个symbolic link,不过是静态的连接,可以解决某些动态库无法调用时的问题。

那么说说动态库和静态库的区别:

  • 动态库会在程序调用时个根据链接去寻找库文件
  • 静态库则是将所需的库文件打包好,编译进程序里面。

差异:

  • 动态库占用系统空间少,许多库可以共享,当然如果出现库缺失的情况那么程序会报错
  • 静态库占用系统空间多,不需要共享,不会出现缺失库的问题

所以sln则是用来解决动态库链接失效的问题。至于具体在什么情况下会使用到这个呢?暂时没有遇到过