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

news/2024/11/24 2:11:20/

文章目录

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.ppmy.cn/news/28790.html

相关文章

html的常见标签使用

目录 1.vscode基础操作 2.html基础 语法 3.HTML文件的基本结构标签 4.注释标签 5.标题标签 6.段落标签:p 7.格式化标签 8.图片标签:img 绝对路径 相对路径 网络路径 alt属性 title属性 width/height属性 9.超链接标签:a 10.表格标签 11.列表标签 有序列表 无…

元宇宙营业厅,数字技术融合,赋能实体经济

在我国数字经济与虚拟服务市场规模扩大下,元宇宙营业厅强势来袭,从多场景、多内容,深耕高效协同的特色功能,基于多元化、灵活的交互体验,更大程度上解决线上业务办理抽象繁琐,线下业务办理的时空受限、业务…

Spring Boot 3.0系列【2】部署篇之使用GraalVM构建原生镜像

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本2.7.0 文章目录概述JIT & AOTJIT (动态编译)AOT(静态编译)GraalVM简介运行模式Native Image(原生镜像)…

apscheduler 定时任务框架

Apscheduler 介绍 四大组件 triggers:触发器,用于设定触发任务的条件job stores:作业存储器,用于存放任务,可以存放在数据库或内存,默认内存executors:执行器,用于执行任务&#x…

LeetCode 147. 对链表进行插入排序 | C/C++版

LeetCode 147. 对链表进行插入排序 | C语言版LeetCode 147. 对链表进行插入排序题目描述解题思路思路一:使用栈代码实现运行结果参考文章:思路二:减少遍历节点数代码实现运行结果参考文章:[]()LeetCode 147. 对链表进行插入排序 …

图像处理实战--Opencv实现人像迁移

前言: Hello大家好,我是Dream。 今天来学习一下如何使用Opencv实现人像迁移,欢迎大家一起参与探讨交流~ 本文目录:一、实验要求二、实验环境三、实验原理及操作1.照片准备2.图像增强3.实现美颜功能4.背景虚化5.图像二值化处理6.人…

MongoDB 详细教程,这一篇就够啦

文章目录1. 简介2. 特点3. 应用场景4. 安装(docker)5. 核心概念5.1 库5.2 集合5.3 文档6. 基本操作6.1 库6.1.1 增6.1.2 删6.1.3 改6.1.4 查6.2 集合6.2.1 增6.2.2 删6.2.3 改6.2.4 查6.3. 文档6.3.1 增6.3.2 删6.3.3 改6.3.4 查1. 语法2. 对比语法3. AN…

数据结构与算法系列之时间与空间复杂度

这里写目录标题算法的复杂度大O的渐进表示法实例分析空间复杂度每日一题算法的复杂度 衡量一个算法的好坏,一般 是从时间和空间两个维度来衡量的, 即时间复杂度和空间复杂度。 时间复杂度主要衡量一个算法的运行快慢, 空间复杂度主要衡量一个…