关于硬链接和软连接(符号链接)的区别

2023-11-09

   linux系统下提供ln指令来进行文件链接。文件链接主要分为硬链接和软链接。

   硬链接:由于linux下的文件是通过索引节点(Inode)来识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配inode。每添加一个一个硬链接,文件的链接数就加1。

    可以用:ln命令来建立硬链接。语法:

 

  用法: 第一种:为”existingfile”创建硬链接,文件名为”newfile”。第二种:在”directory”目录中,为 ”existingfile-list”中包含的所有文件创建一个同名的硬链接。常用可选[options] –f 无论”newfile”存在与否,都创建链接。-n 如果”newfile”已存在,就不创建链接。

  例子:

 

注意在创建链接前,file1 显示的链接数目为1,创建链接后(1)file1和file1hard的链接数目都变为2;(2) file1和file1hard在inode号是一样的(3) file1和file1hard显示的文件大小也是一样。可见进行了ln命令的操作结果:file1和file1hard是同一个文件的两个名字,它们具有同样的索引节点号和文件属性,建立文件file1的硬链接,就是为file1的文件索引节点在当前目录上建立一个新指针。如下图,你可以删除其中任何一个,如rm file2 ,每次只会删除一个指针,链接数同时减一,只有将所有指向文件内容的指针,也即链接数减为0时,内核才会把文件内容从磁盘上删除。

 不足:

尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一下不足之处:(1)不可以在不同文件系统的文件间建立链接(2)只有超级用户才可以为目录创建硬链接。

 

 

软链接(符号链接):

软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。

       如果给ln命令加上- s选项,则建立软链接。如果[链接名]已经存在但不是目录,将不做链接。[链接名]可以是任何一个文件名(可包含路径),也可以是一个目录,并且允许它与“目标”不在同一个文件系统中。如果[链接名]是一个已经存在的目录,系统将在该目录下建立一个或多个与“目标”同名的文件,此新建的文件实际上是指向原“目标”的符号链接文件。 

   例子:

  

 

 

软链接与硬链接,区别不仅仅是在概念上,在实现上也是不同的。区别:硬链接原文件&链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件&链接文件拥有不同的inode号,表明他们是两个不同的文件;在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;链接数目是不一样的,软链接的链接数目不会增加;文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的,这用强调,因为是等同的嘛,而这里软链接显示的大小与原文件就不同了,file1大小是48B,而file1soft是5B,这里面的5实际上就是“file1”的大小。

总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。

 

缺点:

