Bash 脚本实例:获取符号链接的目标位置
我们都熟悉 Linux 中的符号链接,通常称为符号链接或软链接,符号链接是指向任何文件系统中的另一个文件或目录的特定文件。
本文将介绍 Linux 中符号链接的基础知识,并创建一个简单的 bash 脚本来获取符号链接的目标位置。
符号链接的类型
主要有两种类型的符号链接,即:
硬链接:硬链接是指向文件系统中的文件或目录的直接指针。硬链接只能在与目标文件相同的文件系统中创建。
软连接:软链接是文件或目录的间接快捷方式,可以存在于文件系统中的任何位置。软链接可以指向不同文件系统中的文件。
如何创建符号链接
要在 Linux 中创建符号链接,我们使用ln
命令。执行不带选项的命令会创建指向指定目标文件的硬链接。ln
命令的一般语法是:
ln [OPTIONS]如要创建软链接,需要添加
-s
选项:
ln -s [OPTION]
实例一:创建文件的软连接
以下命令在我们的主目录中创建指向/var/log/audit/audit.log
文件的软链接:
[root@localhost ~]# ln -s /var/log/audit/audit.log ~/audit.log
实例二:创建目录的软连接
以下命令在我们的主目录中创建指向/var/log
目录的软链接:
[root@localhost ~]# ln -s /var/log ~/log

如何删除符号链接
要删除符号链接,我们使用命令unlink
后跟要删除的符号链接的路径。
[root@localhost ~]# unlink ~/log下图可看到,log的快捷方式没有了。
注意:如果删除目标文件或目录,请记得删除符号链接,因为符号链接不会随着文件的删除而删除。
如何获取符号链接的目标文件或目录
每个符号链接都会指向一个目标文件或目录(除非损坏)。要获取符号链接的目标文件/目录,我们使用readlink
命令显示符号链接的目标。例如,要获取我们在前面部分中创建的 audit.log
文件的目标,我们可以执行以下操作:
[root@localhost ~]# readlink ~/audit.log
/var/log/audit/audit.log
获取符号链接的 Bash 脚本
我们可以创建一个简单的 bash 脚本,该脚本接受路径并列出所有符号链接及其目标文件或目录:[root@localhost ~]# vim symlink.sh #!/bin/bash read -p "Provide the directory to evaluate: " target_dir cd $target_dir links=$(find . -maxdepth 1 -type l -ls | awk '{print $11}') for link in $links do echo "$link -> $(readlink $link)" done
该脚本首先询问用户要获取的目录。然后,脚本转到提供的目录并找到目录中的所有符号链接,并将输出传递给
awk
命令。awk
输出并定位符号链接,并将它们保存到一个名为 links 的变量中。然后我们创建一个循环,抓取links变量中的每个链接,并使用 readlink
命令获取它们的目标位置。最后,显示符号链接和目标目录。下面是一个示例输出:
[root@localhost ~]# ./symlink.sh Provide the directory to evaluate: /etc ./rc.local -> rc.d/rc.local ./redhat-release -> centos-release ./system-release -> centos-release ./init.d -> rc.d/init.d ./rc0.d -> rc.d/rc0.d ./rc1.d -> rc.d/rc1.d ./rc2.d -> rc.d/rc2.d ./rc3.d -> rc.d/rc3.d ./rc4.d -> rc.d/rc4.d ./rc5.d -> rc.d/rc5.d ./rc6.d -> rc.d/rc6.d ./localtime -> ../usr/share/zoneinfo/Asia/Shanghai ./mtab -> ../proc/self/mounts ./yum.conf -> dnf/dnf.conf ./grub2.cfg -> ../boot/grub2/grub.cfg
总结
本文介绍了如何在 Linux 中使用符号链接的基础知识。然后我们创建了一个简单的脚本来查找指定目录中的符号链接并显示它们的源和目标位置。
转自https://mp.weixin.qq.com/s/pFTlYpIguv-4bSkbLAHWkw
喜欢这篇文章, 觉得有收获?欢迎打赏~~
想要内推字节的同学也可以联系我,或者直接使用以下链接进行投递:
社招:https://job.toutiao.com/s/d735st8
校招:字节跳动校招内推码: WSRYCQU 投递链接: https://jobs.toutiao.com/s/d739WNP
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
2021-06-28 详解JavaScript执行过程
2020-06-28 一个数据包在网络中的心路历程
2019-06-28 一篇文章彻底搞懂base64编码原理
2019-06-28 jenkins+gitlab自动化编译部署方案探索及服务端编译webpack实战