Linux中的两种link方式

Linux系统中包括两种链接方式:硬链接(hard link)和符号链接(symbolic link),其中符合链接就是所谓的软链接(soft link),那么两者之间到底有什么区别呢?

inode

在Linux系统中,内核为每一个新创建的文件分配一个inode,每个文件都有一个惟一的inode,这里将inode简单理解成一个指针,它永远指向本文件的具体存储位置同时,文件属性保存在inode里,比如owner等。在访问文件时,inode被复制到内存,从而实现文件的快速访问。系统是通过inode来定位每一个文件。

hard link

hard lin可以理解是一个指针,它指向源文件的inode,并不会产生新的inode。hard link不管有多少个,都指向的是同一个inode节点,只是新建一个hard link会把结点连接数增加,只要结点的连接数不是0,文件就一直存在,不管你删除的是源文件还是连接的文件。只要有一个存在,文件就存在(其实就是引用counter的概念)。当你修改源文件或者连接文件任何一个的时候,其他的文件都会做同步的修改。可见下图的示例。

symbolic link

symbolic link拥有独立的inode,是一个独立的文件,而文件的内容是源文件的路径指针,因此可以通过symbolic访问到源文件,因此删除符号链接对源文件没有影响,但是删除了源文件,符号链接文件就无法找到指向的文件。这里可以想象成Windows中的快捷方式。

对比

1. 符号链接和源文件操作权限不一样;硬链接与源文件操作权限完全一致。
2. 符号链接可以跨文件系统(分区);由于inode的限制以及文件系统的可卸载性,硬链接不容许跨文件系统。
3. 符号链接可以对一个不存在的文件名进行链接;硬链接不可以。
4. 符号链接可以对目录进行连接;硬链接不可以。

时间: 01-01

Linux中的两种link方式的相关文章

Hibeernate中的两种分页方式

1. return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session s) throws HibernateException { Criteria c = s.createCriteria(AskOnline.class); c.add(Restrictions.eq("boardid", new Long(bid))); c.setFirs

Ubuntu中的两种link的区别

Ubuntu中有两种link(windows世界中文件的"快捷方式"),一个是hard link(硬链接),另一个是symbolic link(软链接). 那么,什么是硬链接,什么又是软链接呢? 硬链接(hard link) 简单的说,硬链接会链接到目标文件的内容,即便目标文件在链接之后被改了名字,又或者被删掉了,硬链接以及硬链接的目标内容依然存在且有效.我们来做个实验. 实验过程设计: 1.创建一个文本文件origin: 2.向origin文件中写入内容"lorem ips

Linux中的两种守护进程stand alone和xinetd

--http://www.cnblogs.com/itech/archive/2010/12/27/1914846.html#top 一般使用stand alone /etc/init.d/ 非常少用xinetd /etc/xinetd.d/ Linux守护进程的运行方式 1.独立运行(stand-alone)的守护进程 独立运行的守护进程由init脚本负责管理,所有独立运行的守护进程的脚本在/etc/rc.d/init.d/目录下.系统服务都是独立运行的守护进程,包括syslogd和cron等

javascript中对象两种创建方式

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> // 创建对象的两种方式: // 1 对象字面量 // 2 new Obj

String中的两种实例化方式的区别

直接赋值:(String str = "字符串");只会开辟一块堆内存空间,并且会自动保存在对象池中以供下次重复使用. 构造方法:(String str = new  String ("字符串")); 会开辟两块内存空间,其中有一块空间将变成垃圾,并且不会自动入池,但是用户可以使用intern()方法手动入池. 在实际的开发中,String对象的实例化永远都是采用直接赋值的方式完成的.

web 开发之js---ajax 中的两种提交方式ajax post 和 ajax get 实例

()post http://04101334.iteye.com/blog/637695/ ()get function serializeElement(element) { var method = element.tagName.toLowerCase(); var parameter = input(element); if (parameter) { var key = encodeURIComponent(parameter[0]); if (key.length == 0) ret

JSP中的两种注释方式

JSP页面中的注释 语法 例子 <%--使用out.print("Hello JSP");方式输出 --%> <% for(int i=0;i<10;i++){ out.println("Hello JSP<br>"); } %> <hr> <!-- 使用<%="Hello World"%>方式输出 --> <% for(int i=0;i<10;i++){

Linux驱动的两种加载方式过程分析

一.概念简述 在Linux下可以通过两种方式加载驱动程序:静态加载和动态加载. 静态加载就是把驱动程序直接编译进内核,系统启动后可以直接调用.静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新编译和下载内核,效率较低.若采用静态加载的驱动较多,会导致内核容量很大,浪费存储空间. 动态加载利用了Linux的module特性,可以在系统启动后用insmod命令添加模块(.ko),在不需要的时候用rmmod命令卸载模块,采用这种动态加载的方式便于驱动程序的调试,同时可以针对产品的功能需求,进行

SVN中两种存储方式的比较(BDB vs. FSFS)

Subversion 的版本库(repository),就是位于服务器端,统一管理和储存数据的地方.本文中,我们以 Linux 为例,介绍在服务器端配置和管理 Subversion 版本库的基本方法. 要创建一个版本库,首先要确定采用哪种数据存储方式.在 Subversion 中,版本库的数据存储有两种方式,一种是在 Berkeley DB 数据库中存放数据:另一种是使用普通文件,采用自定义的格式来储存,称为 FSFS. 两种存放方式各有优缺点,读者可以参考 http://svnbook.org