因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于硬链接和软连接(符号链接)的区别 的相关文章

  • 无需 cron 在后台发送邮件

    我想知道是否有一种方法可以运行 PHP 循环 以便在后台向订阅者发送几百封电子邮件 我的目标是格式化新闻通讯 单击发送 然后关闭浏览器或更改页面 当然 发送电子邮件的实际过程将在后台运行 不会因浏览器关闭而中断 我知道这可以通过 cron
  • 如何在特定 systemd 服务重新启动时触发自定义脚本运行

    我想知道如何安排自定义脚本在重新启动服务时运行 我的用例是 每当重新启动 Tomcat 服务时 我都必须运行多个命令 我想知道是否有一种方法可以编写脚本并安排它在重新启动 Tomcat 服务时运行 我已将 tomcat 脚本设置为 syst
  • 如何查找连接到 AF_INET 套接字的客户端的 UID?

    有什么方法或类似的东西ucred for AF UNIX如果是AF INET插座 TCP在我的例子中 找出连接到我的套接字的客户端的UID 还有 proc net tcp但它显示了UID of the creator插座的而不是连接的cli
  • Composer 安装要求

    我正在尝试将 Composer 安装到 Laravel 项目中 当我做的时候sudo composer install在项目目录中它显示了两个错误 Problem 1 Installation request for simplesoftw
  • 设置 Apache POI 的路径

    我想创建 Excel 文件并使用 java 程序在该文件中写入数据 That is here http www techbrainwave com p 554我在 java 文件所在的位置提取了 Apache POI 并将该路径包含在路径变
  • Linux shell 脚本中的 while 循环超时

    这工作正常 无限循环 while TRUE do printf done 我在尝试着timeout this while loop与timeout命令 所有这些都不起作用 timeout 5 while TRUE do printf don
  • 让 MongoDB 在 Linux 上监听远程连接

    我已在 Windows 本地计算机上 上成功安装 MongoDB 作为服务 但现在我想将 MongoDb 移动到单独的服务器 所以我将 tarball 解压到网络上的虚拟服务器 运行 Linux 当我从本地计算机使用 PuTTY 连接到服务
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • 将ADODB二进制流转换为字符串vba

    我有以下问题 我有一个存储在服务器上的 CSV 文件 但它有 3 个字符作为分隔符 我想从 URL 加载数据并使用 作为分隔符将数据填充到 Excel 页面的列中 到目前为止 我找到了使用 ADODB 记录集从网站加载文件的代码 但我无法进
  • GLIBCXX_3.4.26 未找到在 BeagleBone 上运行交叉编译的程序

    我有以下程序 include
  • 在 Ruby 中创建一个空文件:相当于“touch”?

    创建一个的最佳方式是什么emptyRuby 中的文件 类似于 Unix 命令的东西 touch https en wikipedia org wiki Touch 28Unix 29 touch file txt FileUtils tou
  • 如何使用 xterm.js 创建基于 Web 的终端以 ssh 进入本地网络上的系统

    我偶然发现了这个很棒的图书馆xterm js https xtermjs org 这也是 Visual Studio Code 终端的基础 我有一个非常普遍的问题 我想通过基于网络的终端 不在网络中 可能位于 aws 服务器上 访问本地网络
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp

