在学习Hard Link与Symbolic Link之前,需要大概了解一下inode与data block。在Linux的文件系统中,一个文件对应一个inode与若干个data block。inode与data block都通过编号来标识,例如第30333个inode,第20334个data block。inode中记录着文件的属性,如文件的所有者、所属用户组、对文件的权限以及指向data block的指针。文件的真正内容是存放在data block中的。一个文件的内容,被分割成若干部分保存在不同的data block中,通过inode可以找到文件对应的所有data block。使用ls命令并打开-i选项就可以查看文件的inode编号:

在Linux中,有两种不同的Link:

Hard Link:这种Link不会占用磁盘空间。例如,现在有一个名为JonathanFileHL的Hard Link指向JonathanFile.txt,实际上,JonathanFileHL和JonathanFile.txt具有相同的inode。如下面的示意图:

Symbolic Link:这种Link会实际赞用磁盘空间。例如,现在有一个名为JonathanFileSL的Symbolic Link指向JonathanFile.txt,JonathanFileSL将会有独立的inode以及data block。源文件的文件名保存在Symbolic Link的。对源文件重命名或者删除,将会导致Symbolic Link失效。后面将会通过例子证明。Symbolic Link的示意图如下:

创建Link的命令为ln,如果指定了-s选项,那么将会创建Symbolic Link,否则就是Hard Link。为了验证是否占用磁盘空间,现在先查看一下JonathanTestFolder这个文件夹的使用磁盘情况:

现在来创建Hard Link:ln JonathanFile.txt JonathanFileHL

由结果可知,Hard Link确实不会占用磁盘空间,同时inode与源文件相同。Symbolic Link就得占用磁盘空间了,下面来创建一个Symbolic Link:ln -s JonathanFile.txt JonathanFileSL

可见,Symbolic Link确实会占用磁盘空间。此外,正如上文所说,如果修改了源文件的名称或者删除源文件,Symbolic Link将会失效,但是不会对Hard Link有影响:

原因上文也交代了:Symbolic Link会通过源文件名去定位,而Hard Link通过inode去定位。更多关于ln的用法,还是man一下吧。

菜鸟学Linux - Hard Link与Symbolic Link的更多相关文章

  1. Linux文件链接hard link与symbolic link

    Linux中文件链接有两种方式,一种是hard link,又称为硬链接:另一种是symbolic link,又称为符号链接.要区分两者的不同要回顾Linux常用的ext2文件系统.这种文件系统使用in ...

  2. Windows中的硬链接和软链接(hard link 和 Symbolic link)

    先来了解一下Linux中的硬链接和软链接: Linux中的硬链接和软链接 Windows中的硬链接和软链接: 硬链接 从Windows NT4开始,NTFS文件系统引入了HardLink这个概念,它让 ...

  3. Linux - 软硬链接,hard link and symbolic link

  4. 【菜鸟学Linux】Cron Job定期删除Log(日志)文件

    以前一直做Windows开发,近期的项目中要求使用Linux.作为小菜鸟一枚,赶紧买了一本经典书<鸟哥的Linux私房菜>学习.最近刚好有一个小任务 - 由于产品产生的Log很多,而且增长 ...

  5. 菜鸟学Linux命令:nohup命令启动程序

    在UNIX/LINUX中,普通进程用&符号放到后台运行,如果启动该程序的控制台logout,则该进程随即终止. 要实现守护进程,一种方法是按守护进程的规则去编程,比较麻烦:另一种方法是仍然用普 ...

  6. 菜鸟学Linux命令:lsof命令 查找指定用户、进程、端口打开的文件

    lsof,list open files, 是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件. 命令格式:ls ...

  7. 菜鸟学Linux命令:tar命令 压缩与解压缩

    tar命令可以为linux的文件和目录创建档案.利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件. tar最初被用来在磁带上创建档案,现在,用户可以 ...

  8. 菜鸟学Linux命令:ssh命令 远程登录

    1.查看SSH客户端版本 有的时候需要确认一下SSH客户端及其相应的版本号.使用ssh -V命令可以得到版本号.需要注意的是,Linux一般自带的是OpenSSH: 下面的例子即表明该系统正在使用Op ...

  9. 菜鸟学Linux命令:chmod命令和数字文件权限

    chmod是一条在Unix系统中用于控制用户对文件的权限的命令(change mode单词前缀的组合)和函数.只有文件所有者和超级用户可以修改文件或目录的权限.可以使用绝对模式,符号模式指定文件的权限 ...

随机推荐

  1. mysql通用分页存储过程遇到的问题

    DELIMITER $$ USE `tsb_asksys`$$ DROP PROCEDURE IF EXISTS `P_viewPage`$$ CREATE DEFINER=`root`@`local ...

  2. CF1136D Nastya Is Buying Lunch

    思路: 1. 最终答案不超过能与Nastya“直接交换”的人数. 2. 对于排在j前面的i,如果i和i-j之间(包括j)的每个人都能“直接交换”,j才能前进一步. 实现: #include <b ...

  3. Centos_linux系统的区别及实际查看

    在Linux系统查看系统版本为 32 位还是 64 位 [root@localhost ~]# cat /etc/redhat-release CentOS release 6.8 (Final) [ ...

  4. UGUI的事件系统分析

    UGUI的源码还是非常清晰的,打开源码可以发现, 从UGUI的源码可知:在EventSystem中调用每一帧函数来实现: private void TickModules() { for (var i ...

  5. [SVN]TortoiseSVN报“500 Internal Server Error”错误的解决方法

    背景:由于某种原因,本人重启了一下SVN服务的物理机,重启过后发现所有人访问SVN都报如下错误. 由于重启之前是没有做过任何改动,所以面对这个错误有点摸不着头脑,防火墙.网管.清缓存等方法都试过,还没 ...

  6. python字符串及字符串操作

    字符串介绍 1.字符串在内存中的存储: 2.字符串相加: 3.字符串的格式化: In [1]: a = 100 In [2]: a Out[2]: 100 #100<255,在堆内存下占用了一个 ...

  7. cms-幻灯片的实现

    1.其实幻灯片的后台代码和之前的最新动态和推荐是一样的,只是前台遍历的时候不一样罢了 2.代码: 2.1:帖子mapper查询出幻灯片图片: <?xml version="1.0&qu ...

  8. Miller-Rabbin 素性测试 和 Pollard_rho整数分解

    今天学习一下Miller-Rabbin  素性测试 和 Pollard_rho整数分解. 两者都是概率算法. Miller_Rabbin素性测试是对简单伪素数pseudoprime测试的改进. (ps ...

  9. 18课 Vue第一节

    Q1: url-loader必须搭载file-loader?Q2: 图片的打包问题,如果直接写在img标签里用src引用图片,该如何打包?Q3: 如何根据不同的页面html模板打包与之对应的css/j ...

  10. ifup/ifdown ethX 和 ifconfig ehtX up/down的区别

    相同点:[启用]和[禁止]网卡 ifup  ethX 和 ifconfig  ethX  up               用来启用网卡设备 ifdown  ethX 和 ifconfig  ethX ...