shell命令:ln -s 创建软链接采用相对路径时的奇怪用法

2023-11-09

目前基于测试结果得到结论,暂时无权威资料显示出原因
参考了 https://blog.csdn.net/weixin_42183399/article/details/80498750
但是这个博客给的结果只是特殊用法,无法归结至一般结论
下面开始正式介绍
 

文件及目录说明
/home/
/home/xxx.txt
/home/source/
/home/source/aaa.txt    --想要创建软链接的源文件
/home/source/ln.sh    --执行软链接命令的脚本
/home/source/file
/home/source/file/file2
/home/source/linkresult
/home/file/


名词解释
    相对路径写法的深度
        ../bbb.txt 深度为1层
        file/ 深度为1层
        ../file/ 深度为2层
        ../file/bbb.txt 深度为2层
        深度=/的个数
    
    ln -s [源路径] [目标路径]

规则一:
使用相对路径时,目标路径能够获取的层次不超过执行脚本所在的目录层次,也就是说目标相对路径不可使用..

规则二:
目标路径如果想对目标路径使用多层文件夹的形式创建链接,则源路径必须带..

    依旧使用上面的aaa.txt创建软链接
    采用命令 ln -s aaa.txt  bbb.txt,成功创建
    采用命令 ln -s aaa.txt file/bbb.txt 一定失败
    采用命令 ln -s aaa.txt file/bbb.txt 一定失败
    采用命令 ln -s aaa.txt file/file2/bbb.txt 一定失败
    也就是说,源路径没有..,目标路径只能是以脚本所在目录为基准,无法获取更深层目录

    采用 ln -s ../aaa.txt file/bbb.txt 一定成功
    但是 再采用 ln -s ../aaa.txt bbb.txt 一定失败
    但是 再采用 ln -s ../aaa.txt ../bbb.txt 一定失败(违反规则一)


而采用 ln -s ../aaa.txt file/bbb.txt成功,则涉及到另一个机制了
aaa.txt和准备执行的脚本/home/source/ln.sh是同一个目录,那么对原路径采用../aaa.txt 与 aaa.txt有何区别?

规则三:
源路径中".."的总数量 - ".."能够正常索引到对应文件的数量=目标相对路径写法必须使用的深度
    这时候aaa.txt与脚本路径已经相同,".."能够正常索引到对应文件的数量 = 0,".."的数量 = 1,差值为1,则目标文件夹的深度必须为一层
    所以采用命令 ln -s aaa.txt  bbb.txt,成功创建,ln -s ../aaa.txt file/bbb.txt 成功,并且ln -s ../aaa.txt bbb.txt失败(目标相对路径写法的深度为0层,而不是1层)
    同理ln -s ../../aaa.txt file/file2/bbb.txt 成功(多出了两组..,则目标相对路径写法的深度必须为二层,且不可为其他层次,例如一层,零层)

    继续,对脚本的上层目录的文件进行软连接
        ln -s ../xxx.txt yyy.txt 成功
        这里..是正常搜索目录,所以多出0组,则目标文件夹深度必须0层
        如果尝试更深深度 ln -s ../xxx.txt file/yyy.txt 失败
            尝试更深深度 ln -s ../xxx.txt file/file2/yyy.txt 失败
        
        正确做法,增加..
        ln -s ../../xxx.txt file/yyy.txt,因为..多出1组(../xxx.txt正常搜索到xxx.txt(1组..),..总数量为2,得到2-1=1),所以目标相对路径写法的深度必须为1层,不可为其他层次

规则四:
    "文件夹名/文件名" 等同于 "文件夹名/"  (因为深度相同)
    但使用"文件夹名/" 时 在目标路径生成的软链接的名字同源路径的文件名或文件夹名
    例如"ln -s ../aaa.txt file/" ,则会在/home/file目录下生成名为aaa.txt的软链接
    "ln -s ../aaa.txt file/bbb.txt" ,则会在/home/file目录下生成名为bbb.txt的软链接
    
规则五:
    对文件夹进行软链接,同上述规则(测试下面指令时,同名的软链接记得需要先删除旧的,否则提示file exit)
    ln -s file filecopy 成功
    ln -s ../file linkresult/filecopy 成功
    ln -s ../file linkresult/ 成功
    ln -s ../source filecopy 成功
    ln -s ../../source linkresult/filecopy 成功
    ln -s ../../source linkresult/ 成功
    
经过这么多规则后,如果没有必要,建议建软链接时源路径采用绝对路径的写法,目标路径相对绝对都可以,真的省心省事(不受规则一二三限制)
    目标路径相对路径写法
        ln -s /home/source/aaa.txt bbb.txt 成功
        ln -s /home/source/aaa.txt ../bbb.txt 成功(我可以到脚本上级目录,甚至是通过..到任意目录都可以)

    目标路径相对绝对写法
        ln -s /home/source/aaa.txt home/bbb.txt 成功
        ln -s /home/source/aaa.txt home/ 成功
        ln -s /home/source/aaa.txt /home/source/file/file2 成功

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

