web-dev-qa-db-ja.com

ln -sが単一の引数を受け入れるのはなぜですか

> cd /tmp
> ln -s foo
> ls -alhF /tmp
lrwxrwxrwx 1 user user    3 Jul 29 14:00 foo -> foo

これはlnのバグですか、それともファイルをそれ自体にシンボリックリンクする使用例がありますか?

これはcoreutils 8.21-1ubuntu5.1

27
Squidly

バグではありません。ユースケースは、ファイルを同じベース名にリンクするが別のディレクトリにある場合に使用します。

cd /tmp
ln -s /etc/passwd
ls -l passwd
lrwxrwxrwx 1 xxx xxx 11 Jul 29 09:10 passwd -> /etc/passwd

同じディレクトリにあるファイル名でこれを行うと、それ自体にリンクが作成され、あまり効果がありません。

これは、シンボリックリンクとハードリンクのどちらを使用しているかに関係なく機能します。

45
Celada

もちろん、見つける最も簡単な方法は、実際に試して見ることです。 2番目の引数が指定されていない場合、lnは現在のディレクトリにオリジナルと同じ名前のリンクを作成します。

$ ln -s /etc
$ ls -l
lrwxrwxrwx 1 terdon terdon         4 Jul 29 16:09 etc -> /etc

これはman lnでも説明されています:

2番目のフォームで、現在のディレクトリにTARGETへのリンクを作成します。

「第2の形式」とは、次のことを指します。

ln [オプション] ... TARGET(2番目の形式)

9
terdon