分享

Linux — 硬链接与符号链接

 e3399 2012-05-05
分类: Linux开发

硬链接只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引( inode)。当移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置。如果您删除的文件有相应的硬链接,那么这个文件依然会保留,直到所有对它的引用都被删除。(每添加一个硬链接计数器+1,查处一个硬链接,计数器-1,当计数器为0时,文件即被删除)

符号链接是一个指针,指向文件在文件系统中的位置。符号链接可以跨文件系统,甚至可以指向远程文件系统中的文件。符号链接只是指明了原始文件的位置,用户需要对原始文件的位置有访问权限才可以使用链接。如果原始文件被删除,所有指向它的符号链接也就都被破坏了。它们会指向文件系统中并不存在的一个位置。(删除符号链接并不会删除原文件)

硬链接时,新增加一个 inode 链接到文件的数据块;而符号链接时,只是新创建了一个文件,它指向所链接的文件。
 
# 1. 使用文件 /oradata2/yct/rc.local 进行测试
[oracle@sbdatabase yct]$ pwd
/oradata2/yct
[oracle@sbdatabase yct]$ ll
total 4
-rwxr-xr-x 1 oracle dba 220 Dec  9 16:30 rc.local
[oracle@sbdatabase yct]$ more rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
 
touch /var/lock/subsys/local
 
# 2. 进行硬链接,inode 数增加
[oracle@sbdatabase yct]$ ln rc.local rc.local_hard.ln
[oracle@sbdatabase yct]$ ll
total 8
-rwxr-xr-x 2 oracle dba 220 Dec  9 16:30 rc.local
-rwxr-xr-x 2 oracle dba 220 Dec  9 16:30 rc.local_hard.ln
 
# 3. 进行符号链接,inode数并没有增加
[oracle@sbdatabase yct]$ ln -s rc.local rc.local_soft.ln
[oracle@sbdatabase yct]$ ll
total 8
-rwxr-xr-x 2 oracle dba 220 Dec  9 16:30 rc.local
-rwxr-xr-x 2 oracle dba 220 Dec  9 16:30 rc.local_hard.ln
lrwxrwxrwx 1 oracle dba   8 Dec  9 17:03 rc.local_soft.ln -> rc.local
 
# 4. 删除原文件后,硬链接仍可用,而符号链接失效。
[oracle@sbdatabase yct]$ rm rc.local
[oracle@sbdatabase yct]$ ll
total 4
-rwxr-xr-x 1 oracle dba 220 Dec  9 16:30 rc.local_hard.ln
lrwxrwxrwx 1 oracle dba   8 Dec  9 17:03 rc.local_soft.ln -> rc.local
[oracle@sbdatabase yct]$ more rc.local_hard.ln
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
 
touch /var/lock/subsys/local
[oracle@sbdatabase yct]$ more rc.local_soft.ln
rc.local_soft.ln: No such file or directory
 
# 5. 硬链接不能链接目录
[oracle@sbdatabase yct]$ rm -r *
[oracle@sbdatabase yct]$ ll
total 0
[oracle@sbdatabase yct]$ mkdir t1
[oracle@sbdatabase yct]$ ln t1 t1_hard.ln
ln: `t1': hard link not allowed for directory
[oracle@sbdatabase yct]$ ln -s t1 t1_soft.ln
[oracle@sbdatabase yct]$ ll
total 4
drwxr-xr-x 2 oracle dba 4096 Dec  9 17:09 t1
lrwxrwxrwx 1 oracle dba    2 Dec  9 17:09 t1_soft.ln -> t1
[oracle@sbdatabase yct]$

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多