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。
总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。
当然软链接也有硬链接没有的缺点,因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。
参考链接
linux文件链接的更多相关文章
- 转: linux文件链接(软链接和硬链接)
链接:一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法. Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic l ...
- Linux文件链接hard link与symbolic link
Linux中文件链接有两种方式,一种是hard link,又称为硬链接:另一种是symbolic link,又称为符号链接.要区分两者的不同要回顾Linux常用的ext2文件系统.这种文件系统使用in ...
- Linux链接库四(多个库文件链接顺序问题)
最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误: (.text+0x13): undefined reference to `func' 关于unde ...
- Linux的链接文件-ln命令
Linux的链接文件 使用ln命令来创建链接文件(link) Linux链接分两种:硬链接(Hard Link),符号链接(Symbolic Link) 默认情况下,ln命令产生硬链接. [root@ ...
- Linux操作系统的文件链接
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++标题:Linux操作系统的文件链接内容:文件链接时间:2019年 ...
- Linux的链接文件
Linux的链接文件======================================== Linux的链接文件分为硬链接文件(hard link )和软链接文件( symbolic lin ...
- 【Linux学习】Linux文件系统4—Linux文件硬链接与软连接
Linux文件系统4-Linux文件硬链接与软连接 inode:索引节点 (连接文件)link 一.文件硬链接 1.Linux文件系统中,inode只相同的文件是硬链接文件 2.不同文件名,inode ...
- Linux文件的删除和软硬链接
文件的构成 由元数据(metadata)和数据(data)两部分组成 硬盘分区上一块空间存该分区上文件的元数据,一块空间存这些文件的数据 因为元数据和数据分离存放,所以需要通过指针地址来进行关联 元数 ...
- Linux实战教学笔记08:Linux 文件的属性(上半部分)
第八节 Linux 文件的属性(上半部分) 标签(空格分隔):Linux实战教学笔记 第1章 Linux中的文件 1.1 文件属性概述(ls -lhi) linux里一切皆文件 Linux系统中的文件 ...
随机推荐
- 基于BP神经网络的字符识别研究
基于BP神经网络的字符识别研究 原文作者:Andrew Kirillov. http://www.codeproject.com/KB/cs/neural_network_ocr.aspx 摘要:本文 ...
- 记一次内存溢出的分析经历——使用thrift
背景: 有一个项目做一个系统,分客户端和服务端,客户端用c++写的,用来收集信息然后传给服务端(客户端的数量还是比较多的,正常的有几千个), 服务端用Java写的(带管理页面),属于RPC模式,中间的 ...
- Redis 分布式锁 - 分布式锁的正确实现方式
前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...
- SpringMVC的环境搭建
MyBatis框架-->持久层框架-->Object[对象]Relation[关系型数据库]Mapping[在MyBatis的体现是哪个映射文件中国的<resultMap>标签 ...
- JSF通过超链接传递参数到控制层
JSF通过超链接传输数据到控制层可以分为三个步骤: 1.首先将数据加入到超链接中.通过<h:link>标签加入一个超链接,然后加入<f:param>标签加入参数.示例代码如下: ...
- POJ3641(快速幂)
Pseudoprime numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8529 Accepted: 35 ...
- mysql高可用集群——MHA架构
目录1.下载2.搭建mha 2.1 系统配置 2.2 架构 2.3 添加ssh公钥信任 2.4 安装mha节点 2.5 manager配置文件 2.6 检查 2.7 启动manager进程 2.8 碰 ...
- Python代码规范总结
1.缩进问题: Tip:用4个空格来缩进代码 不要用Tab键或者是Tab和空格混用, vim用户可以将tab键设置为4个空格的长度.要么选择垂直对齐换行的元素, 或者是使用4空格悬挂式缩进(第一行没有 ...
- 对数组名取地址 a[ ],&a
C语言规定,数组名代表数组的首地址,也就是第0号元素的地址.所以a==&a[0] 但对数组名取地址时却要注意了,在理解“对数组名取地址”这一表达式的含义时一定要记住:数组名是“数组”这种变量的 ...
- tomcat使用manager管理app时需要身份验证问题
我们可以通过图形用户界面来管理tomcat,启动tomcat,在地址栏中输入: Java代码 http://localhost:8080 就可以看见tomcat的欢迎页面,点击左边的tomcat ma ...