百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Linux 符号链接

bigegpt 2024-08-05 11:46 8 浏览

符号链接(symbolic link 或 symlink)是 Linux 中一种文件类型,它指向计算机上的另一个文件或文件夹。符号链接类似于 Windows 中的快捷方式。

有人称符号链接为“软链接”,指 Linux / UNIX 系统中的一种链接,与“硬链接”相反。

软链接与硬链接的区别

软链接类似于快捷方式,可以指向任何文件系统中的另一个文件或目录。

硬链接也是文件和文件夹的快捷方式,但是无法为其他文件系统中的文件夹或文件创建硬链接。

让我们看看怎么创建和删除符号链接。我们还将看到什么是断开的链接,以及如何删除它们。

如何创建符号链接

创建符号链接的语法如下:

ln -s <path to the file/folder to be linked> <the path of the link to be created>

ln 是链接命令。-s 标记表示这个链接应该是软链接。-s 也可以写成-symbolic。

默认情况下,ln 命令创建硬链接。接下来是 path to the file (or folder),是你想要链接的文件(或文件夹)的路径(即为其创建快捷方式)。

最后一个参数是 path to link,链接本身(快捷方式)。

如何为文件创建符号链接——示例命令

ln -s /home/james/transactions.txt trans.txt

运行此命令后,你将能够使用 trans.txt 访问 /home/james/transactions.txt。对 trans.txt 的任何修改也将反映在原始文件中。

请注意,上面的命令将在当前目录中创建链接文件 trans.txt。你也可以在以下文件夹链接中创建链接文件:

ln -s /home/james/transactions.txt my-stuffs/trans.txt

当前目录中必须已经有一个名为 “my-stuffs” 的目录——如果没有,该命令将引发错误。

如何为文件夹创建符号链接——示例命令

和上面类似,我们使用:

ln -s /home/james james

这将创建一个名为“ james”的符号链接文件夹,其中将包含 /home/james 的内容。对此链接文件夹的任何更改也会影响原始文件夹。

如何移除一个符号链接

在删除符号链接之前,你可能需要确认文件或文件夹是符号链接,以免损坏文件。

一种方法是:

ls -l <path-to-assumed-symlink>

在终端上运行此命令将显示文件的属性。如果结果中第一个字符是小写字母 “l”,则表示文件/文件夹是符号链接。

你还将在末尾看到一个箭头(->),指示符号链接指向的文件/文件夹。

有两种方法可以删除符号链接:

如何使用 unlink 移除符号链接

使用以下语法:

unlink <path-to-symlink>

如果程序没问题,这就删除符号链接。

即使符号链接以文件夹的形式出现,也不要附加“ /”,因为 Linux 将假定它是目录,而 unlink 不能删除目录。

如何使用 rm 移除符号链接

符号链接只是指向原始文件或文件夹的另一个文件或文件夹。可以通过移除链接的文件来移除这个指向关系。

rm <path-to-symlink>

例如:

rm trans.txt
rm james

请注意,尝试执行 rm james/ 会导致错误,因为 Linux 会假设 “james /” 是?目录,这将需要其他选项,例如 r 和 f。但这不是我们想要的。一个符号链接可能是一个文件夹,但是我们只关心名称。

rm 优于 unlink 的主要好处是,你可以一次删除多个符号链接,就像删除文件一样。

如何找到和删除损坏的链接

当符号链接指向的文件或文件夹更改路径或被删除时,链接被损坏。

例如,如果 “transactions.txt” 从 /home/james 移到 /home/james/personal,则 “trans.txt” 链接将断开。每次访问该文件的尝试都将产生错误:“无此文件或目录”。这是因为链接没有自己的内容。

发现损坏的链接时,可以轻松删除文件。查找损坏的符号链接的简单方法是:

find /home/james -xtype l

这将列出 james 目录中所有损坏的符号链接——从文件到目录再到子目录。

传递 -delete 选项将删除它们,如下所示:

find /home/james -xtype l -delete

总结

