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

 

相关文章:

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表达式进行代码编写&#xff0c…...

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-不同视频打开无缝切换

一、前言 在轮询视频的时候,通常都是需要将之前的视频全部关闭,然后打开下一组视频,在这个切换的过程中,如果是按照常规的做法,比如先关闭再打开新的视频,肯定会出现空白黑屏之类的过度空白区间&#xff0…...

智能驾驶词典 --- 自动驾驶芯片梳理

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 最好&#xff…...

Linux | 2. 用户管理

如有错误,恳请指出。 1. 设置文件权限 权限设置如下: root表示文件所有者,stud1表示文件所属组。其他用户无法访问。更改指令是chown。 更改目录文件所属组:chown .lab lossfound/更改目录文件所有者:chown lab loss…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...