ln コマンド

ファイル間のリンクを作成します。

概要

ln コマンドはファイル間のリンクを作成します。ハードリンク(デフォルト)またはシンボリックリンク(-s オプション使用時)を作成できます。ハードリンクはディスク上のファイルデータを直接指し示しますが、シンボリックリンクは名前で別のファイルを指し示す特殊なファイルです。

オプション

-s, --symbolic

ハードリンクではなくシンボリックリンクを作成します。

$ ln -s 対象ファイル リンク名
$ ls -l リンク名
lrwxrwxrwx 1 user user 10 May 5 10:00 リンク名 -> 対象ファイル

-f, --force

既存の宛先ファイルを削除します。

$ ln -sf 対象ファイル 既存のリンク

-n, --no-dereference

ディレクトリへのシンボリックリンクである宛先を通常のファイルであるかのように扱います。

$ ln -sfn 新しい対象 既存のリンク

-v, --verbose

リンクされた各ファイルの名前を表示します。

$ ln -sv 対象ファイル リンク名
'リンク名' -> '対象ファイル'

-r, --relative

リンクの場所を基準にした相対的なシンボリックリンクを作成します。

$ ln -sr ../対象ファイル リンク名

使用例

ハードリンクの作成

$ echo "オリジナルの内容" > original.txt
$ ln original.txt hardlink.txt
$ ls -l original.txt hardlink.txt
-rw-r--r-- 2 user user 16 May 5 10:00 hardlink.txt
-rw-r--r-- 2 user user 16 May 5 10:00 original.txt

ファイルへのシンボリックリンクの作成

$ ln -s /path/to/file.txt symlink.txt
$ ls -l symlink.txt
lrwxrwxrwx 1 user user 14 May 5 10:00 symlink.txt -> /path/to/file.txt

ディレクトリへのシンボリックリンクの作成

$ ln -s /path/to/directory dir_link
$ ls -l dir_link
lrwxrwxrwx 1 user user 17 May 5 10:00 dir_link -> /path/to/directory

相対的なシンボリックリンクの作成

$ ln -sr ../../shared/config.txt config_link
$ ls -l config_link
lrwxrwxrwx 1 user user 22 May 5 10:00 config_link -> ../../shared/config.txt

ヒント

ハードリンクとシンボリックリンクの違いを理解する

ハードリンクの制限

ハードリンクはディレクトリや異なるファイルシステム上のファイルにリンクできません。これらの場合はシンボリックリンクを使用してください。

ファイルがリンクかどうかを確認する

ls -l を使用して、ファイルがリンクかどうかを確認します。シンボリックリンクは権限の先頭に「l」が表示され、ターゲットを指す矢印が表示されます。

壊れたシンボリックリンクを修正する

シンボリックリンクのターゲットを移動すると、リンクは壊れます。ln -sf を使用して、新しい場所を指すように更新してください。

よくある質問

Q1. ハードリンクとシンボリックリンクの違いは何ですか?

A. ハードリンクは元のファイルと同じinode(ディスク上のデータ)を共有しますが、シンボリックリンクは名前で別のファイルを指す別個のファイルです。ハードリンクはファイルシステムをまたいだり、ディレクトリにリンクしたりすることはできません。

Q2. ディレクトリへのシンボリックリンクを作成するにはどうすればよいですか?

A. ln -s /path/to/directory リンク名 を使用して、ディレクトリへのシンボリックリンクを作成します。

Q3. 既存のシンボリックリンクを更新するにはどうすればよいですか?

A. ln -sf 新しいターゲット 既存のリンク を使用して、既存のリンクを置き換える新しいリンクの作成を強制します。

Q4. シンボリックリンクが壊れるのはなぜですか?

A. シンボリックリンクは、ターゲットファイルが移動または削除されると壊れます。それらは実際のファイルデータではなく、パスを指しています。

参考文献

https://www.gnu.org/software/coreutils/manual/html_node/ln-invocation.html

改訂履歴