随机推荐

  • spark学习6:应用程序的打包部署

    standlone 集群模式下 提交应用后 可以在浏览器中输入 spark master 8080 查看执行情况 yarn集群模式下 提交应用程序 提交后 可以在tracking URL 中查看记录 如下图 ps 在 spark shell
  • python项目实现配置统一管理的方法

    一个比较大的项目总是会涉及到很多的参数 最好的方法就是在一个地方统一管理这些参数 最近看了不少的python项目 总结了两种很有意思的配置管理方法 第一种 基于easydict实现的配置管理 首先需要安装numpy easydict以及ya
  • jmeter性能测试输出html报告

    前言 jmeter在界面模式下执行性能测试会占用大量的系统资源 导致测试数据不准确 为了减少系统资源的占用 我们建议在cmd 即非GUI模式 模式输入命令 进行性能测试 jmeter自带输出html测试报告功能 1 准备 写好脚本 2 在j
  • mysql—注入点获取WebShell的几种方式

    利用条件 1 有写文件条件 secure file priv show variables 要么禁用 要么设置了路径 show variables like secure 目录权限 对于MySQL来说 有可以对某个目录进行读写的权限 Sel
  • 【C++】【MATLAB】三元二次多项式拟合求极值点原理+代码

    一 需求描述 本人最近需要对多个3维数据进行曲线的拟合 并且找到极大值点 难点 1 一组数据有125个点 每个点有3个坐标值 x y z 以及一个对应的得分值t x y z范围不限 t的范围是0到1 2 得用C 语言去实现本人的需求 因此在
  • npm安装compression-webpack-plugin插件报错问题记录

    文章目录 问题再现 解决方案 总结 问题再现 因项目需要 在前端项目中安装compression webpack plugin插件 运行npm install compression webpack plugin命令之后在package j
  • 二分-最小值最大化问题

    二分 最小值最大化问题 大家好 鄙人第一次写CSDN博客 多多关照 大家共同进步 什么是最小值最大化问题问题呢 我们以一道经典例题为例 例题 POJ2456 链接 http poj org problem id 2456 题目描述 原文 D
  • MatrixDB 从4018个参赛项目中脱颖而出,获 HICOOL 全球创业大赛

    MatrixDB 又获奖了 聚焦全球创新创业趋势的 HICOOL 2021 全球创业大赛 历时145天的激烈角逐 遍布全球84个国家和地区 4018个参赛项目 5077名创业人才报名参加 作为今年最火热的国际化创业赛事 北京四维纵横数据技术
  • 华为OD机试 - 优秀学员统计(Java)

    题目描述 公司某部门软件教导团正在组织新员工每日打卡学习活动 他们开展这项学习活动已经一个月了 所以想统计下这个月优秀的打卡员工 每个员工会对应一个id 每天的打卡记录记录当天打卡员工的id集合 一共30天 请你实现代码帮助统计出打卡次数t
  • 分享java操作mongodb的crud代码

    代码中包括了mongodb的crud及其分页查询 排序功能 下载地址 分享java操作mongodb的crud代码 package com zuidaima mongodb test import java net UnknownHostE
  • python中str类型_python中str指的是什么类型

    python中str指的是什么类型 发布时间 2020 11 20 11 07 28 来源 亿速云 阅读 72 作者 小新 这篇文章将为大家详细讲解有关python中str指的是什么类型 小编觉得挺实用的 因此分享给大家做个参考 希望大家阅
  • VUE3中defineExpose的使用方法

    使用
  • [Raspi][SnowBoy][教程]树莓派SnowBoy搭建教程

    1 为什么使用SnowBoy 项目需要一个语音助手 但是小爱同学 天猫精灵这种方案可支持的唤醒方式太少了 经过一番查询找到snowboy 像上面提到的几款语音助手唤醒好像都是基于snowboy开发的 2 开始环境搭建 1 获取SnowBoy
  • eclipse JDT Plug-in Developer Guide

    文章目录 JDT Programmer s Guide JDT Programmer s Guide Eclipse平台是用一个全功能的Java集成开发环境 IDE 来传递的 Java开发工具 JDT 允许用户编写 编译 测试 调试和编辑用
  • Redis集合类型数据的统计模式

    Redis集合类型常见的四种统计模式 包括聚合统计 排序统计 二值状态统计和基数统计 聚合统计 所谓的聚合统计 就是指统计多个集合元素的聚合结果 包括 统计多个集合的共有元素 交集统计 把两个集合相比 统计其中一个集合独有的元素 差集统计
  • 【论文笔记】VLMO: Unified Vision-Language Pre-Training with Mixture-of-Modality-Experts

    1 介绍 1 1 视觉语言 VL 预训练的两种主流架构 1 dual encoder 分别对图像和文本进行编码 优点 检索任务 缺点 图像和文本之间的浅层交互不足以处理复杂的VL分类任务 2 单编码器 对模型图像 文本对进行跨模态关注的融合
  • 服务中找不mysql

    右键 计算机 点击 管理 然后点击 服务和应用程序 双击 服务 发现里面没有 MySql的服务 找到MySQL安装目录 我的是C Program Files MySQL MySQL Server 8 0 bin 打开cmd 进入MySQL的
  • java杨辉三角根据用户输入的行数n来显示杨辉三角的行数。

    import java util Scanner public class Main06 public static void main String args Scanner scanner new Scanner System in i
  • 高斯白噪声及Matlab常用实现方法

    http blog sina com cn s blog 4d7c97a00101cv5h html 一 概念 英文名称 white Gaussian noise WGN定义 均匀分布于给定频带上的高斯噪声 所谓高斯白噪声中的高斯是指概率分
  • 关于硬链接和软连接(符号链接)的区别

    linux系统下提供ln指令来进行文件链接 文件链接主要分为硬链接和软链接 硬链接 由于linux下的文件是通过索引节点 Inode 来识别文件 硬链接可以认为是一个指针 指向文件索引节点的指针 系统并不为它重新分配inode 每添加一个一