前言
最近开始使用MacBook工作,在安装git的时候得到了可以把"symlink"放在桌面的提示,就想看一下什么是symlink,发现中文的文档基本都是机翻和转帖,翻译的也是驴唇不对马嘴的,我就找到这篇文章并翻译了一下,希望能给想了解symlink的同学省点自己找的时间。
macOS上的符号链接Symlink是什么,以及该怎么使用
符号链接(Symbolic links),也被称为Symlinks,是一类特殊的文件,指向系统上的其他文件或者目录,可以认为是macOS上的一种比较先进的别名(aliase)。
符号链接和别名很相像,除了符号链接可以在每个应用内生效——包括Terminal。当用普通的别名无法使预期的功能生效时,符号链接可能会很有用。在macOS上,用户无法在访达(Finder)中创建符号链接,但是可以在Terminal中使用 ln 命令来创建。
macOS上的符号链接的工作方式和在Linux上很像,因为这两个都是类unix操作系统(Unix-like),在windows上符号链接工作的方式有些不一样。
什么是符号链接(Symbolic Links)?
在macOS中,我们可以通过Finder创建普通的别名(aliase),别名会指向文件或目录,但是起到的作用只是一个简单的快捷方式。
符号链接是一种能作用在系统中的每个应用上的更高级的别名类型,甚至包括Terminal中的命令行工具。一个指向app的符号链接和原始app文件或目录是等价的——即使它实际上只是一个链接。
举个例子,假设你有一个程序,这个程序需要将它的文件存储于/Library/Program目录,但是你想把这些文件存储在系统中的其他位置——比如说,想放在/Volumes/Program目录下。这时,你就可以将Program整个目录移动到/Volumes/Program这个位置,然后在/Library/Program创建一个符号链接,指向/Volumes/Program。程序会尝试访问/Library/Program,然后操作系统就会将访问重定向到/Volumes/Program。
这个操作(操作系统的重定向)对于macOS和用户使用的应用程序来说是完全透明的。 如果在Finder或任何其他程序中访问/Library/Program目录,会显示实际上在/Volumes/Program目录中的内容。
除了又被称为“软链接(soft links)”的符号链接,用户也可以创建“硬链接(hard links)”。符号链接,或者说软链接,指向的是文件系统中的路径。 举例来说,假设有一个符号链接(软链接)从/Users/example指向/opt/example,如果将/opt/example中的文件移走,/Users/example上的软链接就会损坏。但是,如果用户创建的是硬链接,这个硬链接实际上指向的是文件系统底层的inode节点。在使用硬链接的情况下,无论怎么移动/opt/example,链接还是会指向实际的文件。相对软链接,硬链接作用于操作系统的更底层。
一般来说,如果不确定该使用那种链接,就直接使用软链接即可(符号链接)。 硬链接受到的限制更多,比如,没有办法创建一个指向不同磁盘或者磁盘分区的硬链接,但是软链接可以做到这点。
用 ln 命令创建符号链接
我们需要在终端工具(Terminal,zsh等)中创建符号链接。
运行如下命令,可以指定符号链接是指向目录,还是指向文件
ln -s /path/to/original /path/to/link
-s 参数用来告诉 ln 命令,我们要创建一个符号链接。如果要创建一个硬连接,只要省略 -s 这个参数就可以了。除了真的有特殊的原因,尽量不要使用硬连接,因为大多数情况下软链接(符号链接)都是更好的选择。
举个例子,假设我想创建一个从我桌面上的文件夹指向Downloads下载文件夹的符号链接,可以使用如下命令
ln -s /Users/name/Downloads /Users/name/Desktop
执行这个命令之后,应该能看到Downloads文件夹出现在了桌面上,这实际上是一个软链接,但是mac系统会让它看上去像一个真实的目录。双击进入目录中看一眼,看上去有着Downloads目录下的所有文件——因为它确实如此,从Finder进入Downloads目录,和从桌面通过符号链接进入Downloads是相同的,他们只是指向相同的底层系统路径的不同视图(view)而已。
-
注意,必须使用英文路径名,中文路径名如"/Users/name/下载","/Users/name/桌面"是不会起作用的!
-
如果文件路径包含空格或者其他特殊字符,就需要用双引号括起来
ln -s "/Users/name/My Files" "/Users/name/My Link"
-
一点一点敲键盘很麻烦,为了简化路径的输入,可以直接打开Finder,将目标文件或目录往Terminal里拖,Terminal会自动填充路径,同时也会自动加双引号。
-
如果需要在一个当前用户没有权限访问的路径下创建符号链接,就需要在 ln 命令前加上 sudo 前缀
sudo ln -s /path/to/original /path/to/link
- 另外,在比较新的macOS系统中,因为系统完整性保护(System Integrity Protection Feature),用户默认不被允许向系统目录中写入,也就无法在系统目录中创建链接,除非改变底层固件选项。用户可以关闭系统完整性保护,但是建议尽量不要这么做。
如何删除符号链接
就像删除其他文件一样,右键-垃圾桶,或者直接command+delete。
同时,也可以使用 rm 命令,和使用这个命令删除其他文件一样
rm /path/to/link
如何用图形化工具创建符号链接
在Finder中可以创建别名(aliase),但是别名的工作方式和符号链接不一样。别名就和windows中的快捷方式一样,并不是真正的、透明的符号链接。
要在Finder中创建符号链接,需要使用第三方工具或脚本。推荐使用开源app SymbolicLinker ,使用此app,可以直接通过 右键-服务(Services)-创建符号链接(Make Symbolic Link)来创建一个软链接。
文章引用来源:How to Create and Use Symbolic Links (aka Symlinks) on a Mac