大家好,又见面了,我是沐风晓月,本文是专栏【linux基本功-基础命令实战】的第60篇文章。
专栏地址:[linux基本功-基础命令专栏] , 此专栏是沐风晓月对Linux常用命令的汇总,希望能够加深自己的印象,以及帮助到其他的小伙伴。
如果文章有什么需要改进的地方还请大佬不吝赐教。
个人主页:我是沐风晓月
个人简介:大家好,我是沐风晓月,双一流院校计算机专业
座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步
欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信
在Linux中,“ln"代表创建链接(link)的命令。其英文全称是"link”。
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为软链接,即符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
在Linux中,多个文件名可以指向同一索引节点。一般这种连接就是硬连接。
硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。
只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息
具体来说,"ln"命令有如下两种常见用法:
使用"ln"命令创建硬链接的语法格式为:
ln 文件名 链接文件名
例如:可以使用以下命令在当前目录中创建一个文件"file1.txt"的硬链接文件"link1.txt":
ln file1.txt link1.txt
通过符号链接,可以将一个文件或目录连接到另一个位置,这样就可以在不移动原始文件的情况下访问该文件。
使用"ln"命令创建符号链接的语法格式为:
ln -s 原文件 目标文件
例如:可以使用以下命令在当前目录中创建一个指向"/usr/local/bin"目录的符号链接"symlink":
ln -s /usr/local/bin symlink
[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 10月 16 09:20 a.txt
[root@mufenggrow test]# ll b.txt # 查看文件b.txt的权限信息
-rw-r--r--. 2 root root 4 10月 16 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 10月 16 09:21 a.txt
-rwxrwxrwx. 2 root root 4 10月 16 09:21 b.txt
注释:通过在a.txt和b.txt之间执行硬链接,实际上是在文件系统中创建了两个文件名,这两个文件名都指向相同的底层数据块。因此,当您更改其中一个文件的内容时,另一个文件的内容也会更改。但是,不管您使用哪个文件名,对它们的访问权限都是相同的。因此,在更改a.txt的访问权限时,b.txt的权限也将更改。
通过上面的代码案例,可以总结出以下规律:
所以: 硬链接的原理就是多个文件名指向同一个inode,因此多个文件名共用一个inode号,达到共享与备份的目的
[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 # 显示文件的最近改动时间
硬链接的特点: 无法针对目录,跨分区无法实现。因为每个分区都有自己独立的INDOE编号
默认新一个空目录,此目录的第二字段就是2(包含两个隐藏目录,因为每一个目录都有一个指向它本身的子目录"." 和指向它上级目录的子目录"…"),所以test是一个链接, 隐藏目录. 是第二个链接
[root@mufengxiaoyue ~]# mkdir test
[root@mufengxiaoyue ~]# ll -d test/ # 查看 test 目录的权限、硬链接数和所属用户、组信息等
drwxr-xr-x. 2 root root 6 6月 9 16:28 test/
[root@mufengxiaoyue ~]# ll -id test/ # 查看 test 目录的 inode 号和硬链接数
391598 test/
[root@mufengxiaoyue ~]# ll -id test/.
391598 test/.
# 目录本身的 inode 号和目录中 . 目录的 inode 号是相同的
软链接:相当于windows中的快捷方式
语法:ln -s 源文件 软链接的名字
[root@mufengxiaoyue test]# cp /etc/passwd a.txt
[root@mufengxiaoyue test]# ll
总用量 4
-rw-r--r--. 1 root root 2323 10月 16 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 10月 16 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 10月 16 09:28 a_laoxin.txt -> a.txt
[root@mufengxiaoyue test]#
需要注意的是:
源文件被删除,链接文件失效
[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 5月 16 16:21 /root/aaa -> ./grub #报错了
有时候我们解压完一个文件发现文件名字较长,这时候就可以用软链接改的短一点,
比如:
ln -sv prometheus-2.2.2 prometheus
ln命令在日常工作中,应用的比较广泛,一定要认真学习,记熟记牢常用参数。
好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
如果你喜欢的话,就不要吝惜你的一键三连了~