Linux命令-ln
ln命令在两个文件之间创建链接(link)。默认他创建hard链接;在使用-s时创建symbolic(或者说soft)链接。语法:
ln命令在两个文件之间创建链接(link)。默认他创建hard链接;在使用-s时创建symbolic(或者说soft)链接。语法:

ln [OPTION]… [-T] TARGET LINKNAME

ln [OPTION]… TARGET

ln [OPTION]… TARGET… DIRECTORY

ln [OPTION]… -t DIRECTORY TARGET…

如果指定两个文件名,ln创建从第二个文件至第一个文件的链接(第一个文件是源文件)。

如果只指定TARGET,ln在当前目录以目标文件名创建目标文件的链接。

如果指定“–target-directory”(-t)选项,或者最后一个参数是一个目录并且没有指定–no-target-directory(-T)选项,ln将使用TARGET文件名在指定目录中创建每一个TARGET文件的链接。第三、四种语法实际上是为多个TARGET创建链接的方法。

通常ln并不移除任何已存在的文件。不过使用–force(-f)是将无条件的移除现存文件;使用–interactive(-i)将在移除他们时询问;–backup(-b)选项对现存文件重命名(Cygwin中是在文件名后添加“~”)。

ln命令创建的链接有以下两种:

·Hard link:hard链接是指现存文件的其他名字;link的文件和原始文件其实是完全相同的。他们实际上共享相同的inode(inode包含所有和文件相关的信息,从某种意义上说inode就相当于一个文件。关于inode请参考《鸟哥的Linux私房菜》)。你不能创建到一个目录的hard链接,并且hard链接不能跨越文件系统边界(也就是硬盘分区,嘿嘿,可以这么理解)。

·Symbolic link:缩写为symlinks。实际上它是一种特殊的文件类型(不是所有的内核都支持symlinks,比如System V release 3或者更早的版本(不懂这个版本是什么))。通过symlinks文件进行的大部分操作(opening, writing, reading)内核都将自动废弃链接并直接将操作应用至链接的目标文件上。但是有些操作,比如removiing将只作用于链接文件本身,对目标文件没有影响。

下面是可选的选项:

-b,–backup[=METHOD]:备份选项,为每个将要覆盖或者移除的文件建立备份。

-d,-F,–directory:允许拥有适当权限的用户尝试在创建到目录的hard链接。不过这可能由于系统限制(即使是超级用户)而失败(注:很多系统是不支持创建目录的硬链接的)。

-f,–force:移除已存在的目标文件。

-i,–interactive:提示是否移除已存在的目标文件。

-n,–no-dereference:当最后一个操作数是链接到目录的symlink时将其作为普通的文件对待。不过多介绍了,参考inof ln。值得一提的是当指定–no-target-directory(-T)时这个选项无效。

-s,–symoblic:创建symbolic链接。这个选项在不支持symbolic链接的系统上仅仅提示一个错误信息。

-S SUFFIX,–suffix=SUFFIX:在使用-b选项是指定为每个备份的文件添加的后缀。Cygwin默认貌似是“~”。

-t DIRECTORY,–target-directory=DIRECTORY:指定目标目录。

-T,–no-target-directory:当最后一个参数是目录或者链接到目录的symlink时将其作为普通文件。

-v,–verbose:用于在成功创建link后打印每个文件的名字。

–disable-exe-magic:仅用于Cygwin。参考Cygwin的info ln。

Example:
Bad Example:

 

# Create link ../a pointing to a in that directory.

# Not really useful because it points to itself.

ln -s a ..

Better Example:

# Change to the target before creating symlinks to avoid being confused.

cd ..

ln -s adir/a .

 
上图中的learn_ln是我使用bad example中的语法创建的,这个symlink链接到了自身。第二个当然正确的链接了。

Bad Example:

# Hard coded file names don’t move well.

ln -s ${pwd}/a /some/dir/

Better Example:

# Relative file names survive directory moves and also

# work across networked file systems.

ln -s afile anotherfile

ln -s ../adir/afile yetanotherfile

注:这个命令在建立LFS系统的过程用于使工具链总能链接至/tools,这样做的好处在于使compiler,assembler和linker在建立LFS系统的时候总可以正确的工作,即便是在chroot之后,命令如下:

 
1 ln -sv $LFS/tools /

ps.以上内容均翻译自Cygwin的info。其他版本可能会有差异,不过应该不会很大。见谅。主要是方便我自己看滴~~当然能方便大家就更好了。以后每天至少一个linux命令,每日任务没有完成隔日补全。不知道能不能坚持下去。哈哈。
 

Ln

 

链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。

符号链接是指向文件的一个间接指针;它的目录项中包含了它所链接的文件名。符号链接可能会跨越文件系统,可能指向目录。

 

 这里有两点要注意:第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;第二,ln的链接又软链接和硬链接两种,软链接就是ln –s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。

 

-f : 链结时先将与 dist 同档名的档案删除

促使 ln 命令替换掉任何已经存在的目的路径。如果目的路径已经存在,而没有指定 -f 标志,ln 命令不会创建新的链接,而是向标准错误写一条诊断消息并继续链接剩下的 SourceFiles

-n 指定,如果链接是一个现有的文件,那么不要覆盖文件的内容。 -f 标志重设了这个标志。这是缺省的行为。

 

  -d : 允许系统管理者硬链结自己的目录

  -i : 在删除与 dist 同档名的档案时先进行询问

  -n : 在进行软连结时,将 dist 视为一般的档案

  -s : 进行软链结(symbolic link)

  -v : 在连结之前显示其档名

  -b : 将在链结时会被覆写或删除的档案进行备份

  -S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾

  -V METHOD : 指定备份的方式

  --help : 显示辅助说明