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

【Linux】Linux的两种连接文件方法(ln | 符号链接和硬链接)

在一次线上配置文件时,不小心将配置文件config.py放在了错误的地方,而目前项目已经运行,又不能重新配置启动项目,那么如何将其他地方的文件放在当前配置目录来使用,并实现其他地方文件改动,配置目录下文件也会自己同步??

其实这个问题可以使用Linux的软链接或者硬链接来解决,换种说法就是:

如何在 Linux 中为文件创建硬练级和符号(软)链接,并探讨两者之间的相同和不同之处。

1.使用方法:

符号链接(软链接):

Linux 中使用 ln (link 的缩写)命令加上 -s(symbolic 的缩写) 
选项创建符号链接。

ln -s [链接指向的文件] [链接名]

ln -s test/a.txt /home/a.txt:为 test 目录下的 a.txt 文件创建一个在home下的名为 a.txt的符号链接

    虽然我们可以通过符号链接文件来读、写和执行文件,但却不代表符号链接文件和源文件是同一个文件。
    如果符号链接文件指定的源文件被删除,那这个符号链接文件就会失效(用 ls -l 列出会发现标红),读取或执行会显示“没有哪个文件或目录”的提示,这种情况下,我们就称这个符号链接断裂了。

硬链接:

Linux 中使用 ln (link 的缩写)命令创建硬链接。

ln [链接指向的文件] [链接名]

ln 1.txt 2.txt:为 1.txt 文件创建一个名为 2.txt 的硬链接

    创建前后,文件属性的第三个字段发生了改变,由一变成了二,表示文件的硬链接数目增加了一。当我们再为 1.txt 创建一个硬链接 3.txt 时,此时文件的硬链接数目变成了 3。但我们清楚,1.txt、2.txt、3.txt 本质上都是同一个文件。只不过这个文件有多个名字罢了。我们通过观察其 inode-number 可以发现,都是一样的,充分说明了这三个文件名实质上都指向了同一个文件。我们可以通过任意一个硬链接文件来读写和执行源文件。

    如果将源文件删除掉,创建的硬链接并不会像符号链接一样断裂。不过文件属性中的硬链接数据会减一。

    我们为 1.txt 文件创建了两个硬链接 2.txt 和 3.txt,那么就相当于这个文件在文件系统中有了三个文件名。这三个文件名都指向同一个文件内容。删除了一个文件,只是将某个文件名从文件系统中移除了,我们仍然能通过余下的文件名来访问这个文件的数据。

加粗样式事实上,只要文件还存在一个文件名,这个文件就一切正常。除非,你将三个文件都删除,我们才无法通过文件名找到文件 inode,进而访问文件数据,文件这才叫真真被删除。

2.关于Linux下 ‘链接’ 的理解:

符号链接与 Windows 中的快捷方式很像。Windows 中的快捷方式是一个带箭头的图标,空间占用一般很小,仅仅提供了一个指向目标文件的通道,Linux 中的符号链接也类似。符号链接应用很灵活,可以为任意文件创建符号链接。

虽然硬链接名字里面也有链接二字,但其与符号链接还是相当不一样的。要理解硬链接,我们得先了解若干基本概念。首先我们得搞明白 Linux 的文件是如何存储中,在 Linux 中当划分磁盘分区并格式化的时候,整个分区会被划分为两部分,即 Inode 区和 Data Block 区。

Linux 中每个文件都被分成两部分存放,一部分是文件的唯一标识,Inode-number 以及属性信息放在 Inode 区的一个
inode 中,Inode-number 和 inode 是一一对应的;另一部分是文件的实际数据,放在 Data Block 区中,在
Linux 中我们需要通过文件的 inode 来找到存放文件数据的 data block。在一个硬盘分区,不可能有两个文件公用一个
inode。自然也不可能有两个文件的 inode-number 是一样的。

