lnのオプションがわからなかったので、調べてみた
結論
ln -snf
を使いましょう
やってみる
環境
OS X El Captain
バージョン 10.11.4
準備
yoan@wolverine [13時46分57秒] [/tmp/test]
-> % ls
file-2016-04-16_13:46:51
yoan@wolverine [13時46分58秒] [/tmp/test]
-> % cat file-2016-04-16_13:46:51
hogehoge
-s
オプション
通常の用途としては問題なく利用できる
yoan@wolverine [13時47分08秒] [/tmp/test]
-> % ln -s file-2016-04-16_13:46:51 symlink
yoan@wolverine [13時47分24秒] [/tmp/test]
-> % cat symlink
hogehoge
しかし、リンク元が変わった場合にリンクを再度作成することができない。
(ログファイルがローテートされたタイミング等)
yoan@wolverine [13時47分27秒] [/tmp/test]
-> % mv file-2016-04-16_* file-`date "+%Y-%m-%d_%H:%M:%S"`
yoan@wolverine [13時47分50秒] [/tmp/test]
-> % cat symlink
cat: symlink: No such file or directory
yoan@wolverine [13時48分01秒] [/tmp/test]
-> % ln -s file-2016-04-16_13:47:50 symlink
ln: symlink: File exists
-f
オプション
いわゆるforce
オプション
リンクがすでに存在している場合に、そのリンクを削除してから、新しく作る
yoan@wolverine [13時48分10秒] [/tmp/test]
-> % ln -sf file-2016-04-16_13:47:50 symlink
yoan@wolverine [13時48分14秒] [/tmp/test]
-> % cat symlink
hogehoge
yoan@wolverine [13時48分16秒] [/tmp/test]
-> %
-n
(-h
)オプション
-h If the target_file or target_dir is a symbolic link, do not follow it. This is most useful with the -f option, to replace a symlink which may point to a directory.
-n Same as -h, for compatibility with other ln implementations.
- リンク対象となるファイル/ディレクトリがシンボリックリンクの場合、なにも行わない
-
-f
オプションと共に利用すると、シンボリックリンクがディレクトリを指している時に有用である
意味がわからんのでやってみる。
ディレクトリ2つとfoo
ディレクトリへのシンボリックリンクを準備
yoan@wolverine [14時09分04秒] [/tmp/test]
-> % ls
bar foo
yoan@wolverine [14時11分05秒] [/tmp/test]
-> % cat bar/file
bar
yoan@wolverine [14時11分13秒] [/tmp/test]
-> % cat foo/file
foo
yoan@wolverine [14時09分16秒] [/tmp/test]
-> % ln -sf foo symlink
yoan@wolverine [14時09分04秒] [/tmp/test]
-> % ls
bar foo symlink
symlinkをbar
ディレクトリに変更する
-sf
だとディレクトリが変わっていない。
yoan@wolverine [14時09分16秒] [/tmp/test]
-> % ln -sf bar symlink
yoan@wolverine [14時09分22秒] [/tmp/test]
-> % cat symlink/file
foo
-n
オプションを利用すると、ディレクトリが変わっている。
yoan@wolverine [14時09分27秒] [/tmp/test]
-> % ln -snf bar symlink
yoan@wolverine [14時10分08秒] [/tmp/test]
-> % cat symlink/file
bar