我已经ln写符号链接多年了,但是我仍然错误地获得了参数的顺序。
这通常让我写:
ln -s a b
然后查看输出以提醒自己。
我总是想像a -> b当我读到它时实际上却相反b -> a。这感觉是违反直觉的,所以我发现我总是在猜测自己。
有人有任何提示可帮助我记住正确的顺序吗?
ln source target。与cp source target,相同mv source target; ...
                我已经ln写符号链接多年了,但是我仍然错误地获得了参数的顺序。
这通常让我写:
ln -s a b
然后查看输出以提醒自己。
我总是想像a -> b当我读到它时实际上却相反b -> a。这感觉是违反直觉的,所以我发现我总是在猜测自己。
有人有任何提示可帮助我记住正确的顺序吗?
ln source target。与cp source target,相同mv source target; ...
                Answers:
我使用以下命令:ln具有一个单参数形式(在联机帮助页中列出的第二个形式),其中仅需要目标(因为ln在不知道目标的情况下根本无法工作),并ln在当前目录中创建链接。两参数形式是单参数形式的加法,因此目标始终是第一个参数。
ln。
                    -t),则感觉就像是一个证明。“ ln在当前目录中创建链接。两参数形式是单参数形式的补充,因此目标始终是第一个参数”。因为它是有道理的,考虑到第二种形式时,这会出现这种情况,我认为这将有助于我记住。
                    我的看法是“ ln就像cp。'资源'需要首先出现。”
mv。mv,cp和ln所有采用现有的文件作为第一个参数,和所述预期目的地的文件或目录名作为第二个参数。
                    memcpy,strcpy等工作周围的其他方法。
                    memcpy(dest,src,n);地图非常好dest = src;。换句话说,将ndest (的第一个字节)设置为等于nsrc (的第一个字节)。
                    大多数Unices将ln命令记录为
ln source target(我在这里省略了选项等)
例子:
ln [-fs] [-L|-P] source_file target_file
ln [-fhLnPs] source [target]
ln [-L | -P | -s [-F]] [-f | -iw] [-hnv] source_file [target_file]
苹果系统
ln [-Ffhinsv] source_file [target_file]
/usr/bin/ln [-fns] source_file [target]
ln [ -f | -n ] [ -s ] SourceFile [ TargetFile ]
GNU ln手册将调用source 目标和target 链接名。
ln [option]… [-T] target linkname
忽略GNU选择的话,该ln实用程序遵循相同的排序语义例如mv并且cp在该目标是什么是从创建的源。
因此,
ln -s a b将创建b指向的符号链接a。
还要注意,在创建符号链接时,源只是一个代表符号链接应指向的字符串。通常不会进行任何检查来验证它是否指向任何有用的东西:
$ ln -s "hello world" README.txt
$ ls -l
total 0
lrwxr-xr-x  1 kk  wheel  11 Sep 15 11:39 README.txt -> hello worldln -s a b可行,而这与GNU的措辞无关,因为我认为我从未看过手册页中的措词。:D(ln -si a b如果不确定,运行起来会更容易,如果b已经存在,则会抱怨。)
                    在这种情况下,任何人都可以帮助:我已经习惯了它的思想为“LN 什么 地方 ”,这有助于我记得第一个参数(“什么”)是现有的文件,第二个(“里”)是地方放置(链接)到它。与大多数其他答案中的推理相反,这不过是一个愚蠢的短语,我在键入命令时会在脑海中背诵自己,这有助于记忆。这可能对每个人都没有用,但我怀疑这会对某些人有所帮助。
其他标准文件操作命令使用相同的约定也很有帮助,因此我可以对cp和进行相同的操作mv。
NAME    ln -- make a link
SYNOPSIS    ln name1[ name2 ]
DESCRIPTION ln creates a link to an existing file name1. 
            If name2 is given, the link has that name; 
