linux文件链接
链接:一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。 Linux中包括两种链接:硬链接(HardLink)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。
我们首先来了解一下几个名词:
索引节点(inode)
要了解链接,我们首先得了解一个概念,叫索引节点(inode)。在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号,我们可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。系统是通过索引节点(而不是文件名)来定位每一个文件。
硬链接(Hard Link)
硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。可以用:ln命令来建立硬链接。
引用
ln [options] existingfile newfile
ln [options] existingfile-list directory
用法:
第一种为”existingfile”创建硬链接,文件名为”newfile”。
第二种在”directory”目录中,为” existingfile-list”中包含的所有文件创建一个同名的硬链接。
常用可选[options]:-f 无论”newfile”存在与否,都创建链接。-n 如果”newfile”已存在,就不创建链接。
软链接(Soft Link)
软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。和win下的快捷方式差不多。
可以用:ln -s 命令来建立软链接。
引用
ln -s existingfile newfile
ln -s existingfile-list directory
下面我们用一个实例来说明硬链接和软链接。
现在目录下有两个文件,一个名为file1,一个名为file2。
引用
$ ls –il
1052671 -rw-r--r-- 1 Leanx Leanx 0 2010-03-29 13:46 file1
1052670 -rw-r--r-- 1 Leanx Leanx 0 2007-03-29 13:46 file2
首先先做一个file1的硬链接。
引用
$ ln file1 file1hard
$ls –il
1052671 -rw-r--r-- 2 Leanx Leanx 0 2010-03-29 13:46 file1
1052670 -rw-r--r-- 1 Leanx Leanx 0 2010-03-29 13:46 file12
1052671 -rw-r--r-- 2 Leanx Leanx 0 2010-03-29 13:46 file1hard
这里我们注意在创建链接前,file1显示的链接数目为1,创建链接后
- file1和file1hard的链接数目都变为2。
- file1和file1的inode号是一样的,都是1052671。
- file1和file1hard显示的文件大小也是一样,都是0B。
可见进行了ln命令的操作结果:file1和file1hard是同一个文件的两个名字,它们具有同样的索引节点号和文件属性,建立文件file1的硬链接,就是为 file1的文件索引节点在当前目录上建立一个新指针。你可以删除其中任何一个,如rm file1,每次只会删除一个指针,链接数同时减一,只有将所有指向文件内容的指针,也即链接数减为0时,内核才会把文件内容从磁盘上删除。
尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一些不足之处:
- 不允许给目录创建硬链接。
- 不可以在不同文件系统的文件间建立链接。
接着我们做一个指向file2的软链接,软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
引用
$ ln -s file2 file2soft
$ ls –il
总用量 0
1052671 -rw-r--r-- 2 Leanx Leanx 0 2010-03-29 13:34 file1
1052670 -rw-r--r-- 1 Leanx Leanx 0 2010-03-29 13:35 file2
1053313 lrwxrwxrwx 1 Leanx Leanx 5 2010-03-29 13:45 file2soft -> file2
1052671 -rw-r--r-- 2 Leanx Leanx 0 2010-03-29 13:34 file1hard
从上面链接后的结果可以看出来软链接与硬链接,区别不仅仅是在概念上,在实现上也是完全不同的。
区别:
硬链接原文件/链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件;
在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;
链接数目是不一样的,软链接的链接数目不会增加;
文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而这里软链接显示的大小与原文件就不同了,file2大小是0B,而file2soft是5B。
总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。
当然软链接也有硬链接没有的缺点,因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。
参考链接
最新文章
- 公用表表达式(CTE)递归的生成帮助数据
- 第一章 git指令与设置
- Asp.Net Web API 2 官网菜鸟学习系列导航[持续更新中]
- Java 语句总结
- 《深入理解Android:Telephon原理剖析与最佳实践》学习笔记(系统框架)
- 业务gis 怎么让别的开发人员不需要懂gis就可以搞开发? (五)
- [LeetCode] Missing Number (A New Questions Added Today)
- 文件操作1-php
- jQuery获取select option
- 【Android Training UI】创建自定义Views(Lesson 2 - 自定义Drawing)
- MYSQL 二进制还原
- 2.按要求编写Java应用程序: (1)编写西游记人物类(XiYouJiRenWu) 其中属性有:身高(height),名字(name),武器(weapon) 方法有:显示名字(printName),显示武器(printWeapon) (2)在主类的main方法中创建二个对象:zhuBaJie,sunWuKong。并分别为他 们的两个属性(name,weapon)赋值,最后分别调用printNam
- java实现树型结构样式
- BZOJ1478 Sgu282 Isomorphism
- nginx request_time 和upstream_response_time
- 转载 用Python实现设计模式——工厂模式
- Excel获取第一个表名
- 【XMPP】Smack源码之消息接收与解析
- Spring Boot设置值:分别用@ConfigurationProperties和@Value给属性设值及其区别
- Java基础复习
热门文章
- What makes an inferred latch? how To avoid creating inferred latches? when do you know you need latches?
- php system()
- 机器学习:衡量线性回归法的指标(MSE、RMSE、MAE、R Squared)
- 实现MVC
- IDA Pro权威指南学习笔记(一)
- Python函数(八)-装饰器(一)
- 问题:C#控制台 停留;结果:c#控制台如何延时显示
- mybatis(非常详细的哦~~~~)
- 如何成功且顺序的进入centos系统的安全模式?(图文详解)
- 字符串解压缩类库(zip、GZIP、QuickLz、snappy、lzf、jzlib)介绍