整理自《鸟哥的Linux私房菜》,整理者:华科小涛http://www.cnblogs.com/hust-ghtao/

Linux中的链接文件分为两种:硬链接和软链接。软链接(symbolic link)很好理解,就是类似于Windows的快捷方式功能的文件,让你可以快速链接到目标文件(或目录);另一种是通过文件系统的inode链接来产生新文件名,而不是产生新文件,这种称为硬链接(hard link)。

1. Hard link

在前面的博客中EXT2/EXT3文件系统(一),我们知道:

  • 每个文件都会占用一个inode,文件内容由inode的记录来指向;
  • 想要读取该文件,必须经过目录记录的文件名来指向正确的inode号码才能读取。

也就是说,其实文件名只与目录有关,但是文件内容则与inode有关。那么,有没有可能多个文件名对应同一个inode呢?这就是所谓hard link的由来。简单地说:hard link只是记录某个目录下新建一条文件名连接到某inode号码的关联而已。

例如,假设我系统有个/root/crontab,它是/etc/crontab的hard link,也就是说这两个文件名连接到同一个inode,自然这两个文件名的相关信息都会完全一样:

我们发现,两个文件名都链接到inode1912701,文件的属性权限完全一致。而且你会发现第二个字段由1变成了2,这是“链接”字段,表示“有多少文件名连接到此inode”。如果将读取数据的示意图画出,则如下:

上图的意思是:可以通过1或2的目录inode去找到两个不同的文件名,而不管使用哪个文件名均可以指到real那个inode去读取最终的数据。这样做的最大好处就是安全,如果你将一个文件名删除,其实inode与block都还是存在的。此时可以通过另一个“文件名”来读到正确的数据。此外,不论使用哪个“文件名”来编辑,最终的结果都会写入到inode与block中,因此均能对数据进行修改。

硬连接的基本特性与限制:

  • 使用hard link设置链接文件时,磁盘的空间与inode的数目都不会改变,只是在某个目录下的block多写入一条关联数据;
  • 不能跨文件系统;
  • 不能链接到目录。如果设置硬链接到目录,链接的数据需要连同目录下面的所有数据都建立链接,会造成相当大的复杂度,目前不支持。

2.symbolic link

symbolic link很好理解,就是新建了一个文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。由于只是作为指向的作用,所以,当源文件被删除后,symbilic link的文件会“开不了”,实际上就是找不到源文件“文件名”。下图为symbolic link文件读取示意图:

由1号inode读取到链接文件的文件内容只有文件名,根据文件名链接到正确的目录去取得目标文件的inode,最终就能够读取到正确的数据了。

软链接文件的特点:

  • 软链接文件的重要内容就是它会写上目标文件的“文件名”。
  • 这个symbolic link和Windows的快捷方式可以划上等号,由symbolic link所创建的文件是一个独立的新文件,会占用inode与block。
  • hard link更安全,但限制多,所以symbolic link应用更广。

Linux下的链接文件的更多相关文章

  1. Linux下硬链接与软链接

    linux下的链接文件,尤其是软链接使用非常的频繁: 链分为硬链接(hard link)与软链接(symbolic link) 两种:关键在于inode: 硬链接: 当系统需要读取一个文件时,就会去读 ...

  2. 【Linux学习】Linux下用户组、文件权限详解

    原文地址:http://www.cnblogs.com/123-/p/4189072.html Linux下用户组.文件权限详解 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在li ...

  3. 程序的链接和装入及Linux下动态链接的实现

    http://www.ibm.com/developerworks/cn/linux/l-dynlink/ 程序的链接和装入及Linux下动态链接的实现 程序的链接和装入存在着多种方法,而如今最为流行 ...

  4. 【原创】Linux下编译链接中常见问题总结

    前言 一直以来对Linux下编译链接产生的问题没有好好重视起来,出现问题就度娘一下,很多时候的确是在搜索帮助下解决了BUG,但由于对原因不求甚解,没有细细研究,结果总是在遇到在BUG时弄得手忙脚乱得. ...

  5. 查看Linux下*.a库文件中文件、函数、变量

    查看Linux下*.a库文件中文件.函数.变量等情况在Linux 下经常需要链接一些 *.a的库文件,那怎么查看这些*.a 中包 含哪些文件.函数.变量: 1. 查看文件:ar -t xxx.a 2. ...

  6. 【转】【Linux】Linux下统计当前文件夹下的文件个数、目录个数

    [转][Linux]Linux下统计当前文件夹下的文件个数.目录个数 统计当前文件夹下文件的个数,包括子文件夹里的 ls -lR|grep "^-"|wc -l 统计文件夹下目录的 ...

  7. (转)Mysql数据库之Binlog日志使用总结Linux下用户组、文件权限详解

    Linux下用户组.文件权限详解 原文:http://blog.csdn.net/sdulibh/article/details/51566772 用户组 在linux中的每个用户必须属于一个组,不能 ...

  8. Linux下几种文件传输命令

    Linux下几种文件传输命令 sz rz sftp scp 最近在部署系统时接触了一些文件传输命令,分别做一下简单记录: 1.sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具 ...

  9. Linux 下复制整个文件夹的命令

    在 Linux 下复制整个文件夹,包括它的子文件夹及其隐藏文件的方法是: cp -r /etc/skel /home/user 或者 mkdir /home/<new_user> cp - ...

随机推荐

  1. 【QT相关】Image Viewer Example

    结合QLable和QScrollArea显示一个图片. QLable典型用于用户展示文本,但是也能展示图片.QScrollArea提供了一个滚动视图,如果子控件超过了框架限制,QScrollArea自 ...

  2. win7 php 配置多个网站

    1.在C:\WINDOWS\system32\drivers\etc目录下,打开Hosts 添加A站和B站的DNS映射,如127.0.0.1 local.zhengxin.com127.0.0.1 l ...

  3. Python框架 Flask 项目实战教程

    本文目的是为了完成一个项目用到的flask基本知识,例子会逐渐加深.最好对着源码,一步一步走.下载源码,运行pip install -r requirements.txt 建立环境python db_ ...

  4. USACO Hamming Codes DFS 构造

    我还是用了很朴素的暴力匹配A了这题,不得不感叹USACO时间放的好宽... /* ID: wushuai2 PROG: hamming LANG: C++ */ //#pragma comment(l ...

  5. ZooKeeper原理及配置

    ooKeeper实验版本:3.4.6 ZooKeeper下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper/ zookeeper是一个高可用性,高性 ...

  6. 快速解决PDF文档加密不能打印问题_百度经验

    快速解决PDF文档加密不能打印问题_百度经验     快速解决PDF文档加密不能打印问题         |        浏览:182        |        更新:2014-01-06 1 ...

  7. Sql 增加字段(有些只能在ORACLE中运行)

    增加字段 alter table table_name add column_name varchar(200) 删除字段 ALTER TABLE table_NAME DROP COLUMN col ...

  8. QSerialPort

    (草稿) qt5提供QSerialPort类,封装了串口的api, 可以用这个类写串口通信程序.

  9. File类常见方法

    package file; import java.io.File; public class FileTest2 { public static void main(String[] args) { ...

  10. 一天一个类--ArrayList之二

    继续我的小激动--- 1.看看构造一个ArrayList 有两种方式 一个指定大小,一个不指定.我们知道他其实使用数组来实现了,数组肯定要有大小,那么他没指定大小,默认的是多少呢???追踪源码---开 ...