Macos 什么';ln-s和alias的区别是什么?
我刚刚找到了一个解决方法,在安装MacPorts版本的python时,我使用subl命令Macos 什么';ln-s和alias的区别是什么?,macos,bash,shell,command-line,Macos,Bash,Shell,Command Line,我刚刚找到了一个解决方法,在安装MacPorts版本的python时,我使用subl命令subl来实现Sublime Text 3。说明中说,在/bin中添加一个软链接,ln-s,指向命令行应用程序。这不起作用,所以我只打开了我的~/.profile并添加了一个别名: alias subl=“/Applications/path/to/subl”。 但这给我提出了一个新问题。这两者之间有什么区别:别名和软链接?ln-s创建了一个,它几乎是文件系统中的一个文件 是一个特定于外壳的东西 因此,基本上
subl
来实现Sublime Text 3。说明中说,在/bin中添加一个软链接,ln-s
,指向命令行应用程序。这不起作用,所以我只打开了我的~/.profile并添加了一个别名:
alias subl=“/Applications/path/to/subl”
。
但这给我提出了一个新问题。这两者之间有什么区别:别名和软链接?
ln-s
创建了一个,它几乎是文件系统中的一个文件
是一个特定于外壳的东西
因此,基本上,符号链接是一个更好的解决方案,因为它适用于所有情况。比如,如果你想让你的文件管理器用那个特定的程序打开文本文件,你可以把它指向你的符号链接,它就会工作。它们是完全不同的东西,不过在这种情况下,它们可以用于类似的目的 这: 创建别名,以便作为shell命令键入
subl
相当于键入/Applications/path/to/subl
在bash中,函数通常比别名更受欢迎,因为它们更灵活、更强大
subl() { /Applications/path/to/subl ; }
这两件事都是特定于外壳的;它们使shell将sub1
扩展到指定的命令
另一方面,
ln-s
在文件系统中创建符号链接。符号链接是对另一个文件的引用,在大多数情况下,可以将其视为文件本身。它适用于访问它的任何东西,而不仅仅是shell,它对系统上运行的所有进程都是立即可见的,并且它会一直存在,直到它被删除为止。(符号链接被实现为一个包含目标文件名的小型特殊文件。)别名仅存在于shell的上下文中(Bash、Sh、Zsh等),但在其他应用程序中找不到,而ln-s
创建了一个虚拟文件(一个一个现有的真实文件,它可以像一个新命令一样呈现自己,并且应该被大多数调用其他二进制文件的应用程序识别。别名与函数和变量相似,只是它们更像命令模板。创建一个函数实际上更值得称赞。我认为上面的alias命令中可能缺少一些东西——它应该具有alias mumble=“substitution”
的格式,并且会导致以mumble开头的任何命令都被substitution替换。因此,如果您在配置文件中输入的是alias subl=“/Applications/path//to/subl”
,则每当您在命令开头键入subl时,它都会被完整路径替换
ln
的工作原理是在文件系统中创建从一个对象到另一个对象的引用
您在上面提供的链接表明,
ln
与MacPorts中提供的Python版本不兼容。编辑:另一条评论让我意识到我所说的别名是mac特定的“finder”别名,而这里讨论的别名是bash“shell”别名。我的错误
符号链接或软链接指向一个路径:文件系统上的一个位置。如果路径上的文件或文件夹被移动或重命名,则软链接现在将不会指向任何有用的内容
别名可以包含对路径或文件ID的引用,也可以包含对两者的引用,具体取决于实现。至少在Mac OS X上,默认值为两者,但路径优先于文件ID。也就是说,只要别名引用的路径上存在某种东西,别名就会指向该路径,就像符号链接一样。但是,如果别名引用的路径中不存在任何内容,它将指向原始文件ID
例如:
假设您创建了一个文件,然后通过指定文件路径为其创建了一个别名。别名现在包含文件的文件ID以及文件路径。默认情况下,别名将沿着文件的路径将您带到该文件
如果您现在将文件移动到其他位置,则别名将通过引用文件的文件ID跟随该文件。但是,如果您将新文件分配给与旧文件相同的文件路径,则别名现在将指向新文件,因为它更喜欢路径而不是文件ID
参考资料:别名是一个Macintosh Finder概念。当您在Finder中创建别名时,Finder会跟踪它。移动原始文件或文件夹时,别名将跟随它 符号链接是Unix文件系统的概念。创建符号链接时,它仅指向原始位置。移动原始链接,符号链接将不会指向任何地方 当您使用Mac应用程序并使用“打开/保存”对话框时,它将处理别名,因为它使用Finder API,并且Finder处理别名跟踪 Unix工具不与Finder API集成,因此无法跟踪别名。但是,它们与处理符号链接的底层unixapi一起工作。您可以在符号链接上使用
ls
,因为它使用Unix API。Python也是如此
回到7/8/9天的系统,文件系统无法处理符号链接,就像Windows API使用快捷方式而不是符号链接一样。你需要化名
但是,Mac OS X是基于Unix的操作系统,因此理解符号链接的概念。Finder现在对待符号链接就像对待别名一样(除了原始链接移动时符号链接不会更新)。别名的唯一原因是与旧的Finder文件系统兼容。这确实是一个超级问题 在这场辩论中,有三个级别的别名
subl() { /Applications/path/to/subl ; }