从1971年Unix第一版手册。
还有第二种简单的语法形式。
编辑:我把文件或文件名,而不是目标---看到留言等等看也很长除了在底部,解决了   冰山,硬和软的ln,它不只是冰山一角。
所以GNU ln有这个:
ln [opt] FILENAME
In the 2nd form, create a link to FILENAME in the current directory.
您不需要链接名称的地方。当ln -s /usr/lib/modules你得到一个
modules -> /usr/lib/modules
与FILENAME相同的名称(“目标”或“源”),就在您的位置。没有选择,没有混乱。
现在,如果您的要求更高,并希望以其他名称和/或其他位置创建链接,则可以将该愿望添加为名称或路径。真正的目标位于第一位,额外的幻想新链接名称位于第二位。
或者您说:“我知道ls -l链接的这种箭头符号。外壳中没有箭头可以显示链接的方向。因此,我必须将其转过来。”
您在一个方向上创建它,因此可以在另一个方向上使用它。
(答案部分的结尾)
在另一个层面上,“链接”一词本身带有深层的双重含义。符号链接是后来出现的,因此在早期,链接只是一个链接。没有软硬的-s选择。现在,我什至使用源目标符号:
mv    A B   --- move the whole file to B (dir or new name)
cp    A B   --- copy whole file (mv and cp are "the same" here)    
ln    A B   --- copy whole file MINUS data blocks (=copy only inode and name), and increase "link count" for track keeping
在此阶段,存在链接,但是没有硬性和软性,并且ls -l不显示箭头,因为(硬)链接中没有方向。Unix演化阶段的“链接”意味着文件系统中的文件名“ B”(目录条目“ B”)指向与文件名“ A”指向的相同的inode。
文件A和B被“链接”在一起,因为它们共享相同的块。因此,现在每个rm内核都必须检查:我是在磁盘上删除/释放该文件的块,还是有另一个文件链接到相同的块?为此,使用链接计数器。
假设您要删除/ tmp grom上的大文件并执行ln /tmp/bigfile。现在,您的工作目录中有一个大文件。清除/ tmp并移走“原始”文件后,您会愉快地继续使用相同的数据块。您没有死链接或悬垂的链接,文件正常。指向每个文件都不会阻塞文件,而只会指向文件系统。直到现在,“清理” / tmp的效果不如以前。它看起来是空的,但是,分区上的块没有被释放。      
即使硬链接本身不会像cp那样花费空间,但间接地却会。
添加ln -s到上面的序列:
ln -s A B   --- copy only the file's name to "B"   
现在,软链接“ B”仅包含一个带有路径名的字符串。这是“软”信息。从技术上讲,“ A”和“ B”是无关的。但从新的意义上讲,B仍然是“链接”,您可以将存储的路径名用作“ A” 的快捷方式。现在它是“到A的链接”(句号),而不是“与文件A的inode链接”
两种链接不仅会使人困惑,还会使内核/ fs困惑。1971年的手册页中写道:“错误:链接被备份两次,并用独立的inode还原为单独的文件。”
硬链接到目录(稀有/不允许)很容易导致阻塞。
目录的软链接(非常常见)会导致永恒的循环-必须由实用程序/内核识别。
bash中的实际示例
从常规文件“ F”开始...
ln F Fhard
...使Fhard的大小与F相同,但它们现在都显示为深红色,而没有ls -l --color。由于stat显示了与“ Inode:xyz”相关的“链接:2”。硬链接F将F本身变成硬链接。两者都是/保持文件类型为“常规文件”。但是两者都具有链接数大于1的inode。
   ln -s F Fsoft
...制作一个文件类型为“符号链接”的微小“不规则”文件“ Fsoft”-比空目录更节省空间。A ls -l表示“ F”没有什么特别的。对于Fsoft,显示的大小为1字节,因为字符串为'F',并Fsoft -> F显示为名称。无需着色软链接即可识别一个。因为简而言之,ls -F您会获得一个卷曲的链条@
:Fsoft@
有了ls -l它看起来像这样:
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 F
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 Fhard
lrwxrwxrwx 1 root root       1 Sep 16 16:31 Fsoft -> F
Fhard具有F的大小和类型。
Fsoft具有F的名称和F的名称的长度作为大小,以及不同的文件类型。
简短ls -sF:
5932 F    5932 Fhard     0 Fsoft@
添加--block-size=1也不会产生相同的大小。Fsoft的大小为“一字节零块”。F和Fhard平行偏离:
6074368 F  6074368 Fhard    0 Fsoft@
要查看Fsoft是否悬空,ls可以使用颜色。
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
记住链接的名称是可选的,这确实有帮助。如果未指定,则使用链接目标的基本名称。
ln -s /path/to/file1 file1
与完全删除链接名称相同:
ln -s /path/to/file1
如果最后提到链接目标,这将毫无意义。
只要想想Unix-> AT&T->右边的目的地:
mov %eax, %ebx  ;; AT&T style assembler syntax: %ebx register gets value of %ecx
mv foo bar    ;; foo renamed to bar
cp foo bar    ;; contents of foo go to bar
foo | bar     ;; data moves left to right in pipeline
ln abc def    ;; link to abc installed as def
ln abc def,abc和def是相同的对象;他们是无法区分的。而且,abc除了增加链接数之外,该操作对均无影响。目的地是def。指向对象的指针新安装在该def位置。
                    ln -s abc def表示内容abc已写入location def。  abc甚至不必解决任何问题;它可能是一个悬挂的链接。
                    mv dest src,ln [ -s ] dest src,cp dest src,...
                    我是这样记住的:忘记目标。换句话说,如果我在dir1中,并且想要在此处创建到/ some / other / dir /中存在的file1的符号链接,我将这样做:
ln -s /some/other/dir/file1
您将在目录dir1中获得一个名为file1的符号链接,该链接指向/ some / other / dir / file1。在ln的手册页中:
ln [OPTION] ... TARGET(第二种形式)...在第二种形式中,创建指向当前目录中TARGET的链接。
请记住,仅当您希望符号链接与目标具有相同的名称时才有效(这很可能是这种情况)。
a,并将其命名b”中键入时,大声说出来很有帮助