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 -lsymlink.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 も基本的な動作は同じですが、一部オプションが異なります。

  1. GNU 版の -T (--no-target-directory) が FreeBSD にはない
    • FreeBSD では ln target file を指定すれば同じ動作をする。
  2. -n (--no-dereference) の挙動が異なる
    • FreeBSD の -n はシンボリックリンクを削除して新しく作り直す挙動をしない。
  3. GNU 版を FreeBSD で使う方法
    • coreutils をインストールすると gln という名前で GNU 版 ln が使える。
    pkg install coreutils
    gln -s file.txt symlink.txt
    

ハードリンクとシンボリックリンクの使い分け

編集
状況 推奨リンク
ファイルのバックアップを取りたい ハードリンク
別の場所から同じファイルを参照したい ハードリンク
ディレクトリのリンクを作成したい シンボリックリンク
別のファイルシステムをまたいでリンクしたい シンボリックリンク

ln はファイルシステムの管理で非常に便利なコマンドなので、適切に使い分けるとよいでしょう。 詳しくは man ln を確認してください。