当前位置: 首页 > news >正文

Linux基础命令-ln创建链接文件

文章目录

ln

命令介绍

命令格式

基本参数

参考实例

1) 创建文件的硬链接

2)创建文件的软链接

3)创建链接文件时,相同目标文件创建备份文件

命令总结

ln

命令介绍

        先看下帮助文档中的含义

NAME
       ln - make links between files

ln(link)命令的主要功能是给源文件建立一个链接文件,系统中存在两种链接文件,一个是硬链接(hard link),一个是软连接(symbolic link)。

  • 硬链接:硬链接的原理就是多个文件名指向同一个inode,因此多个文件名公用一个inode号,达到共享和备份的目的,即使将源文件删除,硬链接文件依然可以指向block读取该文件的数据;但硬链接只能针对文件进行操作,无法对目录建立硬链接,也不能进行跨分区建立。
  • 软链接:可以理解成是windows中的快捷方式,建立软链接之后,是重新生成一个新的inode号,软链接文件增加信息,源文件信息也会跟着修改,如果将源文件删除了,那么软链接也会跟着失效;优势是可以对文件和目录进行操作,也可进行跨分区建立。

命令格式

命令的语法格式:ln 【参数】【源文件】【目标文件】

SYNOPSIS
       ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
       ln [OPTION]... TARGET                  (2nd form)
       ln [OPTION]... TARGET... DIRECTORY     (3rd form)
       ln [OPTION]... -t DIRECTORY TARGET...  (4th form)

基本参数

先看下命令的参数有哪些,表格形式显示:

-b为已存在的目标文件创建备份文件
-d允许root用户尝试创建硬链接目录(由于系统限制,大概率会失败)
-f强制覆盖现有的目标文件
-n把指向目录的符号链接视为一个普通文件
-i提示是否删除目录文件
-s对源文件建立(符号链接)快捷方式

参考实例

1) 创建文件的硬链接

创建文件的硬链接后,可以看到源文件和目标文件的inode号是一致的,并且文件的链接数是2。

[root@localhost ~]# cd data
[root@localhost data]# ll
总用量 0
[root@localhost data]# touch a.txt
[root@localhost data]# ln a.txt b.txt
[root@localhost data]# ll
总用量 0
-rw-r--r--. 2 root root 0 2月  28 15:44 a.txt
-rw-r--r--. 2 root root 0 2月  28 15:44 b.txt
[root@localhost data]# ll -i 
总用量 0
67259420 -rw-r--r--. 2 root root 0 2月  28 15:44 a.txt
67259420 -rw-r--r--. 2 root root 0 2月  28 15:44 b.txt

测试一:创建文件的硬链接后,删除源文件看看对硬链接文件有没有影响

首先先往文件中写入一些内容,让它成为一个有数据的文件。

[root@localhost data]# echo "hello world" > a.txt
[root@localhost data]# cat b.txt 
hello world
[root@localhost data]# cat a.txt 
hello world
[root@localhost data]# rm -f a.txt
[root@localhost data]# echo "this is centos7.9" >> b.txt
[root@localhost data]# cat b.txt 
hello world
this is centos7.9
[root@localhost data]# ll -hi b.txt 
67259420 -rw-r--r--. 1 root root 30 2月  28 15:48 b.txt

删除源文件后,硬链接文件完全不受影响,依然可以往其中写入内容,只是链接数变回了1。

测试二:对目录创建硬链接,看是否能创建

可以看到加上了-d参数,还是不能创建硬链接目录

[root@localhost data]# ln -d test test1
ln: 无法创建硬链接"test1" => "test": 不允许的操作

测试三:把文件的硬链接放到/dev目录

结果显示无法创建硬链接,这个是因为硬链接无法进行目录,跨分区实现建立,因为每个分区都有自己独立的INODE编号。

[root@localhost data]# ll
总用量 4
-rw-r--r--. 1 root root 30 2月  28 15:48 b.txt
drwxr-xr-x. 2 root root  6 2月  28 15:52 test
[root@localhost data]# ln b.txt /dev/b.txt
ln: 无法创建硬链接"/dev/b.txt" => "b.txt": 无效的跨设备连接[root@localhost data]# df -ih
文件系统                Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs                 488K     351    488K       1% /dev
tmpfs                    492K       1    492K       1% /dev/shm
tmpfs                    492K    1.4K    491K       1% /run
tmpfs                    492K      16    492K       1% /sys/fs/cgroup
/dev/mapper/centos-root   18M    130K     18M       1% /
/dev/sda1                512K     340    512K       1% /boot
tmpfs                    492K      22    492K       1% /run/user/0
/dev/sr0                    0       0       0        - /run/media/root/CentOS 7 x86_64

2)创建文件的软链接

创建软链接就需要加上-s的参数才行

[root@localhost data]# touch c.txt
[root@localhost data]# ln -s c.txt d.txt
[root@localhost data]# ll d.txt 
lrwxrwxrwx. 1 root root 5 2月  28 16:07 d.txt -> c.txt