如果我们将硬盘分区中所有的文件比作样一本书的话,inode 区就是其目录,data block 区对应其内容。我们必须通过目录才能找到具体的内容。我们可以通过 ls -il 列出文件的 inode-number(列出的第一个字段就是)。至此,我们初步弄明白了 Linux 中的文件到底是如何存储的,接下来我们还得弄明白 Linux 中的目录到底是怎样的文件。

Linux 中目录是一张表,每个表项代表一个文件。目录中有多少文件,就有多少表项。每个表项都包括两样数据,一是文件名,再就是 inode-number。因此 Linux 中存取文件的过程就是,通过文件名找到对应的 inode-number,再找到 inode,最后找到对应的数据。

硬链接就是在目录这张表中,让一个 inode-number 对应了多个文件名,文件 inode 和数据还是一份,没有变,只不过文件多了一个名字,这个名字就称为硬链接。

相关文章:

【Linux】Linux的两种连接文件方法(ln | 符号链接和硬链接)

在一次线上配置文件时,不小心将配置文件config.py放在了错误的地方,而目前项目已经运行,又不能重新配置启动项目,那么如何将其他地方的文件放在当前配置目录来使用,并实现其他地方文件改动,配置目录下文件也…...

vue 点击滑动到页面指定位置(点击下滑滚动)的功能

需求 点击页面上的 文字 滑动到页面指定位置 三种方法 document.getElementById(show).scrollIntoView() // 默认滚动至节点置顶document.getElementById(show).scrollIntoView(false) // 默认滚动至节点显示document.getElementById(show).scrollIntoView({ behavior: &quo…...

LCD婴儿电子秤pcba/芯片方案设计

一、LCD婴儿秤方案技术规格 1.额定量程:20Kg 2.分度值:D10g、0.02LB 3.最小秤量:20G. 4.单位:KG/LB/LB:OZ 5.归零范围:满量程 6.低压侦…...

2023年开发语言和数据库排行

2023年开发语言和数据库排行 一、开发语言相关1. Python1.1 Python优点1.2 Python缺点1.3 Python应用领域 2. C 语言2.1 C 语言优点2.2 C 语言缺点2.3 C语言应用领域 3. Java3.1 Java 优点3.2 Java缺点3.3 Java应用场景 4. C4.1 C 优点4.2 C 缺点4.3 C 应用场景 5. C#5.1 C# 优…...

实现http请求-hutool

hutool工具HttpUtil 使用hutool就能实现http请求,官方案例 // 最简单的HTTP请求,可以自动通过header等信息判断编码,不区分HTTP和HTTPS String result1 HttpUtil.get("https://www.baidu.com");// 当无法识别页面编码的时候&…...

Ubuntu22.04 FTP 搭建以及挂载

软件安装 sudo apt-get update 服务端nfs-kernel-server 客户端nfs-common sudo apt-get install -y nfs-kernel-server nfs-common创建NFS共享目录 sudo mkdir -p /nfssudo chown -R nobody:nogroup /nfs sudo chmod -R 777 /nfs配置文件 sudo vim /etc/exports# [共享目录…...

Mac电脑Visio文件编辑查看软件推荐Visio Viewer for Mac

mac版Visio Viewer功能特色 在Mac OS X上查看Visio绘图和图表 在Mac OS X上轻松查看MS Visio文件 在Mac上快速方便地打开并阅读Visio文件(.vsd,.vsdx)。 支持通过放大,缩小,旋转,文本选择和复制&#xff0…...

【星海出品】flask (二) request替代VUE测试flask接口

flask 是一门使用 python 编写的后端框架。 VUE前端UI装饰推荐学习Element组件库 之后就不使用UI去测试flask了,环节太多,影响直观反映,直接使用postman或request测试更加直观. url携带参数 app.route(/my/blog/<blog_id>)def blog_detail(blog_id): # put applicatio…...

Vue3路由配置

目录 ​编辑 一&#xff1a;前言 二&#xff1a;配置路由 1、安装路由 2、创建各文件 1&#xff09;views 下的 index.vue 文件 2&#xff09;router 下的 index.ts 3&#xff09;App.vue 文件修改 4&#xff09;main.ts 文件修改 3、一些会遇到的报错 1&#xff09;…...

