浅谈linux中的硬链接和软链接文件以及ln的使用方法
在linux系统中有一种文件叫做链接文件,可以为解决文件的共享使用。链接的方式可以分为两种,一种是硬链接(Hard Link),另一种是软链接或者也称为符号链接(Symbolic Link)。
一、基本概念
1、硬链接
开始之前,先解释一个概念,叫做索引节点(Inode)。
在Linux的文件系统中,保存在磁盘分区中的文件,不管是什么类型,系统都会给它分配一个编号,这个编号被称为索引节点编号(Inode Index),它是该文件或者目录在linux文件系统中的唯一标识。有了这个编号值,就可以查到该文件的详细内容。
同时,Linux系统还规定,可以允许多个文件名同时指向同一个索引节点(Inode),这就是硬链接。这样设计有一个好处就是,只要文件的索引节点还存在一个以上的链接,删除其中一个链接并不影响索引节点本身和其他的链接(也就是说该文件的实体并未删除),而只有当最后一个链接被删除后,且此时有新数据要存储到磁盘上,那么被删除的文件的数据块及目录的链接才会被释放,存储空间才会被新数据所覆盖。因此,该机制可以有效的防止误删操作。
硬链接只能在同一类型的文件系统中进行链接,不能跨文件系统。同时它只能对文件进行链接,不能链接目录。
2、软链接
软链接(也叫符号链接),类似于windows系统中的快捷方式,与硬链接不同,软链接就是一个普通文件,只是数据块内容有点特殊,文件用户数据块中存放的内容是另一文件的路径名的指向,通过这个方式可以快速定位到软连接所指向的源文件实体。
软链接常用来解决空间不足的问题,比如某个文件文件系统空间已经用完了,但是现在必须在该文件系统下创建一个新的目录并存储大量的文件,那么可以把另一个剩余空间较多的文件系统中的目录链接到该文件系统中。
软链接可以跨文件系统而链接,也可以同时对文件或目录进行链接。
3、二者区别
- 软链接以存放另一个文件的路径的形式存在,硬链接以文件副本的形式存在;
- 软链接可以跨不同的文件系统而链接,硬链接不可以;
- 软链接可以对目录进行链接,而硬链接不可以;
- 软链接可以对一个不存在的文件名进行链接,硬链接必须要有源文件。
- 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接。删除硬链接的话,只要索引节点的个数不为零,则不会对原始文件造成任何影响;
注意:不论是硬链接或软链接都不会将原本的目标文件完全复制一份,而只会占用非常少量的存储空间。
二、创建方式(ln命令)
软链接和硬链接都是通过ln命令来创建,只是参数不同。命令格式如下:
ln 参数 源文件或目录 目标文件或目录
注意:源目录和目标目录都必须是绝对路径!
参数:
- -i 交互模式,文件存在则提示用户是否覆盖;
- -s 软链接(符号链接);
- -d 允许超级用户制作目录的硬链接;
- -b 删除,覆盖以前建立的链接;
- -f 强制执行;
- -n 把符号链接视为一般目录;
- -v 显示详细的处理过程;
所以,总结起来就是:
- 创建软链接 (符号链接)使用:
ln -s source target
- 创建硬链接 (实体链接)使用:
ln source target
比如:
--------------------------------------------------------------------------------------------------------
leon@Ubuntu:~/temp$ ll # 首先创建一个测试目录和测试文件
total 16
drwxrwxr-x 3 leon leon 4096 Aug 29 14:21 ./
drwxr-xr-x 23 leon leon 4096 Aug 29 14:20 ../
drwxrwxr-x 2 leon leon 4096 Aug 29 14:21 testdir/
-rw-rw-r-- 1 leon leon 40 Aug 29 14:21 testfile
--------------------------------------------------------------------------------------------------------
leon@Ubuntu:~/temp$ ln testdir hard_link # 不能对目录创建硬链接
ln: testdir: hard link not allowed for directory
--------------------------------------------------------------------------------------------------------
leon@Ubuntu:~/temp$ ln -s testdir soft_link_for_dir # 可以对目录创建软链接
leon@Ubuntu:~/temp$ ll
total 16
drwxrwxr-x 3 leon leon 4096 Aug 29 14:26 ./
drwxr-xr-x 23 leon leon 4096 Aug 29 14:20 ../
lrwxrwxrwx 1 leon leon 7 Aug 29 14:26 soft_link_for_dir -> testdir/
drwxrwxr-x 2 leon leon 4096 Aug 29 14:21 testdir/
-rw-rw-r-- 1 leon leon 40 Aug 29 14:21 testfile
--------------------------------------------------------------------------------------------------------
leon@Ubuntu:~/temp$ ln testfile hard_link_for_file # 可以对文件创建硬链接
leon@Ubuntu:~/temp$ ll
total 20
drwxrwxr-x 3 leon leon 4096 Aug 29 14:27 ./
drwxr-xr-x 23 leon leon 4096 Aug 29 14:20 ../
-rw-rw-r-- 2 leon leon 40 Aug 29 14:21 hard_link_for_file
drwxrwxr-x 2 leon leon 4096 Aug 29 14:21 testdir/
-rw-rw-r-- 2 leon leon 40 Aug 29 14:21 testfile
--------------------------------------------------------------------------------------------------------
leon@Ubuntu:~/temp$ ln -s testfile soft_link_for_file # 可以对文件创建软链接
leon@Ubuntu:~/temp$ ll
total 20
drwxrwxr-x 3 leon leon 4096 Aug 29 14:28 ./
drwxr-xr-x 23 leon leon 4096 Aug 29 14:20 ../
lrwxrwxrwx 1 leon leon 8 Aug 29 14:28 soft_link_for_file -> testfile
drwxrwxr-x 2 leon leon 4096 Aug 29 14:21 testdir/
-rw-rw-r-- 2 leon leon 40 Aug 29 14:21 testfile
--------------------------------------------------------------------------------------------------------
三、注意事项
1、对目录创建软链接之前,不用提前建立好目标目录,直接ln命令就会自动建立。如果你提前建立了目标目录,则使用ln命令之后,建立的目标目录会出现嵌套,这一点要千万注意!
leon@Ubuntu:~/temp$ ll testdir/ # 首先查看下源目录下的文件情况
total 8
drwxrwxr-x 2 leon leon 4096 Aug 29 14:29 ./
drwxrwxr-x 3 leon leon 4096 Aug 29 14:28 ../
-rw-rw-r-- 1 leon leon 0 Aug 29 14:29 test# 下面的语句是直接创建软链接,可以看出软链接的结果是正确的
leon@Ubuntu:~/temp$ ln -s testdir soft_link_for_dir # 创建软链接1
leon@Ubuntu:~/temp$ ll soft_link_for_dir # 查看软链接1的详情
lrwxrwxrwx 1 leon leon 7 Aug 29 14:26 soft_link_for_dir -> testdir/# 下面的语句是先创建好目标目录,然后再创建软链接。可以看出软链接的结果是不正确的
leon@Ubuntu:~/temp$ mkdir soft_link_for_dir2 # 先创建一个目录
leon@Ubuntu:~/temp$ ln -s testdir soft_link_for_dir2 # 然后再创建软链接2
leon@Ubuntu:~/temp$ ll soft_link_for_dir2 # 查看软链接2的详情
total 8
drwxrwxr-x 2 leon leon 4096 Aug 29 14:34 ./
drwxrwxr-x 4 leon leon 4096 Aug 29 14:34 ../
lrwxrwxrwx 1 leon leon 7 Aug 29 14:34 testdir -> testdir
2、对目录创建软链接时,不要携带’/‘符号,否则创建出来的软链接所指向的源目录也会携带一个’/'符号。虽然表面上看上去可以正常访问,但是不能保证在某些特殊情况下会出现问题。这一点也要千万注意!
leon@Ubuntu:~/temp$ ln -s testdir/ soft_link_for_dir1 # 不建议这么操作
leon@Ubuntu:~/temp$ ln -s testdir soft_link_for_dir2 # 这才是正确的
leon@Ubuntu:~/temp$ ll
total 16
drwxrwxr-x 3 leon leon 4096 Aug 29 15:41 ./
drwxr-xr-x 23 leon leon 4096 Aug 29 14:20 ../
lrwxrwxrwx 1 leon leon 8 Aug 29 15:40 soft_link_for_dir1 -> testdir//
lrwxrwxrwx 1 leon leon 7 Aug 29 15:41 soft_link_for_dir2 -> testdir/
drwxrwxr-x 2 leon leon 4096 Aug 29 14:29 testdir/
-rw-rw-r-- 1 leon leon 40 Aug 29 14:21 testfile
3、删除软链接时,不能携带’/'符号,否则你删除的就是软链接目标目录下的资源(即源文件),而不是软链接本身。
--------------------------------------------------------------------------------------------------------
leon@Ubuntu:~/temp$ rm -rf soft_link_for_dir1 # 这是正确的删除软链接的方式
leon@Ubuntu:~/temp$ ll # 当前目录下的链接文件已经被删了
total 16
drwxrwxr-x 3 leon leon 4096 Aug 29 15:53 ./
drwxr-xr-x 23 leon leon 4096 Aug 29 14:20 ../
drwxrwxr-x 2 leon leon 4096 Aug 29 14:29 testdir/
-rw-rw-r-- 1 leon leon 40 Aug 29 14:21 testfile
leon@Ubuntu:~/temp$ ls -al testdir/ # 并且,源目录下的原始文件还在
total 12
drwxrwxr-x 2 leon leon 4096 Aug 29 15:55 .
drwxrwxr-x 3 leon leon 4096 Aug 29 15:54 ..
-rw-rw-r-- 1 leon leon 18 Aug 29 15:53 new_file
--------------------------------------------------------------------------------------------------------
leon@Ubuntu:~/temp$ rm -rf soft_link_for_dir/ # 这是错误的删除软链接的方式
leon@Ubuntu:~/temp$ ll # 当前目录下的链接文件没有被删掉
total 16
drwxrwxr-x 3 leon leon 4096 Aug 29 15:54 ./
drwxr-xr-x 23 leon leon 4096 Aug 29 14:20 ../
lrwxrwxrwx 1 leon leon 7 Aug 29 15:54 soft_link_for_dir -> testdir/
drwxrwxr-x 2 leon leon 4096 Aug 29 15:54 testdir/
-rw-rw-r-- 1 leon leon 40 Aug 29 14:21 testfile
leon@Ubuntu:~/temp$ ls -al testdir/ # 而源目录下的原始文件却被删掉了
total 8
drwxrwxr-x 2 leon leon 4096 Aug 29 15:54 .
drwxrwxr-x 3 leon leon 4096 Aug 29 15:54 ..
--------------------------------------------------------------------------------------------------------
浅谈linux中的硬链接和软链接文件以及ln的使用方法相关推荐
- linux硬链接同步文件夹,linux中的硬链接和软链接
一.ln命令概述 它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上 ...
- Linux中的硬链接和软链接
1.Linux链接概念 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接] 硬连接指通过索引 ...
- 浅谈Linux中ldconfig和ldd的用法
ldd 查看程序依赖库 ldd 作用:用来查看程式运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题. 示例:查看test程序运行所依赖的库: /opt/app/todeav1/te ...
- ldconfig mysql_浅谈Linux中ldconfig和ldd的用法
ldd 查看程序依赖库 ldd 作用:用来查看程式运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题. 示例:查看test程序运行所依赖的库: /opt/app/todeav1/te ...
- linux中sh+$0,浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释
摘抄自:ABS_GUIDE 下载地址:http://www.tldp.org/LDP/abs/abs-guide.pdf linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: ...
- 浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释
浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释 下面小编就为大家带来一篇浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释.小编觉得挺不错的,现在就分享给 ...
- linux中whoami命令的作用是,浅谈linux中的whoami与 who指令
浅谈linux中的whoami与 who指令 whoami 功能说明: 显示用户名称 语法: whoami 补充说明: 显示自身的用户名称,本指令相当于执行 id -un 指令 whoami 与 w ...
- 实现Linux的whoami命令,浅谈linux中的whoami与 who指令
whoami 功能说明: 显示用户名称 语法: whoami 补充说明: 显示自身的用户名称,本指令相当于执行 id -un 指令 whoami 与 who am i的区别 who这个命令重点在用来 ...
- Linux命令删除find,浅谈Linux下通过find命令进行rm文件删除的小技巧
我们经常会通过find命令进行批量操作,如:批量删除旧文件.批量修改.基于时间的文件统计.基于文件大小的文件统计等,在这些操作当中,由于rm删除操作会导致目录结构变化,如果要通过find结合rm的操作 ...
最新文章
- 将xscj指定为当前数据库_(2)连接登陆数据库
- java Bean 不需要自动生成get和set
- python做股票系统_GitHub - hetingqin/stock: stock,股票系统。使用python进行开发。
- 通过CMD命令行获取文件夹下的所有文件名称(电脑小白专用)
- CF125E MST Company
- Atitit..状态机与词法分析 通用分词器 分词引擎的设计与实现 attilax总结
- win32汇编--创建窗口程序(RadAsm)
- Windows常见基本进程八:wuauclt
- win7 windows update 无法更新错误代码80072EF
- filebox管理php,filebox.php
- write和read返回值详解
- 手机号码归属地api文档
- KDL学习之路01:KDL(Kinematics and Dynamics Library)入门学习
- 几个贝叶斯估计的例题
- [Demo]提取个人博客园闪存+评论
- 【优化求解】基于猫群算法CSO求解最优目标matlab源码
- aarch64 poky linux,aarch64-poky-linux-gcc:error::没有这样的文件或目录
- 画论86 松年《颐园论画》
- XP设备管理器错误代码
- 优思学院|六西格玛黑带考试36题
热门文章
- 什么样的PDF转换成PPT转换器比较好
- 跨专业的我如何收获BAT微软等大厂意向书(学习路线分享)
- Python生成GMT时间格式以及时间戳日期等
- 学习随笔#8 深度优先算法和广度优先算法
- ruby:TypeError: 对象不支持此属性或方法(%= stylesheet_link_tag 'application', media: 'all', 'data-turbolink)
- LTE下行传输机制--PDCCH
- 中望CAD框选时变成,选择复制到剪切板中的对象
- 魅力女主风范座驾奇瑞小蚂蚁·魅
- 初学者怎么高效率学习c语言?
- 佛说前世的五百次回眸才换来今生的擦肩而过