QA@IT

lnコマンドのnオプションについて

4557 PV

lnコマンドのnオプションについてマニュアルには
「リンク作成の際にリンク元に既存ディレクトリを指定した場合でも、ディレクトリ中にリンクを作成せず、ディレクトリとリンクを置き換える」
とあるのですが、自分には意味がわからなかったので

実際に ~/tmp/foo というディレクトリを作成し

cd ~/tmp
ln -n foo ~/foo2

と打ってみたのです

ln: foo/: Is a directory

とエラーになってしまいました。

”リンク元に既存ディレクトリを指定”を間違えて理解してしまっているのだと思うのですが、
このオプションの意味がわかるサンプルなどはありませんか?

一応、lnコマンドの他の基本的な動作は理解しています。

回答

どの man をご覧になったのかわかりませんが、手元の Ubuntu 12.04 の man 英語版にはつぎのようにあります。

-n, --no-dereference
       treat destination that is a symlink to a directory as if it were a normal file

すなわち「リンクの作成先(第二引数)がディレクトリへの symlink の場合でも、それをディレクトリとしてではなく、通常ファイルとして扱う」となります。

実際の効果は、

mkdir foo
ln -s foo bar
ln -s foo bar  # bar/foo が作成される
ln -sn foo bar # ファイル bar は存在するのでエラーになる
ln: failed to create symbolic link `bar': File exists
編集 履歴 (0)
  • なるほど解説ありがとうございます。

    引用した解説は、manの英語の説明でわからなかったので検索して出てきた@ITの記事のものです。何故か日本語のmanと同一のものだと勘違いしてしまっていました。
    http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230812/
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。