在这里插入图片描述

前言

大家好,又见面了,我是沐风晓月,本文是专栏【linux基本功-基础命令实战】的第60篇文章。

专栏地址:[linux基本功-基础命令专栏] , 此专栏是沐风晓月对Linux常用命令的汇总,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。

如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。

🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业😉😉
💕 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步🍺🍺🍺
💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘

一. ln命令介绍

在Linux中,“ln"代表创建链接(link)的命令。其英文全称是"link”。

Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为软链接,即符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。

  • 【硬连接】:硬连接指通过索引节点号来进行连接。inode是可以对应多个文件名的
    在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。

在Linux中,多个文件名可以指向同一索引节点。一般这种连接就是硬连接。

硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。

只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

  • 【软连接】:另外一种连接称之为符号连接(Symbolic Link),也叫软连接。

软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息

二. 语法格式及常用选项

具体来说,"ln"命令有如下两种常见用法:

  1. 创建硬链接:硬链接是指将一个已有文件的链接信息指向新的文件名和路径的过程。这样,原始文件和链接文件将共享相同的物理磁盘空间,且文件的更改将影响所有链接到该文件的硬链接。

使用"ln"命令创建硬链接的语法格式为:

   ln 文件名 链接文件名

例如:可以使用以下命令在当前目录中创建一个文件"file1.txt"的硬链接文件"link1.txt":

   ln file1.txt link1.txt
  1. 创建符号链接:符号链接(也称为软链接或快捷方式)是指在文件系统中引入一个指向原始文件或目录的新文件。

通过符号链接,可以将一个文件或目录连接到另一个位置,这样就可以在不移动原始文件的情况下访问该文件。

使用"ln"命令创建符号链接的语法格式为:

   ln -s 原文件 目标文件

例如:可以使用以下命令在当前目录中创建一个指向"/usr/local/bin"目录的符号链接"symlink":

 ln -s /usr/local/bin symlink

三. 参考案例

3.1 ln命令创建硬链接

3.1.1 创建硬链接

[root@mufenggrow ~]# mkdir test    # 创建test目录
[root@mufenggrow ~]# cd test       # 进入test目录
[root@mufenggrow test]# echo 111 > a.txt    # 在test目录创建一个名为a.txt的文件,并写入内容111
[root@mufenggrow test]# ln a.txt b.txt     # 在test目录创建一个名为b.txt的硬链接文件,链接到a.txt文件
[root@mufenggrow test]# ls               # 确认test目录下存在文件a.txt和b.txt
a.txt  b.txt
[root@mufenggrow test]# ll a.txt         # 查看文件a.txt的权限信息
-rw-r--r--. 2 root root 4 1016 09:20 a.txt
[root@mufenggrow test]# ll b.txt         # 查看文件b.txt的权限信息
-rw-r--r--. 2 root root 4 1016 09:20 b.txt
[root@mufenggrow test]# echo 222 > a.txt # 用文本编辑器修改文件a.txt的内容为222
[root@mufenggrow test]# cat a.txt       # 查看文件a.txt的内容
222
[root@mufenggrow test]# cat b.txt       # 查看文件b.txt的内容
222
[root@mufenggrow test]# ls -i b.txt a.txt # -i 选项可以显示文件的 inode 号
2798773 a.txt   2798773 b.txt
[root@mufenggrow test]# chmod 777 a.txt  # 修改文件a.txt的权限为可读、可写、可执行
[root@mufenggrow test]# ll a.txt b.txt  # 查看文件a.txt和文件b.txt的权限信息
-rwxrwxrwx. 2 root root 4 1016 09:21 a.txt
-rwxrwxrwx. 2 root root 4 1016 09:21 b.txt

注释:通过在a.txt和b.txt之间执行硬链接,实际上是在文件系统中创建了两个文件名,这两个文件名都指向相同的底层数据块。因此,当您更改其中一个文件的内容时,另一个文件的内容也会更改。但是,不管您使用哪个文件名,对它们的访问权限都是相同的。因此,在更改a.txt的访问权限时,b.txt的权限也将更改。

通过上面的代码案例,可以总结出以下规律:

  • 使用 ln 命令可以在文件系统中创建硬链接。硬链接在创建时和原始文件指向相同的底层数据块,并且它们有相同的 inode 号。
  • 硬链接和原始文件可以说是同一个文件,因此,无论您使用哪个文件名,对他们的操作都会影响这个文件的所有硬链接。
  • 硬链接与原始文件在权限和属性上是相同的,因此,当您更改一个文件的权限时,所有硬链接的权限也会同时更改。