Harbor(V2.8+) 登录时报错 net/http: TLS handshake timeout

问题描述 最近将harbor从v1.8 升级到v2.8后&#xff0c;客户端在登录时出现了以下问题&#xff1a; net/http: TLS handshake timeout解决方案 由于V2.8版本的nginx代理中只有配置TLSv1.2协议&#xff0c;没有TLSv1.1协议的支持&#xff0c;导致了部分客户端无法的登录。 在…...

【 云原生 | K8S 】kubectl 详解

目录 1 kubectl 2 基本信息查看 2.1 查看 master 节点状态 2.2 查看命名空间 2.3 查看default命名空间的所有资源 2.4 创建命名空间app 2.5 删除命名空间app 2.6 在命名空间kube-public 创建副本控制器&#xff08;deployment&#xff09;来启动Pod&#xff08;nginx-wl…...

2011年03月24日 Go生态洞察:Gobs数据编码与Go的完美契合

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

Spring集成MyBatis(自定义类和xml配置文件两种形式)

将mybatis与spring进行整合&#xff0c;主要解决的问题就是讲SqlSessionFactory对象交由spring来管理&#xff0c;所以&#xff0c;该整合&#xff0c;只需要将SqlSessionFactory的对象生成器SqlSessionFactoryBean注册在spring容器中&#xff0c;再将其注入给Dao的实现类即可完…...

Git系列之Git入门级(带你走进Git的世界)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《Git实战开发》。&#x1f3af;&#x1f3af; &a…...

GPU架构与计算入门指南

1比较CPU与GPU 首先&#xff0c;我们会比较CPU和GPU&#xff0c;这能帮助我们更好地了解GPU的发展状况&#xff0c;但这应该作为一个独立的主题&#xff0c;因为我们难以在一节中涵盖其所有的内容。因此&#xff0c;我们将着重介绍一些关键点。 CPU和GPU的主要区别在于它们的…...

功能测试转自动化测试好不好转型?

手工测试做了好多年&#xff0c;点点点成了每天必须做的事情。但是随着自动化测试趋势的日渐明显&#xff0c;以及受到薪资、技能的双重考验&#xff0c;掌握自动化测试成为了必备技能。 手工转自动化测试&#xff0c;不是一蹴而就的。“预先善其事&#xff0c;必先利其器”&a…...

微软surface laptop禁用触摸屏(win10、设备管理器)

参考链接&#xff1a; 在屏幕中启用和禁用触摸屏Windows 设置如下...

冒泡排序算法原理和代码实现,就是这么简单!

冒泡排序&#xff0c;是比较简单的一种排序算法。 它的命名源于它的算法原理&#xff1a;重复的从前往后&#xff08;或者从后往前&#xff09;&#xff0c;依次比较记录中相邻的两个元素&#xff0c;如果他们顺序错误就把它们交换过来&#xff0c;直到没有再需要交换的元素&am…...

[工业自动化-6]:西门子S7-15xxx编程 - PLC系统硬件组成与架构

目录 一、PLC系统组成 1.1 PLC 单机系统组成 1.2 PLC 分布式系统 二、PLC各个组件 2.1 PLC上位机 2.2 PLC主站&#xff1a;PLC CPU控制中心 &#xff08;1&#xff09;主要功能 &#xff08;2&#xff09;主站组成 2.3 PLC分布式从站: IO模块的拉远 &#xff08;1&am…...

pinpoint监控tomcat应用,页面显示No data collected

pinpoint安装部署教程大家都可以搜到。这里就不说了。单说一下 页面没有数据的情况。 部署环境&#xff0c;pinpoint安装部署在A服务器上。现在是在C、D、E、F……linux机器上安装pinpoint-agnet 1. 将文件 pinpoint-agent-1.8.5.tar.gz 上传到 服务器C、D、E、F…… 2. 解压…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...