符号链接是 Linux 和 UNIX 系统中的一个有意思的功能。

你可以创建易于访问的符号链接,来引用原本不方便访问的文件或文件夹。通过一些练习,你将了解它们如何在直观的水平上工作,并且它们将使你更加有效地管理文件系统。

原文:Symlink Tutorial in Linux – How to Create and Remove a Symbolic Link,作者:Dillion Megida

相关推荐

Go语言泛型-泛型约束与实践(go1.7泛型)

来源:械说在Go语言中,Go泛型-泛型约束与实践部分主要探讨如何定义和使用泛型约束(Constraints),以及如何在实际开发中利用泛型进行更灵活的编程。以下是详细内容:一、什么是泛型约束?**泛型...

golang总结(golang实战教程)

基础部分Go语言有哪些优势?1简单易学:语法简洁,减少了代码的冗余。高效并发:内置强大的goroutine和channel,使并发编程更加高效且易于管理。内存管理:拥有自动垃圾回收机制,减少内...

Go 官宣:新版 Protobuf API(go pro版本)

原文作者:JoeTsai,DamienNeil和HerbieOng原文链接:https://blog.golang.org/a-new-go-api-for-protocol-buffer...

Golang开发的一些注意事项(一)(golang入门项目)

1.channel关闭后读的问题当channel关闭之后再去读取它,虽然不会引发panic,但会直接得到零值,而且ok的值为false。packagemainimport"...

golang 托盘菜单应用及打开系统默认浏览器

之前看到一个应用,用go语言编写,说是某某程序的windows图形化客户端,体验一下发现只是一个托盘,然后托盘菜单的控制面板功能直接打开本地浏览器访问程序启动的webserver网页完成gui相关功...

golang标准库每日一库之 io/ioutil

一、核心函数概览函数作用描述替代方案(Go1.16+)ioutil.ReadFile(filename)一次性读取整个文件内容(返回[]byte)os.ReadFileioutil.WriteFi...

文件类型更改器——GoLang 中的 CLI 工具

我是如何为一项琐碎的工作任务创建一个简单的工具的,你也可以上周我开始玩GoLang,它是一种由Google制作的类C编译语言,非常轻量和快速,事实上它经常在Techempower的基准测...

Go (Golang) 中的 Channels 简介(golang channel长度和容量)

这篇文章重点介绍Channels(通道)在Go中的工作方式,以及如何在代码中使用它们。在Go中,Channels是一种编程结构,它允许我们在代码的不同部分之间移动数据,通常来自不同的goro...

Golang引入泛型:Go将Interface「」替换为“Any”

现在Go将拥有泛型:Go将Interface{}替换为“Any”,这是一个类型别名:typeany=interface{}这会引入了泛型作好准备,实际上,带有泛型的Go1.18Beta...

一文带你看懂Golang最新特性(golang2.0特性)

作者:腾讯PCG代码委员会经过十余年的迭代,Go语言逐渐成为云计算时代主流的编程语言。下到云计算基础设施,上到微服务,越来越多的流行产品使用Go语言编写。可见其影响力已经非常强大。一、Go语言发展历史...

Go 每日一库之 java 转 go 遇到 Apollo?让 agollo 来平滑迁移

以下文章来源于GoOfficialBlog,作者GoOfficialBlogIntroductionagollo是Apollo的Golang客户端Apollo(阿波罗)是携程框架部门研...

Golang使用grpc详解(golang gcc)

gRPC是Google开源的一种高性能、跨语言的远程过程调用(RPC)框架,它使用ProtocolBuffers作为序列化工具,支持多种编程语言,如C++,Java,Python,Go等。gR...

Etcd服务注册与发现封装实现--golang

服务注册register.gopackageregisterimport("fmt""time"etcd3"github.com/cor...

Golang:将日志以Json格式输出到Kafka

在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/...

如何从 PHP 过渡到 Golang?(php转golang)

我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗旨,从零开始,开始学习。因为我司没有专门的Golang大牛,所以我也只能一步步自己去...