软链接和硬链接
问题来源:在配置Apache的SSL功能时,在配置过程中,发现最后启动配置项的/etc/apache2/sites-enabled/default-ssl.conf时,报错:
site default-ssl not properly enabled, default-ssl.conf is a real file
当时看到这个信息,不可以是真实的文件,以及之前看过的配置文件的内容,这个部分用ls -lah
输出之后,会指定l
,也就是软链接。但是,软链接和硬链接好像很久之前看过,也不知道该怎么指定。
翻阅《Linux/UNIX系统编程手册》之后,整理一下信息。
针对驻留于文件系统上的每个文件,文件系统的i节点表会包含一个i节点(索引节点的简称),也就是i-node
。ls -li
中的i
代表输出的文件的i-node
信息,在第一列表示。文件i-node
存储的信息列表不包含文件名,而是通过目录列表中的一个映射来定义文件名称,这种特性,导致系统可以在相同或不同的目录中创建多个名称,每个都指向相同的i-node
节点,也就是硬链接。
硬链接
我们可以通过ln sth hard-file
来为sth
创建一个硬链接,如下我在Mac OS中测试的结果:
macdeMac:Desktop mac$ echo -n 'It is good to collect things, ' > abcmacdeMac:Desktop mac$ ls -li abc36095670 -rw-r--r-- 1 mac staff 30 11 27 20:15 abcmacdeMac:Desktop mac$ ln abc xyzmacdeMac:Desktop mac$ echo ' but it is better to go on walks.' >> xyzmacdeMac:Desktop mac$ ls -li abc xyz36095670 -rw-r--r-- 2 mac staff 64 11 27 20:16 abc36095670 -rw-r--r-- 2 mac staff 64 11 27 20:16 xyz
其中第三列为对i-node
的计数,当执行ln
命令之后,可以发现计数为2
,也就是指向这个文件的有两个名字,相同的xyz也是2。
当删除一个文件时,另一个文件作为一个独立的个体仍然存在。
macdeMac:Desktop mac$ rm abcmacdeMac:Desktop mac$ ls -li xyz36095670 -rw-r--r-- 1 mac staff 64 11 27 20:16 xyz
只有当i-node
的计数为0时,才会释放文件的i-node
记录和数据块。
硬链接具有如下的 限制:
硬链接对文件的指代采用了i-node
编号,而i-node
编号的唯一性仅在一个文件系统之内才能得到保障,所以硬链接必须与其指代的文件驻留在同一文件系统中。不能为目录创建硬链接,避免出现混乱的连接环路。
软链接(符号链接)
这是一种特殊的文件类型,其数据是另一个文件的名称。由命令ln -s
来创建,ls -F
的输出结果会在符号链接的尾部标记@
符号链接可以用于链接不同文件系统中的一个文件,而对硬链接的那些制约就不会困扰到符号链接,可以为目录创建符号链接。
ln -s sth asth
为asth创建一个指向sth的软链接,这是一个实际存在的文件,只是指向另一个文件。当查找时会通过这个软链接去查找,修改时,也会对两个文件同时造成修改。
不如硬链接的就是,它一旦更改目录就会导致软链接无法使用。
macdeMac:Desktop mac$ ln -s xyz iomacdeMac:Desktop mac$ ls -alh xyz iolrwxr-xr-x 1 mac staff3B 11 27 20:30 io -> xyz-rw-r--r-- 1 mac staff 64B 11 27 20:16 xyzmacdeMac:Desktop mac$ cat xyzIt is good to collect things, but it is better to go on walks.macdeMac:Desktop mac$ cat ioIt is good to collect things, but it is better to go on walks.macdeMac:Desktop mac$ echo 'lll' >> iomacdeMac:Desktop mac$ cat xyzIt is good to collect things, but it is better to go on walks.lllmacdeMac:Desktop mac$ cat ioIt is good to collect things, but it is better to go on walks.lllmacdeMac:Desktop mac$ echo 'ooo' >> xyzmacdeMac:Desktop mac$ cat xyzIt is good to collect things, but it is better to go on walks.lllooomacdeMac:Desktop mac$ cat ioIt is good to collect things, but it is better to go on walks.lllooo
岁月漫长,也值得等待
如果觉得《「Linux」软链接和硬链接 site default-ssl not properly enabled default-ssl.conf is a real file》对你有帮助,请点赞、收藏,并留下你的观点哦!