创建好之后会显示d.txt文件指向了c.txt,当然可以看ll显示的文件类型,这里显示的文件类型是链接文件。

测试一:创建文件的软链接后,删除源文件看看对软链接文件有没有影响

还是一样,先写入一些内容到文件里

[root@localhost data]# touch c.txt
[root@localhost data]# ln -s c.txt d.txt
[root@localhost data]# ll -i c.txt d.txt 
67259384 -rw-r--r--. 1 root root 9 2月  28 16:17 c.txt
67259421 lrwxrwxrwx. 1 root root 5 2月  28 16:17 d.txt -> c.txt
[root@localhost data]# echo "hello world " > d.txt 
[root@localhost data]# rm -f c.txt 
[root@localhost data]# ll -h d.txt 
lrwxrwxrwx. 1 root root 5 2月  28 16:17 d.txt -> c.txt
[root@localhost data]# cat d.txt 
cat: d.txt: 没有那个文件或目录

对比源文件和软连接文件的inode号是不一样的,删除了源文件也就意味着链接文件失效了,里面的内容也查看不到。

测试二:对目录创建软链接,看是否能创建

目录是无法创建硬链接的,看下能否创建软连接

[root@localhost data]# mkdir test
[root@localhost data]# ln -s test test_dir
[root@localhost data]# ll -id test test_dir421301 drwxr-xr-x. 2 root root 6 2月  28 16:25 test
67259384 lrwxrwxrwx. 1 root root 4 2月  28 16:25 test_dir -> test

答案是肯定的,软链接是可以对目录进行创建的,创建出来的inode号是不相同的。

测试三:把文件的软链接放到/dev目录

前面有测试过硬链接是不能跨分区创建的,现在来看下软链接是否可行。

[root@localhost data]# ln -s test /dev/test_dir
[root@localhost data]# ll -id /dev/test_dir 
107112 lrwxrwxrwx. 1 root root 4 2月  28 16:28 /dev/test_dir -> test
[root@localhost data]# ll
总用量 0
drwxr-xr-x. 2 root root 6 2月  28 16:25 test
lrwxrwxrwx. 1 root root 4 2月  28 16:25 test_dir -> test
[root@localhost data]# touch a.txt
[root@localhost data]# ln -s a.txt /dev/a.txt
[root@localhost data]# ll -i /dev/a.txt 
107625 lrwxrwxrwx. 1 root root 5 2月  28 16:28 /dev/a.txt -> a.txt

 可以在其他分区创建软连接。

3)创建链接文件时,相同目标文件创建备份文件

相同的目标文件备份后会在同名称后加上一个“~”符号

[root@localhost data]# touch test/1.txt
[root@localhost data]# touch 1.txt
[root@localhost data]# ln -b 1.txt test/1.txt 
[root@localhost data]# ll test
总用量 0
-rw-r--r--. 2 root root 0 2月  28 16:34 1.txt
-rw-r--r--. 1 root root 0 2月  28 16:34 1.txt~

命令总结

        ln命令的硬链接其实可以看做是复制,只不过复制的是inode号,而软链接则是文件的快捷方式出现,一旦源文件删除了,快捷方式也会随之失效。若觉得以上内容还行的,可以点赞支持一下!

 

http://www.lryc.cn/news/23665.html

相关文章:

  • Day21【元宇宙的实践构想07】—— 元宇宙与人工智能
  • MySQL的InnoDB 三种行锁,SQL 语句加了哪些锁?
  • Java培训:深入解读函数式接口
  • scratch潜水 电子学会图形化编程scratch等级考试一级真题和答案解析2022年12月
  • DNS服务器部署的详细操作(图文版)
  • Compose – List / Detail: Basics实现
  • 【Java】TCP网络编程(字节/符流)
  • Linux之init.d、rc.d文件夹说明
  • 数据结构与算法(六):图结构
  • Kubernetes07:Service
  • Qt音视频开发18-不同视频打开无缝切换
  • 智能驾驶词典 --- 自动驾驶芯片梳理
  • 在NVIDIA NX 配置OpenCV多版本冲突和解决的总结
  • 记录pytorch安装 windows10 64位--(可选)安装paddleseg
  • UWB到底是什么技术?
  • NCRE计算机等级考试Python真题(八)
  • STM32之中断和事件
  • MySQL索引类型(type)分析
  • Linux | 2. 用户管理
  • 【MySQL之SQL语法篇】系统学习MySQL,从应用SQL语法到底层知识讲解,这将是你见过最完成的知识体系
  • CentOS8基础篇7:Linux系统启动配置
  • vue中的$forceUpdate()、$set()
  • 记住这3点,有效提高江苏专转本上岸率
  • 【经验总结】10年的嵌入式开发老手,到底是如何快速学习和使用RT-Thread的?(文末赠书5本)
  • 人大金仓和达梦的空间数据能力对比
  • 探析集团企业 1+N 模式,重新定义集团型CRM
  • 卡特兰数
  • 分布式任务处理
  • Linux 命令复习
  • leetcode 困难 —— 天际线问题(优先队列)