自1970年代初以来,在每个UNIX文件系统中,'ln'和'rm'命令的工作方式都完全相同。Mac OSX,BSD和Linux都继承了此原始设计。
UNIX文件本身没有名称,只有一个索引节点号或inum。但是,您只能通过特殊的“目录”文件中的条目来访问它,该文件将名称与所讨论的inum关联;您不能直接指定inum。
目录是本身一个文件,所以你也必须访问它通过(另一个)目录等,通过一系列被称为“路径名称”由正斜杠分隔目录名(/)的。路径从进程的“当前工作目录”开始,除非名称以“ /”开头,在这种情况下,路径以文件系统根目录开头。例如,如果路径名不包含“ /”字符,那么它应该是当前目录中的一个条目。
非目录文件可以具有任意数量的路径名,称为“硬链接”,并且它将继续存在,直到其所有路径名都被删除并且最后一个进程已关闭该文件为止。然后,实际上删除该文件,并将其空间标记为可重复使用。也就是说,您可以creat()或open()一个单链接的文件,然后取消链接(),使其不再出现在文件系统名称空间中,但是该文件将继续存在,直到您将其关闭。这对于任何其他程序都不会读取的临时暂存文件很有用。
尽管目录具有索引节点号,但是大多数文件系统都不允许对其进行硬链接。它们只能出现在另一个目录中。(Mac OSX HFS +文件系统是一个不寻常的例外;这使Time Machine备份可以工作。)您仍然可以创建指向目录(或任何其他文件)的“软链接”。软链接类似于目录条目,只不过它包含另一个路径名而不是inum。
每个UNIX文件都有一个所有者,组和访问权限。他们让您打开文件是必要的但还不够;您还必须至少对用于引用它的路径名中的每个目录具有执行权限。这就是为什么没有标准的方法可以通过其inode号打开UNIX文件。这将绕过重要的,广泛使用的安全机制。
但是,这并不能解释为什么root(特权)用户无法通过inode编号打开文件的标准方法,因为总会绕过权限检查。这对于某些系统管理功能(例如备份)非常有用。据我所知,确实存在这样的机制,但是它们都是特定于文件系统的。没有针对任何UNIX文件系统执行此操作的通用方法。