ln命令:软链接与硬链接的区别与应用

摘要

Linux系统中,链接是一个十分常见且实用的文件处理命令,它分为软链接和硬链接两种类型。软链接类似于Windows中的快捷方式,硬链接又有着与原文件保持同步更新的特性,两种链接方式各有特点,也各有其应用。接下来我们一起来深入认识一下这两种链接方式。

ln命令详解

英文原意:link

命令所在路径:/bin/ln

执行权限:所有用户

语法:

ln -s [原文件] [目标文件]

-s 创建软链接
默认是硬链接(不指定-s)

功能描述:生成链接文件

范例:

> ln -s /etc/issue /tmp/issue.soft #创建文件/etc/issue的软链接/tmp/issue.soft
> ln /etc/issue /tmp/issue.hard #创建文件/etc/issue的硬链接/tmp/issue.hard

1. 软链接

A. 特征:类似Windows快捷方式

(1) lrwxrwxrwx 其中l 表示软链接。任何新建的软链接文件权限都为rwxrwxrwx,此权限不决定原文件权限

(2) 文件大小-只是符号链接,非常小,一般只有十几个字节,与原文件大小无关

(3) /tmp/issue.soft->/etc/issue 箭头指向原文件

B. 应用场景:

Q:什么时候用软链接文件?
A:需要快捷方式的时候就用软链接文件,只是为了便于管理和使用。

2. 硬链接

A. 特征:

(1) 相当于 拷贝(cp -p) + 同步更新 的功能

实验:

这里默认已经执行了范例中的命令创建了软/硬链接

[root@centos7-master /]# cat /etc/issue #查看当前原文件内容
\S
Kernel \r on an \m [root@centos7-master /]# cat /tmp/issue.hard #查看当前硬链接内容
\S
Kernel \r on an \m [root@centos7-master /]# echo "this is a test" >> /etc/issue #向原文件末尾追加新内容
[root@centos7-master /]# cat /etc/issue #查看更新后原文件内容
\S
Kernel \r on an \m this is a test
[root@centos7-master /]# cat /tmp/issue.hard #查看原文件更新后硬链接的内容
\S
Kernel \r on an \m this is a test #可以看到,这里硬链接与原文件保持了同步更新
[root@centos7-master /]# rm /etc/issue #删除原文件
rm: remove regular file ‘/etc/issue’? y
[root@centos7-master /]# cat /tmp/issue.soft #检验软链接是否仍有效
cat: /tmp/issue.soft: No such file or directory
[root@centos7-master /]# cat /tmp/issue.hard #原文件就算删除或丢失,硬链接依然可以访问
\S
Kernel \r on an \m this is a test

上述实验我们可以看到,原文件有修改和更新,则硬链接也同步会进行更新;且原文件就算删除或丢失,硬链接依然可以访问,即如同拷贝(cp -p) + 同步更新功能。

(2) 可通过i节点识别。

一个文件一定有一个i节点,一个i节点不一定只对应一个文件。某文件的i节点和某文件的硬链接的i节点一般相同。当我们把原文件删除,硬链接依然会映射到对应的i节点。

关于i节点的知识,请浏览这篇文章:——————

实验:

软链接很好判断,如果软链接对应的原文件被删除后,我们通过ls查看软链接的文件信息,会发现软链接被标红,并不停闪烁。

如何判断硬链接呢?我们分别创建软/硬链接后查看i节点编号。

[root@centos7-master tmp]# cd /tmp
[root@centos7-master tmp]# ln issue.bak issue.bak.hard
[root@centos7-master tmp]# ln -s issue.bak issue.bak.soft
[root@centos7-master tmp]# ls -i issue.bak issue.bak.hard issue.bak.soft
8395173 issue.bak 8395173 issue.bak.hard 9116906 issue.bak.soft

可以看到,原文件的i节点编号是8395173,硬链接也是对应8395173编号的i节点的一个映射,而软链接的i节点编号则不同。

这样我们也可以十分容易理解为什么硬链接可以同步更新了,因为当我们对原文件进行修改操作时,在内核层面来看,这个操作实际上是针对对应的i节点进行操作,因为该i节点同时映射到了两个文件,所以硬链接也自然能体现出同步更新。

(3) 硬链接不能跨分区,但软链接可以

[root@centos7-master tmp]# ln /tmp/issue.bak /boot/issue.bak.hard
ln: failed to create hard link ‘/boot/issue.bak.hard’ => ‘/tmp/issue.bak’: Invalid cross-device link # 根分区/ 和 /boot分区不属于同一个分区 [root@centos7-master tmp]# ln -s /tmp/issue.bak /boot/issue.bak.soft

这相当于在Windows下将C盘的一个文件硬链接到D盘,是不被系统允许的。

(4) 硬链接不能针对目录使用,但软链接可以

[root@centos7-master tmp]# ln /tmp /root/tmp.hard
ln: ‘/tmp’: hard link not allowed for directory [root@centos7-master tmp]# ln -s /tmp /root/tmp.soft

这相当于在Windows下将D盘的一个目录软链接到桌面,系统是允许的。

