`ln --no-dereference`は何をすべきですか?

`ln --no-dereference`は何をすべきですか?

私は過去20年間に完全に理解したことがなかったことを認めるいくつかの基本的なGNU / Linuxコマンドの理解を更新しています。

$ 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 ???

要約の最初のコマンド形式のみ、次の構文を使用して「LINK_NAME」を呼び出します。

   ln [OPTION]... [-T] TARGET LINK_NAME

したがって、これは手段-n--no-dereferenceオプションただ, の最初の命令型に関連付けられていますln(他の3つの命令型は該当しません)。

私の例では:

これターゲットはいdir3/xx
そしてLINK_NAMEdir2(「ディレクトリへのシンボリックリンク」)。

マニュアルによるとLINK_NAMEの場合つまり、これが私たちが作りたいリンクの名前であることを覚えておいてください)はいディレクトリへのシンボリックリンク'...

...それからこのシンボリックリンクを」一般文書'。

私は何を見逃していますか?

ベストアンサー1

そうでない場合、-n両方のコマンドはln内部的にリンクを生成しますdir2。リンクがLINK_NAME存在し、ディレクトリまたはディレクトリへのシンボリックリンクの場合は、ディレクトリ内にリンクを作成します(可能な場合)。

これが-nここで変更されたものです。ディレクトリlnとして処理されません(シンボリックリンクの場合)。すでに存在するLINK_NAMEので失敗します。追加すると、既存のシンボリックリンクが置き換えられます。LINK_NAMEln-f

ln -nsf dir3 dir2

dir2内部的にリンクを作成する代わりに置き換えますdir2

おすすめ記事