所以: 硬链接的原理就是多个文件名指向同一个inode,因此多个文件名共用一个inode号,达到共享与备份的目的

3.1.2 源文件被删除,不影响链接文件的正常使用

[root@mufenggrow test]# ls -i a.txt  
# 使用 -i 选项查看文件 a.txt 的 inode 号。
#由于 a.txt 已经被删除,因此显示 "没有那个文件或目录" 的错误信息。
ls: 无法访问a.txt: 没有那个文件或目录
[root@mufenggrow test]# ls -i b.txt 
# 使用 -i 选项查看文件 b.txt 的 inode 号。
51877092 b.txt
[root@mufenggrow test]# stat b.txt   
# 使用 stat 命令查看文件 b.txt 的详细信息,包括 inode 号和硬链接数。
  文件:"b.txt"
  大小:8                 块:8          IO 块:4096   普通文件
设备:fd00h/64768d        Inode:51877092    硬链接:1
权限:(0777/-rwxrwxrwx)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2022-11-07 21:16:27.676048898 +0800
最近更改:2022-11-07 21:16:25.604044508 +0800
最近改动:2022-11-07 21:18:37.958324904 +0800   # 显示文件的最近改动时间

3.1.3 硬链接不能跨分区创建

在这里插入图片描述
硬链接的特点: 无法针对目录,跨分区无法实现。因为每个分区都有自己独立的INDOE编号

3.2 为什么目录刚刚创建的时候,链接数为2

默认新一个空目录,此目录的第二字段就是2(包含两个隐藏目录,因为每一个目录都有一个指向它本身的子目录"." 和指向它上级目录的子目录"…"),所以test是一个链接, 隐藏目录. 是第二个链接

[root@mufengxiaoyue ~]# mkdir test
[root@mufengxiaoyue ~]# ll -d test/    # 查看 test 目录的权限、硬链接数和所属用户、组信息等
drwxr-xr-x. 2 root root 6 69 16:28 test/
[root@mufengxiaoyue ~]# ll -id test/   # 查看 test 目录的 inode 号和硬链接数
391598 test/
[root@mufengxiaoyue ~]# ll -id test/.
391598 test/.                         
 # 目录本身的 inode 号和目录中 . 目录的 inode 号是相同的

3.3 ln -s 软链接的创建

3.3.1 ln -s创建软连接

软链接:相当于windows中的快捷方式
语法:ln -s 源文件 软链接的名字

[root@mufengxiaoyue test]# cp /etc/passwd a.txt
[root@mufengxiaoyue test]# ll
总用量 4
-rw-r--r--. 1 root root 2323 1016 09:28 a.txt
[root@mufengxiaoyue test]# ln -s a.txt a_laoxin.txt
[root@mufengxiaoyue test]# ll a_laoxin.txt 
lrwxrwxrwx. 1 root root 5 1016 09:28 a_laoxin.txt -> a.txt
[root@mufengxiaoyue test]# rm -rf a.txt
[root@mufengxiaoyue test]# ll a_laoxin.txt 
lrwxrwxrwx. 1 root root 5 1016 09:28 a_laoxin.txt -> a.txt
[root@mufengxiaoyue test]# 

需要注意的是:
源文件被删除,链接文件失效

在这里插入图片描述

3.3.2 能针对目录和跨分区创建软链接

[root@itlaoxin63 ~]# ln -s /boot/grub   grub-link

需要注意的是跨分区一定要写全路径,如果不写全路径,就像下面的代码是一定要报错的。

能跨分区创建(源文件必须写绝对路径)
[root@itlaoxin63 ~]# cd /boot/ 
[root@itlaoxin63 boot]# ln -s ./grub /root/aaa  (模拟不写全路径)
[root@itlaoxin63 boot]# ll /root/aaa 
lrwxrwxrwx 1 root root 6 516 16:21 /root/aaa -> ./grub  #报错了

3.4 其他用法

有时候我们解压完一个文件发现文件名字较长,这时候就可以用软链接改的短一点,

比如:

ln -sv prometheus-2.2.2 prometheus

总结

ln命令在日常工作中,应用的比较广泛,一定要认真学习,记熟记牢常用参数。

💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~

请添加图片描述
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