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

Linux—ln(link files)命令使用方法(How to create links on Linux)

Linux—ln(link files)命令使用方法

在 Linux 系统中工作时,需要在不同的目录中使用相同的文件时不必在每个目录下都复制一份文件,这样不仅浪费磁盘空间,还会导致文件管理上的混乱。

在这里插入图片描述
ln(link files) 便是 Linux 中用于创建链接(也称为快捷方式)的命令。 使用 ln 命令创建链接是一种高效且节省空间的方法。

ln命令可以实现—将文件放在一个固定的目录中,然后在其他目录下创建指向该文件的链接。

链接link可以分为两种类型:硬链接(hard link)和软链接(symbolic link 或者 soft link)。


一、硬链接 (Hard Link)

定义:

  • 硬链接(hard link指向同一个文件系统中的同一个 inode 的多个文件名。注意哈同一文件系统!!! A hardlink can only work on the same filesystem.🤣🤣🤣
  • 每个文件在Linux系统中都有一个inode,包含了文件的所有信息(除了文件名和数据)。

在这里插入图片描述

  • 每个硬链接(Hard Link)都是文件的一个独立入口点,它们共享相同的数据块。

  • 创建一个硬链接时,实际上是为这个inode创建了一个新的入口点。

在这里插入图片描述

  • Hardlink has the same inode number and permissions of original file.
  • 即使原始文件被删除,只要还有一个硬链接存在,文件的数据就仍然可以访问。
  • Hard Link Demo:
    在这里插入图片描述

Hard Link 特性:

  • 共享数据:所有硬链接都指向同一个文件内容,对任何一个硬链接进行修改,其他硬链接也会看到这些更改。
    在这里插入图片描述
  • 删除原文件删除原文件不会影响其他硬链接硬链接是平等的,没有所谓的“原文件”,只要还有一个硬链接存在,文件的数据就仍然可以访问。
  • 限制硬链接不能跨文件系统创建,也不能为目录创建硬链接。(记住哈:hard link— 必须同一文件系统 + no 目录🤣🤣🤣)
    在这里插入图片描述

二、软链接 (Symbolic Link 或 Soft Link)

定义:

  • 软链接是一个特殊的文件,其中包含指向另一个文件或目录的路径

在这里插入图片描述

  • 软链接本身是一个独立的文件,只是其内容是指向另一个文件或目录的路径
  • Softlink has different inode number and file permissions than original file.
  • Softlink Demo:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


Soft link特性:

  • 独立性软链接是一个独立的文件,即使原始文件被删除,软链接仍然存在,但会变成无效链接(称为“断链”)。

在这里插入图片描述

  • 跨文件系统软链接可以跨文件系统创建,也可以指向目录。

在这里插入图片描述

  • 路径:软链接可以使用绝对路径或相对路径。

三、创建、删除link语法

3.1 硬链接

ln [选项] 目标文件 链接文件
  • -f--force:如果目标文件已经存在,则先删除再创建链接。
  • -i:在删除已存在的目标文件前提示用户。
  • -v--verbose:显示详细的处理信息。

  1. 创建硬链接(可以相对路径 也可绝对路径哈🤣🤣🤣)

在这里插入图片描述

已有文件 /home/user/documents/report.txt,在 /home/user/backup 目录下创建一个硬链接 report_link.txt

ln /home/user/documents/report.txt /home/user/backup/report_link.txt
  1. 强制创建硬链接(如果目标文件已存在则替换):

    ln -f /home/user/documents/report.txt /home/user/backup/report_link.txt
    
  2. 创建硬链接并显示详细信息

    ln -v /home/user/documents/report.txt /home/user/backup/report_link.txt
    

重要的事情说三遍🤣🤣🤣:

  • 硬链接必须在同一个文件系统内:硬链接不能跨文件系统创建。
  • 硬链接不能指向目录:只能为普通文件创建硬链接。
  • 硬链接是平等的:所有硬链接都指向同一个 inode,因此删除任意一个硬链接都不会影响其他硬链接或原始文件。

Tips可以使用 ls -i 命令查看文件的 inode 号,从而确认两个文件是否为硬链接

如果两个文件的 inode 号相同,那么它们就是硬链接。
在这里插入图片描述


3.2 软链接

ln -s [选项] 目标文件 链接文件
  • -f--force:如果目标文件已经存在,则先删除再创建链接。
  • -i:在删除已存在的目标文件前提示用户。
  • -v--verbose:显示详细的处理信息。
  1. 创建软链接

在这里插入图片描述

/home/user/documents/report.txt,在 /home/user/backup 目录下创建一个软链接 report_symlink.txt

ln -s /home/user/documents/report.txt /home/user/backup/report_symlink.txt
  1. 强制创建软链接(如果目标文件已存在则替换):

    ln -sf /home/user/documents/report.txt /home/user/backup/report_symlink.txt
    
  2. 创建软链接并显示详细信息

    ln -sv /home/user/documents/report.txt /home/user/backup/report_symlink.txt
    

重要的事情说三遍🤣🤣🤣:

  • 软链接可以跨文件系统:符号链接可以指向不同文件系统中的文件或目录。
  • 软链接可以指向目录:不仅可以为文件创建软链接,还可以为目录创建软链接。

在这里插入图片描述

  • 软链接的路径:可以使用绝对路径或相对路径。相对路径是相对于软链接所在目录的路径。

Tips:可以使用 ls -l 命令查看文件的详细信息,从而确认是否为软链接及其指向的目标:

ls -l /home/user/backup/report_symlink.txt
lrwxrwxrwx 1 user user 27 Oct 25 14:30 /home/user/backup/report_symlink.txt -> /home/user/documents/report.txt

l 表示这是一个符号链接,-> 后面的部分表示链接指向的目标文件。


3.3 删除link

使用 rm 命令

rm 是一个通用的删除命令,可以用来删除文件、目录和链接。对于删除链接,rm 命令是最常用的。
语法:

rm [选项] 链接路径

删除符号链接 symlink.txt 和一个硬链接 hardlink.txt

rm symlink.txt
rm hardlink.txt
使用 unlink 命令

unlink 命令专门用于删除链接。它的功能与 rm 命令类似,但更专注于删除单个文件或链接。

unlink 链接路径
unlink symlink.txt
unlink hardlink.txt
  1. 通用性

    • rm 是一个更通用的命令,可以删除文件、目录和链接。
    • unlink 专门用于删除单个文件或链接。
  2. 交互性

    • rm 命令提供了更多的选项,例如 -i 选项可以在删除前提示用户确认。
    • unlink 命令没有这些额外的选项,它只是一个简单的删除操作。
  3. 安全性

    • 使用 rm 时,可以通过 -i 选项增加安全性,防止误删文件。
    • unlink 没有这种选项,因此在使用时需要更加小心。
  • 推荐使用 rm 命令,因为它更常用,功能更丰富,尤其是在需要增加安全性的场景下。
  • 如果只需要简单地删除一个链接,可以使用 unlink 命令。

tips:无论使用哪个命令,删除链接后,链接文件本身会被移除,但硬链接对应的原始文件不会受到影响(除非这是最后一个硬链接)。对于符号链接,删除后只会移除链接文件,不会影响原始文件。


Link Tips:

  • 节省磁盘空间:无论是硬链接还是软链接,都不会复制原文件的内容,只占用非常少量的磁盘空间。
  • 易于维护:只需要在一个地方更新文件,所有链接都会自动反映这些更改。
  • 灵活性:软链接特别灵活,可以跨文件系统创建,也可以指向目录。

整理不易,列位多多支持,求点赞、求收藏、求评论 谢谢啦🤣🤣🤣~

相关文章:

Linux—ln(link files)命令使用方法(How to create links on Linux)

Linux—ln(link files)命令使用方法 在 Linux 系统中工作时,需要在不同的目录中使用相同的文件时,不必在每个目录下都复制一份文件,这样不仅浪费磁盘空间,还会导致文件管理上的混乱。 ln(link files) 便是…...

学习日记_20241110_聚类方法(K-Means)

前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…...

解决Oracle DECODE函数字符串截断问题的深度剖析20241113

解决Oracle DECODE函数字符串截断问题的深度剖析 在使用Oracle数据库进行开发时,开发者可能会遇到一些令人困惑的问题。其中,在使用DECODE函数时,返回的字符串被截断就是一个典型的案例。本文将以学生管理系统为背景,深入探讨这个…...

开源模型应用落地-语音转文本-whisper模型-AIGC应用探索(二)

一、前言 语音转文本技术具有重要价值。它能提高信息记录和处理的效率,使人们可以快速将语音内容转换为可编辑、可存储的文本形式,方便后续查阅和分析。在教育领域,可帮助学生更好地记录课堂重点;在办公场景中,能简化会议记录工作。同时,该技术也为残障人士提供了便利,让…...

PHP框架 单一入口和多入口以及优缺点

在PHP框架中,单一入口和多入口是两种不同的应用架构设计方式,以下是关于这两者及其优缺点的详细解释: 一、单一入口 定义: 单一入口(Single Entry Point)指的是应用程序通过一个统一的文件(通…...

PhpSpreadsheet导出图片

PhpSpreadsheet导出图片 //导出public function pdf($ids){$jzInfo $this->model->where(id,$ids)->find();try {//巡检人员$staff_ids \app\admin\model\inspection\Plan::where(id,$jzInfo[plan_id])->value(staff_id);$staff_names \app\admin\model\inspect…...

AI 提示词(Prompt)入门 十:最佳实践|详细询问,提供细节!

1、原则解释 当与 ChatGPT 交流时,提供具体和详细的信息非常重要。 这样做可以帮助 ChatGPT 更准确地理解你的需求和上下文,从而生成更相关和有用的回答 明确的信息可以包括具体的问题背景、相关领域的说明、你所期望的答案类型等。 2、如何实践 明…...

web应用安全和信息泄露预防

文章目录 1:spring actuator导致的信息泄露1.1、Endpoint配置启用检测1.2、信息泄露复现1.3、防御 2:服务端口的合理使用3:弱口令(密码)管理4:服务端攻击4.1、短信业务,文件上传等资源型接口1、…...

《人工智能深度学习的基本路线图》

《人工智能深度学习的基本路线图》 基础准备阶段 数学基础: 线性代数:深度学习中大量涉及矩阵运算、向量空间等概念,线性代数是理解和处理这些的基础。例如,神经网络中的权重矩阵、输入向量的运算等都依赖于线性代数知识。学习内容…...

基于Java Springboot宠物猫售卖管理系统

一、作品包含 源码数据库全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据库:…...

力扣-Hot100-链表其三【算法学习day.36】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…...

iOS逆向入门:使用theos注入第三方依赖库

背景 theos是一个跨平台的软件开发框架,常用于管理,开发和部署iOS项目,同时也是开发iOS越狱插件的主要工具。和MonkeyDev不同的是,它不依赖于xcode,可以在多个操作系统上运行。一个完整的iOS越狱开发流程包括&#xf…...

JavaScript 原型

JavaScript 的原型(Prototype)是其面向对象编程模型的核心概念之一,它决定了对象如何继承属性和方法。通过理解 JavaScript 的原型,你可以更好地理解对象之间的关系以及如何扩展对象功能。 核心概念 [[Prototype]](内部…...

力扣 LeetCode 20. 有效的括号(Day5:栈与队列)

解题思路: 使用栈 只有三种情况 1. ( [ { } ] ( ( 左括号多了 -> 最后栈中经过抵消会剩下括号 2. [ { ( ] } ] 括号不匹配 -> return false 3. [ { } ] ( ) ) ) 右括号多了 -> 未遍历完时,栈提前为空,…...

git使用及上线流程(仅为我工作中常用)

推荐软件或者直接终端 ⚠️注意:在确保远程和本地分支都可使用的情况下 git常见使用命令 ls---查看所有目录 pwd---本机密码 cd 目录名---进入目录 Touch ---创建文本文件 git status---查看状态 git branch---查看分支 git pull---拉取远程最新代码 git checkou…...

React Native 全栈开发实战班 - 打包发布之热更新

在完成 React Native 应用的开发与性能优化后,下一步就是将应用打包并发布到各大应用市场,如 Apple App Store 和 Google Play Store。本章节已经详细介绍了打包与发布的流程,包括 Android 和 iOS 平台的配置、打包步骤、签名配置以及发布到应…...

2024年11月16日 星期六 重新整理Go技术

今日格言 坚持每天进步一点点~ 一个人也可以是一个团队~ 学习全栈开发, 做自己喜欢的产品~~ 简介 大家好, 我是张大鹏, 今天是2024年11月16日星期六, 很高兴在这里给大家分享技术. 今天又是休息的一天, 做了很多的思考, 整理了自己掌握的技术, 比如Java, Python, Golang,…...

力扣第 55 题 跳跃游戏

力扣第 55 题 跳跃游戏(Jump Game)。题目要求判断一个非负整数数组中,是否能够从第一个位置跳跃到最后一个位置。每个元素表示从当前位置最多可以跳跃的步数。 解题思路 我们可以用 贪心算法 来解决这个问题。贪心的核心思想是始终维护当前…...

Golang | Leetcode Golang题解之第564题寻找最近的回文数

题目: 题解: func nearestPalindromic(n string) string {m : len(n)candidates : []int{int(math.Pow10(m-1)) - 1, int(math.Pow10(m)) 1}selfPrefix, _ : strconv.Atoi(n[:(m1)/2])for _, x : range []int{selfPrefix - 1, selfPrefix, selfPrefix …...

Spring Boot汽车资讯:科技与速度的交响

3系统分析 3.1可行性分析 通过对本汽车资讯网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本汽车资讯网站采用SSM框架,JAVA作为开发语言&#…...

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

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

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...

Selenium常用函数介绍

目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...