B. 应用场景:

硬链接使用场景并不多,但可以将其作为一个实时备份来使用。

参考文献

[1] 兄弟连.兄弟连Linux入门视频教程[DB/OL].http://c.biancheng.net/view/1713.html,2018-12-21/2020-05-04

ln命令:软链接与硬链接的区别与应用的更多相关文章

  1. [转帖]Linux 下软链接和硬链接的区别

    Linux 下软链接和硬链接的区别 http://os.51cto.com/art/201911/605267.htm 软连接 文件是小的 只是一个链接 删除和其他处理不影响 原始文件的计数 删除源文 ...

  2. Linux上ln命令详细说明及软链接和硬链接的区别

    硬链接(hard link) UNIX文件系统提供了一种将不同文件链接至同一个文件的机制,我们称这种机制为链接.它可以使得单个程序对同一文件使用不同的名字.这样的好处是文件系 统只存在一个文件的副本, ...

  3. linux中软链接和硬链接的区别与小结

    ln命令 该命令在文件之间创建链接.这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称.对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题. 如果链 ...

  4. linux 下的使用 ln 创建 软链接 和 硬链接

    linux 下的一个指令 ln 作用: 创建软链接或者硬链接 Linux 系统下每创建一个文件,系统都会为此文件生成一个 index node 简称(inode) ,而每一个文件都包含用户数据(use ...

  5. linux下软链接与硬链接及其区别

    linux下创建链接命令 ln -s 软链接 这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最常用的参数是-s, 具体用法是:ln ...

  6. LINUX “软链接”和“硬链接”的区别

    今天在知乎上看到一篇十分有趣的问题: 如何评价微软高级工程师痴迷于soft link这一linux常见概念? 虽然又是知名撕逼王曾某的撕逼帖,但是我还是想就题目中链接的问题简单地讲讲. 什么是链接? ...

  7. Linux下软链接与硬链接的区别

    由于下面会说到inode,所以如果没有了解过,请务必搞懂inode的真正含义,厚颜无耻的推荐我的一篇博客:Linux磁盘与文件系统管理 如果我们在系统中新建一个文件,我们看到的文件名实际上只是表面现象 ...

  8. ln 软链接与硬链接的区别再次回顾

    以下是整理的笔记 软硬链接区别 硬链接 软链接 文件有相同的 inode 及 data block 是另一个文件 只能对已存在的文件进行创建 可以对不存在的文件进行创建 不能交叉文件系统进行硬链接的创 ...

  9. 描述Linux下软链接和硬链接的区别(计时2分钟)

    在linux系统中,链接分两种 :一种被称为硬链接(Hard Link),另一种被称为符号链接或软链接(Symbolic Link). 1)默认不带参数情况下,ln命令创建的是硬链接. 2)硬链接文件 ...

随机推荐

  1. flask 入门 之 Python Shell (一)

    1.安装插件: pip install flask_script 2.代码: #encoding:utf-8 from flask_sqlalchemy import SQLAlchemy from ...

  2. 搭建环境-Eclipse配置Tomcat创建Servlet总结

    Descripton:Web开发:Eclipse的下载与安装,Tomcat下载和结合Eclipse的使用,Eclipse使用Servlet[记录下总结下] 一.Eclipse的下载与安装 下载地址 注 ...

  3. Python爬虫系列(三):requests高级耍法

    昨天,我们更多的讨论了request的基础API,让我们对它有了基础的认知.学会上一课程,我们已经能写点基本的爬虫了.但是还不够,因为,很多站点是需要登录的,在站点的各个请求之间,是需要保持回话状态的 ...

  4. 字典树&&AC自动机---看完大概应该懂了吧。。。。

    目录 字典树 AC自动机 字典树 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计 ...

  5. Mac Jenkins+fastlane 简单几步实现iOS自动化打包发布 + jenkins节点设置

    最近在使用jenkins 实现ios自动化打包发布蒲公英过程实践遇到了一些坑,特意记录下来方便有需要的人. 进入正题: 一.安装Jenkins 1.Mac上安装Jenkins 遇到到坑 因为 Jenk ...

  6. java nio消息半包、粘包解决方案

    问题背景 NIO是面向缓冲区进行通信的,不是面向流的.我们都知道,既然是缓冲区,那它一定存在一个固定大小.这样一来通常会遇到两个问题: 消息粘包:当缓冲区足够大,由于网络不稳定种种原因,可能会有多条消 ...

  7. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十一)之Holding Your Objects

    To solve the general programming problem, you need to create any number of objects, anytime, anywher ...

  8. Python递归爬取头条用户的所有文章、视频

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

  9. stand up meeting for beta release plan 12/16/2015

    今天我们开会讨论一下beta版需要的feature,其中待定的feature是可选做的,如果有时间.其他都是必须实现的. 因为做插件的计划失败了,所以我们现在是pdf阅读器和取词查词加入生词本这两部分 ...

  10. Rescue BFS+优先队列 杭电1242

    思路 : 优先队列 每次都取最小的时间,遇到了终点直接就输出 #include<iostream> #include<queue> #include<cstring> ...