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号,而软链接则是文件的快捷方式出现,一旦源文件删除了,快捷方式也会随之失效。若觉得以上内容还行的,可以点赞支持一下!

相关文章:
Linux基础命令-ln创建链接文件
文章目录 ln 命令介绍 命令格式 基本参数 参考实例 1) 创建文件的硬链接 2)创建文件的软链接 3)创建链接文件时,相同目标文件创建备份文件 命令总结 ln 命令介绍 先看下帮助文档中的含义 NAME ln - make links …...
Day21【元宇宙的实践构想07】—— 元宇宙与人工智能
💃🏼 本人简介:男 👶🏼 年龄:18 🤞 作者:那就叫我亮亮叭 📕 专栏:元宇宙 0.0 写在前面 “元宇宙”在2021年成为时髦的概念。元宇宙到底是什么?元宇…...
MySQL的InnoDB 三种行锁,SQL 语句加了哪些锁?
InnoDB 三种行锁: Record Lock(记录锁):锁住某一行记录 Gap Lock(间隙锁):锁住一段左开右开的区间 Next-key Lock(临键锁):锁住一段左开右闭的区间 哪些语句…...
Java培训:深入解读函数式接口
函数式编程是一种编程规范或一种编程思想,简单可以理解问将运算或实现过程看做是函数的计算。 Java8为了实现函数式编程,提出了3个重要的概念:Lambda表达式、方法引用、函数式接口。现在很多公司都在使用lambda表达式进行代码编写,…...
scratch潜水 电子学会图形化编程scratch等级考试一级真题和答案解析2022年12月
目录 scratch潜水 一、题目要求 1、准备工作 2、功能实现 二、案例分析...
DNS服务器部署的详细操作(图文版)
DNS服务器的部署 打开虚拟机后查看已经开放的端口,可以看到没有TCP53、UDP53,说明DNS服务端口没有打开 打开我的电脑—双击CD驱动器— 选择安装可选的Windows组件 选择网络服务—域名系统(DNS)— 点击下一步后会弹出如下弹…...
Compose – List / Detail: Basics实现
Compose – List / Detail: Basics实现 在androidx中有SlidingPanelLayout可以实现折叠屏的列表详情功能,但在Compose 中还没有官方的实现,那么下面我们用Compose做一些实现。 List / Detail 我们追求的基本行为是当 UI 具有项列表时。当用户点击列表…...
【Java】TCP网络编程(字节/符流)
文章目录概念TCP网络编程ServerSocketsocket使用区别和原理演示概念 TCP(传输控制协议)是一种面向连接的协议,用于在计算机网络中可靠地传输数据。TCP是Internet协议族中的一个核心协议,它在传输层提供可靠、有序、基于流的传输服…...
Linux之init.d、rc.d文件夹说明
备注:Ubuntu没有rc.d文件夹,原因看问题四 Linux的几个重要文件 rc.d,init.d文件夹的说明 今天在研究mysql的安装的时候,最后一步要创建一个软连接,使得mysql服务可以自启动,代码如下: ln -s…...
数据结构与算法(六):图结构
图是一种比线性表和树更复杂的数据结构,在图中,结点之间的关系是任意的,任意两个数据元素之间都可能相关。图是一种多对多的数据结构。 一、基本概念 图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成&#x…...
Kubernetes07:Service
Kubernetes07:Service 1、service存在的意义 因为Pod的IP是不断变化的,所以需要注册service防止pod失联 1)为了防止Pod失联(服务发现) 2、定义一组Pod访问策略(负载均衡) 2、Pod和Service的关系-------通…...
Qt音视频开发18-不同视频打开无缝切换
一、前言 在轮询视频的时候,通常都是需要将之前的视频全部关闭,然后打开下一组视频,在这个切换的过程中,如果是按照常规的做法,比如先关闭再打开新的视频,肯定会出现空白黑屏之类的过度空白区间࿰…...
智能驾驶词典 --- 自动驾驶芯片梳理
0 前言 与智能驾驶相关的芯片主要分为自动驾驶芯片(边缘端)和智能座舱芯片两大类,另外衍生的相关芯片种类还有计算集群芯片(云端), 1 自动驾驶芯片梳理 目前业内具有代表性的智驾芯片产品梳理如下。 1…...
在NVIDIA NX 配置OpenCV多版本冲突和解决的总结
Nvidia Jetson NX 环境 直接刷JetPack5.1的镜像,会得到如下环境 Ubuntu20.04cuda11.4TensorRT8.4cudnn8.4opencv4.5.4 而且这些源一般是从nv-xxxx等源下载的,打开软件Software&Update可以更该是否从这些源安装deb包。同时意味着,我们…...
记录pytorch安装 windows10 64位--(可选)安装paddleseg
安装完paddlepaddle之后,就可以安装paddleseg了。一、安装Git可以参考这个网址:https://blog.csdn.net/u010348546/article/details/124280236windows下安装git和gitbash安装教程二、安装paddleseghttps://github.com/PaddlePaddle/PaddleSeg记得翻墙啊这…...
UWB到底是什么技术?
什么是空间感知能力 所谓的空间感知能力,就是感知方位的能力。更直接一点,就是定位能力。说白了,利用UWB技术,手机和智能设备可以更精准地实现室内定位,不仅可以感知自己的位置,还可以感知周边其它手机或设…...
NCRE计算机等级考试Python真题(八)
第八套试题1、数据库设计中反映用户对数据要求的模式是___________。A.概念模式B.内模式C.设计模式D.外模式正确答案: D2、一个工作人员可使用多台计算机,而一台计算机被多个人使用,则实体工作人员与实体计算机之间的联系是___________。A.多…...
STM32之中断和事件
中断和事件什么是中断当CPU正在执行程序时,由于发生了某种事件,要求CPU暂时中断当前的程序执行,转而去处理这个随机事件,处理完以后,再回到原来被中断的地方,继续原来的程序执行,这样的过程称为…...
MySQL索引类型(type)分析
type索引类型 system > const > eq_ref > ref > range > index > all 优化级别从左往右递减,没有索引的⼀般为’all’。推荐优化目标:至少要达到 range 级别, 要求是 ref 级别, 如果可以是 const 最好ÿ…...
Linux | 2. 用户管理
如有错误,恳请指出。 1. 设置文件权限 权限设置如下: root表示文件所有者,stud1表示文件所属组。其他用户无法访问。更改指令是chown。 更改目录文件所属组:chown .lab lossfound/更改目录文件所有者:chown lab loss…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
[特殊字符] 手撸 Redis 互斥锁那些坑
📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...
