Linux中的文件分为HardLink和SymbolicLink两种。HardLink文件又被称为硬链接文件、实体链接文件,SymbolicLink文件则常被称为符号链接、股票量化交易软件,软链接文件。
HardLink
$ ll -i /etc/crontab
131213 -rw-r--r-- 1 root root 722 Nov 16 2017 /etc/crontab
$ sudo ln /etc/crontab .
$ ll -i /etc/crontab crontab
131213 -rw-r--r-- 2 root root 722 Nov 16 2017 crontab
131213 -rw-r--r-- 2 root root 722 Nov 16 2017 /etc/crontab
这两个文件名关联的inode号完全相同,都是13121所以它们指向的是同一个文件。同时请注意文件属性中的第三个字段,由1变成了这个字段被称为"链接数",它说明有多少个文件名链接到同一个文件的inode。另外需要注意的一点是上面所有输出中的第二个字段中的第一位,它们都是"-",它说明这个文件的类型为普通文件,链接类型为硬链接。
我们可以通过下来理解硬链接在文件系统中的实现方式:
硬链接的特点
几乎不额外占用空间只要还有一个文件名引用着文件,文件就不会被真正删除
硬链接的局限性
由于这两个限制,实际使用中硬链接并没有股票量化交易软件,软链接使用的广泛,下面我们看看究竟什么是软链接。
SymbolicLink
软链接的实现方式与硬链接有本质上的不同。创建软链接时会创建一个新的文件,新文件的datablock中存储了目标文件的路径。还拿/etc/crontab文件举例子,这次创建一个软链接并查看其文件属性:
$ sudo ln -s /etc/crontab crontab2
第一列,两个文件名对应的inode不同,说明这是两个文件。第二列显示的文件权限也不一样,这一点和硬链接完全不同。注意文件类型被标记为"l",说明这是一个软链接文件。第三列很有意思,注意/etc/crontab文件的链接数量,还是这和创建软链接文件crontab2前是一样的。也就是说创建软链接并不增加原文件的链接数。第六列是文件大大小,注意新建的软链接文件大小为12Bytes,也就是字符串"/etc/crontab"的长度。最后一列会友好的显示出软链接文件指向的源文件。
我们可以通过下来理解软链接在文件系统中的实现方式:
从上我们可以看出,软链接文件crontab2是一个实实在在的文件,有自己的inode和datablock。但是它的datablock中保存的是目标文件的地址:/etc/crontab。像open这样的API能够识别出软链接,并根据datablock中的目标文件径把操作重定向到目标文件上。
$ ln -s /bin testbin
更厉害的是,还可以跨文件系统创建软链接!
删除源文件对于软链接来说,删除源链接后,链接文件就会无法找到指向的源文件了。看下面的演示:
$ echo "hello world" > hello.txt
$ ln -s hello.txt hello2
$ cat hello2
hello world
$ rm hello.txt
$ cat hello2
cat: hello2: No such file or directory
删除原文件后,操作链接文件时的提示是:"Nosuchfileordirectory"。
文件的链接数
$ mkdir /home/nick/testdir
$ ll /home/nick | grep testdir
drwxr-xr-x 2 nick nick 4096 Jul 10 08:58 testdir/
/home/nick/testdir
/home/nick/testdir/.
ln命令
ln命令用来在文件之间建立链接,其的常用方式为:lnsourcetargetln-ssourcetarget它们分别用来创建硬链接文件和软链接文件。还有一个比较常用的选项是f,它会强制删除已经存在的目标文件。
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点