惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
博客园 - 三生石上(FineUI控件)
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
V
Visual Studio Blog
小众软件
小众软件
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
MongoDB | Blog
MongoDB | Blog
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
Microsoft Azure Blog
Microsoft Azure Blog
The Cloudflare Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Engineering at Meta
Engineering at Meta
L
LangChain Blog
Martin Fowler
Martin Fowler
GbyAI
GbyAI
博客园 - 司徒正美

热爱生活与梦想

迁移LeanCloud的Waline评论数据到TiDB/Neon 25年江浙地区暑假自驾游之感慨 使用阿里云灵码继续完成构建 SSL 证书管理器 亲手给儿子做的棒棒糖摩天轮六一礼物 使用腾讯云 CodeBuddy 构建 SSL 证书管理器 修复代码块默认高度相关缺陷 HugoNexT4.7.2 新功能和升级提示 改善代码块折叠和选中功能 支持Github风格的警告样式 新增音乐短代码功能支持 给文章添加摘要和过期提示功能 回顾24年的过去总结 修复Mathjax行内显示公式的问题 给Hugo文章增加阅读更多跳转的锚点定位功能 Win10隐匿的VPN设置和L2TP连接常见错误 Go语言中“糟糕”的日期时间格式化设计 DaoCloud道客提供的免费Docker镜像代理服务 感谢万能淘宝让自己吃到喜欢的美食 WSL运行时遇到未知异常错误无法使用 隐藏的换行符导致Base64加密解密失败 MySQL自带客户端直接免密登录操作 Java程序调用外网API时CA问题 如何不关机重启WSL2恢复虚拟服务 在Windows上安装Podman容器平台做虚拟化 记一次无法弹出移动硬盘的记录 为友情链接添加自动检测脚本 重新激活Github的2FA认证 Linux中使用tar压缩命令排除文件 继续小米手环的健康生活之旅 一次意外的“坠机”引发了我对手机保护壳的深思
Linux系统中删除目录软链接的注意项
凡梦星尘 · 2024-08-19 · via 热爱生活与梦想

对于软链接的操作在Linux系统中还是较为常见,相当于是Windows系统中的快捷方式,平时经常会用它来做些类似mv命令重命名的操作,让些烦乱的文件管理更加的清晰些,比如源文件目录或文件名称太过冗余,可通过创建软链接进行简化,同时也是省去了文件的搬迁,大大提升了操作的效率。

但此次遇到个奇怪的情况,就是当使用ln -sf命令更新软链接时,但不仅没有更新,而且还是在原软链接的源目录中生成一个奇怪的自链接目录,操作记录示例如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@debian12 soft-link]# tree -L 2
.
├── src
│   ├── 1.txt
│   └── 2.txt
└── tar -> src

3 directories, 2 files
[root@debian12 soft-link]# mkdir src2
[root@debian12 soft-link]# touch src2/3.txt
[root@debian12 soft-link]# ln -sf src2 tar
[root@debian12 soft-link]# tree -L 2
.
├── src
│   ├── 1.txt
│   ├── 2.txt
│   └── src2 -> src2
├── src2
│   └── 3.txt
└── tar -> src

4 directories, 4 files

临时想到的解决方案就是,要不使用rm命令删除原有软链接,再重新创建新的软链接,但由于习惯于使用Tab快捷键操作,结果把源目录的下的内容给删除,原因就是Tab快捷键时会在目录名称后面自动加上\符号,导致“不知不觉”中就把目录下的文件清空,而非所预想的只是删除软链接。所以删除软链接时,特别是目录类型的软链接更是要注意这里的细节。

而后也尝试了其他方案,发现使用ln -snf 命令能够成功更新已有软链接,对于这结果突然觉得有点无语,真的不知做何解释。以前都是使用ln -sf更新软链接是没有问题的,现在却是无法正确的执行,真是有点玄学的味道呀,哈!😄

以下是通过与ChatGPT交流后给出的回答,仅供参考(很遗憾AI的回答并没有解决问题):

使用 ln -snf 命令时,选项的含义如下:

  • -s:创建软链接(符号链接)。
  • -n:当目标(即软链接指向的文件或目录)已存在且为非目录时,不进行覆盖。
  • -f:强制执行,如果软链接已存在,不论目标是否存在,都删除旧的软链接并重新创建。

在您的例子中,使用 ln -snf src tar 命令时,以下是命令执行的逻辑:

  1. tar 软链接已经存在。
  2. -n 选项检查 tar 指向的目标(在这个例子中是 src 目录)是否存在,并且是否为非目录。在这里 src 是目录,所以 -n 选项不会阻止命令执行。
  3. -f 选项强制删除已存在的 tar 软链接。
  4. 然后 ln 命令重新创建 tar 软链接,指向新的指定目录 src

由于 -f 选项的作用,即使 tar 软链接已经存在,它也会被删除并重新创建为指向 src。然而,-n 选项在这个特定情况下并没有实际作用,因为 -f 选项的优先级更高,它覆盖了 -n 的行为。

当您之前使用 ln -sf 命令时遇到问题,可能是因为命令没有被正确执行,或者存在 Shell 环境问题、权限问题或其他系统级的问题。而当您使用 ln -snf 时,由于 -f 选项的存在,命令能够正常执行并更新软链接。

如果您遇到 ln -sf 命令不按预期工作的情况,检查以下几点可能会有所帮助:

  • 确保您使用的是 Bash Shell,或者至少是支持 GNU 核心工具集的 Shell。
  • 检查当前目录下没有别名或函数覆盖了 ln 命令。
  • 确保您有足够的权限在该目录下创建和删除文件。
  • 如果您在脚本中使用该命令,请确保脚本没有语法错误,并且命令被正确调用。

您可以使用 type ln 来检查 ln 命令是否被别名或函数覆盖,如果输出显示为 aliasfunction,使用 \ln -sf 来忽略别名或函数,直接调用实际的 ln 命令。