ln -s和别名有什么区别?

cha*_*ons 29 macos bash shell command-line

我刚刚找到一个解决方法,解决了在安装了MacPorts版本的python时,Sublime Text 3 的命令问题subl.说明将软链接放到ln-s/ bin中的命令行应用程序中.这没用,所以我刚打开了我的〜/ .profile并添加了一个别名: alias subl="/Applications/path/to/subl".但这对我来说是一个新问题.这两者有什么区别:别名和软链接?

Kei*_*son 27

它们是完全不同的东西,但在这种情况下它们可以用于类似的目的.

这个:

alias subl="/Applications/path/to/subl"
Run Code Online (Sandbox Code Playgroud)

创建别名,因此键入sublshell命令等同于键入/Applications/path/to/subl.

在bash中,函数通常比别名更受欢迎,因为它们更灵活,更强大.

subl() { /Applications/path/to/subl ; }
Run Code Online (Sandbox Code Playgroud)

这两件事都是针对shell的; 它们使shell扩展sub1为指定的命令.

ln -s另一方面,在文件系统中创建一个符号链接.符号链接是对另一个文件的引用,对于大多数用途,它可以被视为文件本身.它适用于访问它的任何东西,而不仅仅是shell,它对系统上运行的所有进程立即可见,并且一直持续到它被删除.(符号链接实现为包含目标文件名称的小型特殊文件.)


Dav*_* W. 25

Alias是Macintosh Finder的概念.在Finder中创建别名时,Finder会跟踪它.移动原始文件或文件夹时,别名会跟随它.

符号链接是Unix文件系统概念.当您创建符号链接时,它仅指向原始位置.移动原始,符号链接将无处可寻.

当您使用Mac应用程序并使用"打开/保存"对话框时,它将处理别名,因为它使用Finder API,而Finder处理别名跟踪.

Unix工具不与Finder API集成,因此无法跟踪别名.但是,它们使用处理符号链接的底层Unix API.您可以ls在符号链接上使用,因为它使用Unix API.与Python相同.

回到System 7/8/9天,文件系统无法处理符号链接,就像Windows API使用快捷方式而不是符号链接一样.你需要别名.

但是,Mac OS X是基于Unix的操作系统,因此理解符号链接的概念.Finder现在将符号链接视为别名(除了原始移动时符号链接不会更新).别名的唯一原因是与旧的Finder文件系统兼容.

  • 对不起,我看到了Mac OS,我以为你问的是Finder Alias和Unix OS Symbolic链接之间的区别.在Unix中,别名是shell概念而不是OS概念.并非所有Unix shell都支持别名(如原始Bourne shell).在支持别名的shell中,只有在像命令一样使用别名时才会检测别名,而是执行命令字符串,但不替换shell.在`set -xv` on上你不会看到别名被替换. (5认同)
  • 这个答案回答的问题比被问到的问题更有意义:) (3认同)
  • Finder 别名与符号链接类似,但 OP 创建的别名是 shell 别名,而不是 Finder 别名。这只是输入文件全名的文本替换类型快捷方式。它不会显示在 Finder 窗口中,但仅在终端窗口中键入时才有效。 (2认同)

小智 6

这真是一个超级问题

在这场辩论中有3个级别的别名

  1. 文件系统: ln -s"target-file-or-directory""alias" - 这对于使用文件系统的所有程序都是可视的(bash,Finder,应用程序)
  2. Shell别名:(bash/sh/zsh等) - (部分问题) - 仅由shell命令行使用
  3. MacOS Finder: "make alias" - 由Finder知道,在大多数应用程序中都有文件对话框

一些不同的用例:

  • 希望shell脚本(bash)以符号方式导航文件系统 - 然后使用ln -s ...当你安装java时,它将自己使用这种技术.在示例中尝试说出哪个java并查看java所在的位置.然后使用ls -a/usr/bin/java来查看实际位置.
  • 想在Finder中做快速链接,这样你就可以导航到恰好位于不同目录中的常见事物 - >使用Finder make alias
  • 想要使用bash的捷径启动Sublime编辑器,然后使用Shell别名.我有别名ll = ls -l - 每行列出一个目录项目.没有它我几乎不能使用bash :-)注意这些替换只发生在bash中的命令行替换上,因此在shell脚本中不太有用.

我个人经常使用ln -s ..

我也使用Finder制作别名.它很容易,链接跟随项目,因为他们更多.但它不能用bash工作- 因此,当我需要开始编写脚本时,我有时会将这些链接更改为**ln -s ...*.