ln
最初のパラメータでソフトリンクに従わないように強制できますか?たとえば、以下ではhard
ハードリンクになりたいと思います。ソフトリンクsoft
:
$ mkdir dir
$ ln -s dir soft
$ ln soft hard
ln: soft: Is a directory
わかりました。ただし、トラッキング時にソフトリンクln -h
のみをブロックします。ln
第二議論。
答え1
デフォルトでは、システムでは、ソースがln
シンボリックリンクの場合、ソースは完全に検証されます。-P
これを防ぐ標準オプションがあります。
$ mkdir dir
$ ln -s dir soft
$ ls -l
total 4
drwxr-xr-x 2 myself wheel 512 Sep 21 22:39 dir
lrwxr-xr-x 1 myself wheel 3 Sep 21 22:39 soft -> dir
$ ln -P soft hard
$ ls -il
total 4
129605 drwxr-xr-x 2 myself wheel 512 Sep 21 22:39 dir
129606 lrwxr-xr-x 2 myself wheel 3 Sep 21 22:39 hard -> dir
129606 lrwxr-xr-x 2 myself wheel 3 Sep 21 22:39 soft -> dir
ln
このユーティリティのPOSIX仕様説明する:
source_fileがシンボリックリンクの場合:
この
-P
オプションが適用される場合は、引数として、ターゲットパスを引数に、引数として、0を引数としてlinkat()
使用する関数と同じことを行う必要があります。source_file
path1
path2
AT_FDCWD
fd1
fd2
flag
linkat()
これが何であるかわからない限り、この記事のほとんどは横説説です。OpenBSD マニュアルそれを翻訳する
-P
ハードリンクを作成し、ソースがシンボリックリンクの場合は、シンボリックリンク自体にリンクします。この
-P
オプションは前の-L
オプションよりも優先されます。
...そしてGNUマニュアル説明する
-P
--physical
-s
適用されず、ソースファイルがシンボリックリンクの場合、シンボリックリンク自体へのハードリンクが作成されます。カーネルがサポートしていないプラットフォームでは、このオプションは同じ内容のシンボリックリンクを生成します。シンボリックリンクの内容は編集できないため、両方のリンクを介して実行されるファイル名の解決は、ハードリンクが作成されたものと同じです。
ln
興味深いことに、Ubuntu LinuxのGNUマニュアルには次のようなものがあります。
-s
無視して-L
を使用してください-P
。それ以外の場合は、TARGET
指定された最後のオプションがaがシンボリックリンクの場合の動作を制御します。デフォルトは-P
。
そしてOpenBSDとmacOS(そしておそらく異なるシステム)では、同じGNUln
マニュアルに次のように書かれています。
-s
無視して-L
を使用してください-P
。それ以外の場合は、TARGET
指定された最後のオプションがaがシンボリックリンクの場合の動作を制御します。デフォルトは-L
。
(常に起こっているように見えるインターネット上の任意のページではなく、使用しているシステムのマニュアルを常に読む必要があるもう1つの理由です。)