shell命令:ln -s 创建软链接采用相对路径时的奇怪用法 的相关文章

  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 使用循环在 C 中管道传输两个或多个 shell 命令

    我正在尝试执行ls wc l通过 C 语言程序 而不是使用命令行 这是我当前的工作代码 int main int pfds 2 pipe pfds pid t pid fork if pid 0 The child process clos
  • 如何正确使用fork、exec、wait

    我正在编写的 shell 需要执行用户提供给它的程序 这是我的程序的非常简短的简化版本 int main pid t pid getpid this is the parents pid char user input NULL size
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • 在 Mono 上运行 .Net MVC5 应用程序

    我正在 Windows 上的 Visual Studio 2013 中开发 Net 4 5 1 MVC5 应用程序 现在我想知道 是否可以在Linux Ubuntu 12 04 上运行这个应用程序 可以使用OWIN吗 Owin 可以自托管运
  • .net-core:ILDASM / ILASM 的等效项

    net core 是否有相当于 ILDASM ILASM 的功能 具体来说 我正在寻找在 Linux 上运行的东西 因此为什么是 net core ildasm 和 ilasm 工具都是使用此存储库中的 CoreCLR 构建的 https
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • SVN 提交后挂钩在提交后不会运行

    我的服务器上设置了 SVN 存储库 并且遇到提交后问题 我在 iMac 上使用 SmartSVN 作为客户端 我通过 SmartSVN 的 ssh svn 连接 我能够成功连接到 SVN 并对其进行更改 但从 SVN 客户端提交后 我的提交
  • 静态方法的 Java 内存模型

    我来自操作系统和 C 语言背景 在代码编译时 世界很简单 需要处理和理解堆栈 堆文本部分等 当我开始学习 Java 时 我确实了解 JVM 和垃圾收集器 我对静态方法感到很有趣 根据我的理解 类的所有实例都会在堆中创建 然后被清理 但是 对
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • Linux 为一组进程保留一个处理器(动态)

    有没有办法将处理器排除在正常调度之外 也就是说 使用sched setaffinity我可以指示线程应该在哪个处理器上运行 但我正在寻找相反的情况 也就是说 我想从正常调度中排除给定的处理器 以便只有已明确调度的进程才能在那里运行 我还知道
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • 这种文件锁定方法可以接受吗?

    我们有 10 个 Linux 机器 每周必须运行 100 个不同的任务 这些计算机主要在我们晚上在家时执行这些任务 我的一位同事正在开发一个项目 通过使用 Python 自动启动任务来优化运行时间 他的程序将读取任务列表 抓取一个打开的任务
  • 我什么时候应该编写 Linux 内核模块?

    有些人出于某种原因想要将 Linux 中的代码从用户空间移动到内核空间 很多时候 原因似乎是代码应该具有特别高的优先级 或者只是 内核空间更快 这对我来说似乎很奇怪 我什么时候应该考虑编写内核模块 有一套标准吗 我怎样才能激励将代码保存在
  • 如何在 Mac OSX Mavericks 中正确运行字符串工具?

    如何在 Mac OSX Mavericks 中正确运行字符串工具 我尝试按照我在网上找到的示例来运行它 strings a UserParser class 但我收到此错误 错误 Applications Xcode app Content
  • 如何让 Node.js 作为后台进程运行并且永不死掉?

    我通过 putty SSH 连接到 linux 服务器 我尝试将其作为后台进程运行 如下所示 node server js 然而 2 5 小时后 终端变得不活动 进程终止 即使终端断开连接 我是否也可以使进程保持活动状态 Edit 1 事实
  • 为什么同一个curl命令在windows和linux下输出不同的东西?

    为什么同样的curl o file https www link com 命令输出不同的东西 例如 如果我运行命令curl o source txt https www youtube com playlist list PLIx6Fwnp
  • 在 macOS 上使用 find 时出现“非法选项”错误

    我试图列出末尾仅带有字母 R 的文件 我用了find在 macOS 终端中如下所示 find type f name R 但我收到消息说illegal option t 第一个参数find是它应该开始寻找的路径 路径 表示当前目录 find
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • Hive中not in函数的小坑 :含null时的判断

    Hive中的not in函数有一个隐藏的陷阱 当not in 中的数值包含NULL 匹不上的数据会返回NULL而不是True 所以当在where中使用not in子查询进行筛选 一定要记得去除NULL值 样例代码 not in的原始结果 s
  • 打开文件,读取TXT

  • 通过HttpURLConnection连接上传文件和参数并接收

    网上使用HttpURLConnection通过get或post请求传递参数或者传递文件的例子有很多 但是同时传递参数和文件 服务的并接收参数和文件的例子很少 此文将介绍同时发送参数和文件并接收 1 HttpURLConnection简介 任
  • 产品经理的思考-我们是技术的主人吗?

    思考的起源 最近在准备公司内部的研发大会的汇报时 发现我们组的成员都跟我一样 是技术出身 在努力或者被迫努力的往技术产品经理的维度转变 晚上准备PPT到凌晨三点多 在最后收尾的时候 脑海里突然有几个疑问 在技术维 我们是技术的主人还是技术的
  • LFSR:线性反馈移位寄存器及其应用

    LFSR简介 LFSR Linear feedback shift register 是一种特殊的的移位寄存器 他的输入取决于其先前状态 LFSR的使用异常广泛 可以说涉及到方方面面 以下是Wikipedia列举的一些应用 INTELSAT
  • jquery 计算时间差

    用正则 且精确到秒 function Days1 date1 date2 var date3 date1 getTime date2 getTime 时间差的毫秒数 计算出相差天数 var days Math floor date3 24
  • Vue3使用方法

    Vue3相比于Vue2 解决了 Vue2中新增属性 删除属性 界面不会更新的问题 解决了 Vue2中直接通过下标修改数组 界面不会刷新的问题 vue cli版本必须是4 5以上 查看版本命令 vue V 创建工程命令 vue create
  • PAT(甲级)1148 Werewolf - Simple Version(枚举)

    Description 狼人杀游戏 第几个人说第几个人是狼人或者是人 规定所有人中有两个狼人 其中只有一个狼人和一个人说谎 要求找出两个狼人 Input 第一行n 代表n个人 接下来n行 正数 Di 代表 第i个人说第Di人是human 负
  • 内网服务器外网连接SSH远程端口转发实战详解

    问题 前段时间在外地没有在实验室 随身携带了一个笔记本电脑 但是笔记本性能不够 想用SSH远程连接实验室的电脑 问如何连接 现有以下设备 设备 IP 备注 系统 实验室电脑C1 192 168 0 24 内网 可访问外网 SSH登陆端口为3
  • 人脸关键点检测与 MMPose

    一 任务划分 MMPose 是利用深度学习算法对人体姿态进行估计的算法库 而人体姿态估计 是指 从给定图像中识别人脸 手部 身体等关键点 其中 输入 图像 I 输出 所有关键点的像素坐标 x 1 y 1 x 2 y 2 x j y j 这里
  • 【计算机网络】实验6:cisco交换机配置 在PacketTracer中对交换机设备使用命令行(CLI)进行配置

    一 实验目的 1 了解交换机的基本配置命令 2 了解交换机的VLAN配置 二 实验内容 1 packet Tracer 配置Cisco交换机 2 VLAN的配置 1 Packet Tracer 配置Cisco交换机 要配置好Cisco交换机
  • aix ---lspv command

    lspv 列出os中所有的pv pvname pvid vgname status hdisk0 00c3f005d072189b rootvg active hdisk1 00c3f435d0f4916c rootvg active hd
  • 高级软件测试成长路线-hogwarts

    高级软件测试成长路线
  • Echarts给柱状统计图、进度图的字体及柱子加不同的颜色及阴影

    今天记录一个Echart统计图中的几个小知识点以及方法 写的不好 仅供参考 如有不恰当之处 劳烦留言交流 手动抱拳 原图入选所示第一张图 改造后的图是第二张 改造前 改造后 首先看到这个图的颜色 颜色的选择按照自己的喜好和统计图所应用的场景
  • 小程序云开发入门到实践:云函数的配置与部署

    目录 1 4 云函数的配置与部署 1 4 1 云函数的开发环境 1 下载安装Node js 1 4 2 部署并上传云函数
  • Vue3封装 Message消息提示实例函数

    Vue3封装 消息提示实例函数 实现效果 Vue2 0使用 Vue prototype message function vue3 0使用app config globalProperties挂载原型方法app config globalP
  • 10 种跨域解决方案(附终极方案)

    写在前面 嗯 又来了 又说到跨域了 这是一个老生常谈的话题 以前我觉得这种基础文章没有什么好写的 会想着你去了解底层啊 不是很简单吗 但是最近在开发一个 vscode 插件 发现 当你刚入门一样东西的时候 你不会想这么多 因为你对他不熟悉
  • 苹果iOS 12.2开发者预览版beta 6发布

    3月19日消息 苹果今天推送了iOS 12 2开发者预览版Beta 6系统更新 还包括macOS 10 14 4 Mojave watchOS 5 2和tvOS 12 2的新版本 用户可以通过OTA推送升级 其中苹果iOS 12 2的Bet
  • 珍惜,那个主动联系你的人

    听过这样一句话 如果不是在乎你 谁会愿意一直主动付出 如果不是太爱你 谁又愿意低眉顺目 深以为然 感情里 一直都会主动联系你的人 才是真正在乎你 爱你的人 都说乍见之欢易 长相厮守难 再好的感情 也抵不过平淡岁月的冲刷磨砺 两个人相处久了
  • shell命令:ln -s 创建软链接采用相对路径时的奇怪用法

    目前基于测试结果得到结论 暂时无权威资料显示出原因 参考了 https blog csdn net weixin 42183399 article details 80498750 但是这个博客给的结果只是特殊用法 无法归结至一般结论 下面