ln
| 対応: | Bash 1.0(1989) |
|---|
『ln』はファイルへのリンクを作成するコマンドです。同じファイルに複数の名前をつける「ハードリンク」と、別のパスへの参照を作る「シンボリックリンク(ソフトリンク)」の2種類があります。
構文
ln [オプション] リンク元 リンク名
オプション一覧
| オプション | 概要 |
|---|---|
| ln リンク元 リンク名 | ハードリンクを作成します。同じファイルシステム内のファイルのみ対象です。 |
| ln -s リンク元 リンク名 | シンボリックリンクを作成します。ディレクトリや別ファイルシステムも対象にできます。 |
| ln -f リンク元 リンク名 | リンク名がすでに存在する場合は強制的に上書きします。 |
| ln -n リンク元 リンク名 | リンク名がシンボリックリンクである場合、その先をたどらずに置き換えます。 |
| ln -v リンク元 リンク名 | 作成したリンクの情報を表示します(verbose)。 |
サンプルコード
以下のディレクトリ構造を例に説明します。
ファイルへのシンボリックリンクを作成します。
ln -s original.txt link.txt ls -l link.txt lrwxrwxrwx 1 user staff 12 Mar 5 10:00 link.txt -> original.txt
ディレクトリへのシンボリックリンクを作成します。
ln -s /var/www/html /home/user/www ls -l /home/user/www lrwxrwxrwx 1 user staff 13 Mar 5 10:00 /home/user/www -> /var/www/html
パスの通った場所にシンボリックリンクを作り、コマンドをどこからでも実行できるようにします。
ln -s /usr/local/bin/node /usr/bin/node
ハードリンクを作成します。同じ inode 番号になるため、どちらのファイル名からでも同じデータにアクセスできます。
ln original.txt hardlink.txt ls -i original.txt hardlink.txt 123456 hardlink.txt 123456 original.txt
既存のリンクを強制的に上書きします。
ln -sf config/settings.conf link.txt ls -l link.txt lrwxrwxrwx 1 user staff 21 Mar 5 10:05 link.txt -> config/settings.conf
ハードリンクを作成するとリンク数が増えます。リンクを削除しても、参照数が1以上ある限りデータは消えません。
ls -la original.txt -rw-r--r-- 1 user staff 42 Mar 5 10:00 original.txt ln original.txt hardlink.txt ls -la original.txt hardlink.txt -rw-r--r-- 2 user staff 42 Mar 5 10:00 hardlink.txt -rw-r--r-- 2 user staff 42 Mar 5 10:00 original.txt rm original.txt cat hardlink.txt (元のファイルの内容が表示される)
シンボリックリンクのリンク先が存在するかどうかを『-L』で確認します。壊れたリンク(dangling symlink)の検出に使います。
ln -s missing_file.txt broken.txt ls -l broken.txt lrwxrwxrwx 1 user staff 16 Mar 5 10:10 broken.txt -> missing_file.txt [ -L broken.txt ] && echo "リンクあり" || echo "リンクなし" リンクあり [ -e broken.txt ] && echo "参照先あり" || echo "参照先なし(壊れたリンク)" 参照先なし(壊れたリンク)
相対パスでシンボリックリンクを作成します。リンク先を相対パスで指定するとリンクを含むディレクトリを丸ごと移動しても参照関係が保たれます。
cd config ln -s ../original.txt local_link.txt ls -l local_link.txt lrwxrwxrwx 1 user staff 15 Mar 5 10:15 local_link.txt -> ../original.txt
『-v』で作成したリンクの情報を表示します。スクリプトでの確認やデバッグに便利です。
ln -sv original.txt verbose_link.txt 'verbose_link.txt' -> 'original.txt'
概要
シンボリックリンクはリンク元ファイルが削除されると「壊れたリンク(dangling symlink)」になります。一方ハードリンクはリンク元を削除してもデータが残ります(参照カウントが0になるまで実体は消えません)。
シンボリックリンクはディレクトリにも作成できますが、ハードリンクはディレクトリには作れません(通常のユーザーの場合)。ファイルのパーミッション変更は『chmod / chown / chgrp』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。