GNU Core Utilities/ln
ln
コマンドは、ファイルやディレクトリの ハードリンク または シンボリックリンク を作成するためのコマンドです。GNU coreutils に含まれており、Linux では GNU 版が、FreeBSD では BSD 版が提供されています。基本的な動作は共通していますが、細かなオプションの違いがあります。
基本的な使い方
編集ln [オプション] 元ファイル リンク先
ln [オプション] 元ファイル... ターゲットディレクトリ
ハードリンクとシンボリックリンクの違い
編集ハードリンクとシンボリックリンクの違い 種類 説明 ハードリンク 元ファイルと同じ inode を持つ別のファイルエントリ。元ファイルが削除されてもデータは保持される。 シンボリックリンク 元ファイルのパスを参照するだけの別のエントリ。元ファイルが削除されるとリンクが壊れる。
主なオプション(GNU coreutils版)
編集主なオプション オプション 説明 -s, --symbolic
シンボリックリンクを作成 -f, --force
既存のリンク先を強制的に上書き -i, --interactive
上書き時に確認 -n, --no-dereference
シンボリックリンクを上書きするとき、リンク自体を対象にする -v, --verbose
リンク作成の詳細を表示 -T, --no-target-directory
ターゲットがディレクトリであっても、通常のファイルとして扱う -P, --physical
シンボリックリンクをたどらずに操作 -L, --logical
シンボリックリンクをたどる
例
編集ハードリンクの作成
編集ln file.txt link.txt
file.txt
のハードリンク link.txt
を作成。
ls -i
を実行すると同じ inode を持つことが確認できる。
ls -i file.txt link.txt
シンボリックリンクの作成
編集ln -s file.txt symlink.txt
file.txt
へのシンボリックリンク symlink.txt
を作成。
ls -l
で symlink.txt -> file.txt
という出力が確認できる。
ディレクトリのシンボリックリンクを作成
編集ln -s /usr/local/bin mybin
mybin
が /usr/local/bin
へのシンボリックリンクになる。
強制的に上書きしてシンボリックリンクを作成
編集ln -sf file1.txt symlink.txt
symlink.txt
がすでに存在している場合でも強制的に file1.txt
へのリンクを作成。
詳細を表示しながらシンボリックリンクを作成
編集ln -sv file.txt symlink.txt
- 出力例
'symlink.txt' -> 'file.txt'
複数のファイルをまとめてリンク
編集ln file1.txt file2.txt file3.txt target_dir/
file1.txt
, file2.txt
, file3.txt
のハードリンクが target_dir/
内に作成される。
FreeBSD 版との違い
編集FreeBSD 版 ln
も基本的な動作は同じですが、一部オプションが異なります。
- GNU 版の
-T
(--no-target-directory
) が FreeBSD にはない- FreeBSD では
ln target file
を指定すれば同じ動作をする。
- FreeBSD では
-n
(--no-dereference
) の挙動が異なる- FreeBSD の
-n
はシンボリックリンクを削除して新しく作り直す挙動をしない。
- FreeBSD の
- GNU 版を FreeBSD で使う方法
coreutils
をインストールするとgln
という名前で GNU 版ln
が使える。
pkg install coreutils gln -s file.txt symlink.txt
ハードリンクとシンボリックリンクの使い分け
編集状況 推奨リンク ファイルのバックアップを取りたい ハードリンク 別の場所から同じファイルを参照したい ハードリンク ディレクトリのリンクを作成したい シンボリックリンク 別のファイルシステムをまたいでリンクしたい シンボリックリンク
ln
はファイルシステムの管理で非常に便利なコマンドなので、適切に使い分けるとよいでしょう。
詳しくは man ln
を確認してください。