Ln
ln --no-dereference
應該做什麼?
我正在刷新我對一些基本 GNU/Linux 命令的理解,我承認在過去的 20 多年裡我從未真正完全理解過這些命令。
**
$ man ln
**部分說:-n, --no-dereference treat LINK_NAME as a normal file if it is a symbolic link to a directory
為了更好地理解這一點,我將其分解如下:
$ mkdir dir1 $ ln -vs dir1 dir2 'dir2' -> 'dir1' $ mkdir dir3; touch dir3/xx $ tree -F . ├── dir1/ ├── dir2 -> dir1/ └── dir3/ └── xx # Now to test -n, first as a hard link $ ln -vn dir3/xx dir2 ln: failed to create hard link 'dir2': File exists # and second as a symbolic link $ ln -vsn dir3/xx dir2 ln: failed to create symbolic link 'dir2': File exists # ??? why do these both fail ???
只有 SYNOPSIS 中的第一個命令形式呼叫了“LINK_NAME”,語法如下:
ln [OPTION]... [-T] TARGET LINK_NAME
所以這表示
-n
and--no-dereference
選項僅與 , 的第一個命令形式有關ln
(而不是其他三種命令形式)。在我的例子中:
TARGET是,
dir3/xx
LINK_NAME是( ‘a symbolic link to a directory’) 。
dir2
手冊說如果 LINK_NAME(即記住這是我們應該創建的連結的名稱)是“指向目錄的符號連結”……
…那麼我們應該將此符號連結視為“普通文件”。
我錯過了什麼?
如果沒有
-n
,您的兩個ln
命令都會在dir2
: 內創建連結,如果LINK_NAME
存在並且是目錄或目錄的符號連結,則在目錄內創建連結(如果可能)。這就是
-n
這裡的變化:ln
不會被LINK_NAME
視為目錄(如果它是符號連結)。由於LINK_NAME
已經存在,ln
失敗。添加-f
將導致現有的符號連結被替換:ln -nsf dir3 dir2
將替換
dir2
而不是在內部創建連結dir2
。