本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「ln」コマンドです。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、シンボリックリンクを作成するための「ln」コマンドです。
「ln」は、ファイルのリンクを作成するためのコマンドです。「ln ファイル名 リンク名」でハードリンクを作成できますが、「-s」オプションを使い、「ln -s ファイル名 リンク名」としてシンボリックリンクを作成する方が一般的です。
ln [オプション] ファイル名 リンク名
(ファイルのリンク(ハードリンクまたはシンボリックリンク)を作成する)
ln -s ファイル名 リンク名
(ファイルのシンボリックリンクを作成する)
ln -s ディレクトリ名 リンク名
(ディレクトリのシンボリックリンクを作成する)
ln -s ファイル1 ファイル2…… ディレクトリ
(指定したディレクトリの中にシンボリックリンクを作成する)
※[ ]は省略可能な引数を示しています
lnコマンドの主なオプションは次の通りです。
短いオプション | 長いオプション | 意味 |
---|---|---|
-s | --symbolic | ハードリンクの代わりにシンボリックリンクを作成する |
-d,-F | --directory | ディレクトリのハードリンクを作成する(スーパーユーザーのみ) |
-f | --force | リンクファイルと同じ名前のファイルがあっても強制的に上書きする |
-i | --interactive | 上書き前に確認する |
-n | --no-dereference | リンクの作成場所として指定したディレクトリがシンボリックリンクだった場合、参照先にリンクを作るのではなく、シンボリックリンクそのものを置き換える(-fと組み合わせて使用) |
-L | --logical | 対象がシンボリックリンクの場合リンクを巡る |
-P | --physical | シンボリックリンク自体へのハードリンクを作成する |
-r | --relative | 相対パスのシンボリックリンクを作成する |
-T | --no-target-directory | リンク先を常に通常ファイルとして扱う |
-t DIR | --target-directory=DIR | 指定したディレクトリにリンクを作成する(DIR部分はディレクトリ名) |
-b | --backup=方法 | 上書きされるファイルのバックアップを作成する(実行例2を参照) [方法]:「numbered」または「t」の場合は番号の添え字、「simple」または「never」の場合はファイル名の末尾に「~」または「-S」オプションか環境変数で指定した文字を付けるシンプルなバックアップ(-bと同じ)、「existing」または「nil」の場合は既にあるファイルに従う(ない場合はsimpleと同じ) |
-S 接尾辞 | --suffix=接尾辞 | バックアップファイルを作る際のファイル名末尾に付ける文字(無指定時は「~」1文字、または環境変数「SIMPLE_BACKUP_SUFFIX」に従う) |
-v | --verbose | 経過を表示する |
「ln -s」で、ファイルの“シンボリックリンク”を作成できます。シンボリックリンクは、いわばファイルの“別名”で、長いファイル名に別の名前を付けたり、パス名の指定が分かりにくい場所にあるファイルを扱いやすくしたりする(例:ディレクトリへのシンボリックリンク)場合に使います。
ln -s ファイル名 リンク名
(ファイルのシンボリックリンクを作成する)
以下の実行例では、ファイル「mylist02.txt」に対し、「latest」という名前のシンボリックリンクを作成しています。この場合、テキストエディタで「latest」というファイルを編集したり、閲覧したりすることは、「mylist02.txt」を編集したり、閲覧したりすることと同じ操作結果になります。
$ ls -l 合計 8 -rw-rw-r--. 1 study study 65 5月 15 00:00 mylist01.txt -rw-rw-r--. 1 study study 127 5月 17 00:00 mylist02.txt
$ ln -s mylist02.txt latest
$ ls -l 合計 8 lrwxrwxrwx. 1 study study 12 5月 18 19:39 latest -> mylist02.txt -rw-rw-r--. 1 study study 65 5月 15 00:00 mylist01.txt -rw-rw-r--. 1 study study 127 5月 17 00:00 mylist02.txt
lnコマンドで既存のファイルと同じ名前のリンクを作成すると、ファイルが上書きされてしまいます。「-b」オプションを付けると、ファイル名の末尾に「~」という文字が付いたバックアップファイルが作成されます。なお、末尾の文字は「-S」オプションまたは環境変数「SIMPLE_BACKUP_SUFFIX」で変更できます。
ln -sb ファイル名 リンク名
(ファイルのシンボリックリンクを作成する。リンク名と同名のファイルがあった場合「リンク名~」という名前で保存される)
以下の実行例では、「mylist03.txt」に「latest」という名前のシンボリックリンクを作成しています。
$ ls -l 合計 12 lrwxrwxrwx. 1 study study 12 5月 18 19:39 latest -> mylist02.txt -rw-rw-r--. 1 study study 65 5月 15 00:00 mylist01.txt -rw-rw-r--. 1 study study 127 5月 17 00:00 mylist02.txt -rw-rw-r--. 1 study study 251 5月 18 19:52 mylist03.txt
$ ln -sb mylist03.txt latest
$ ls -l 合計 12 lrwxrwxrwx. 1 study study 12 5月 18 19:52 latest -> mylist03.txt lrwxrwxrwx. 1 study study 12 5月 18 19:39 latest~ -> mylist02.txt -rw-rw-r--. 1 study study 65 5月 15 00:00 mylist01.txt -rw-rw-r--. 1 study study 127 5月 17 00:00 mylist02.txt -rw-rw-r--. 1 study study 251 5月 18 19:52 mylist03.txt
リンクの参照先は、相対パスでも絶対パスでも指定できます。相対パスで指定した場合は、シンボリックリンクファイルがある場所からの相対パスとなります。既存ファイルへのリンクを作成する場合は、ファイル名の「補完機能」を活用するとよいでしょう。
$ cd (ホームディレクトリへ移動) $ mkdir backupdir (backupdirというディレクトリを作る) $ cd backupdir (baskupdirへ移動) $ ln -s ../.bashrc bashrc0518
「ln -s」では、“存在しないファイル”へのリンクも作成できます。例えば、「外付けHDDをマウントしたときにだけ使えるシンボリックリンク」を作成することも可能です。
「ln -s」では、ディレクトリへのシンボリックリンクを作ることもできます。
ln -s ディレクトリ名 リンク名
(ディレクトリのシンボリックリンクを作成する)
以下の実行例では「/usr/share/man/ja/」へのシンボリックリンク「mandir」を作成しています。例えば、「ls mandir」や「cd mandir」で「/usr/share/man/ja/」の内容を確認したり、「/usr/share/man/ja/」へ移動したりできます。
$ ln -s /usr/share/man/ja/ mandir
$ ls /usr/share/man/ja/ man1 man2 man3 man4 man5 man6 man7 man8 $ ls mandir/ man1 man2 man3 man4 man5 man6 man7 man8
lnコマンドで「-s」オプションなしでリンクを作成すると、「ハードリンク」となります。シンボリックリンクがファイルの“別名”なら、ハードリンクはいわば“本名”です。どちらも本名なので両者は同等です。
ln ファイル名 リンク名
(ファイルのハードリンクを作成する)
以下の実行例では、「mylist03.txt」に対して「newlist」というハードリンクを作成しています。
$ ln mylist03.txt newlist
$ ls -l 合計 16 lrwxrwxrwx. 1 study study 12 5月 18 20:20 latest -> mylist03.txt lrwxrwxrwx. 1 study study 12 5月 18 19:39 latest~ -> mylist02.txt -rw-rw-r--. 1 study study 65 5月 15 00:00 mylist01.txt -rw-rw-r--. 1 study study 127 5月 17 00:00 mylist02.txt -rw-rw-r--. 2 study study 251 5月 18 19:52 mylist03.txt -rw-rw-r--. 2 study study 251 5月 18 19:52 newlist
上記実行例の「mylist03.txt」と「newlist」を「stat」コマンドで見比べてみましょう。
$ stat mylist03.txt File: `mylist03.txt' Size: 251 Blocks: 8 IO Block: 4096 通常ファイル Device: fd00h/64768d Inode: 8947952 Links: 2 Access: (0664/-rw-rw-r--) Uid: ( 1000/ study) Gid: ( 1000/ study) Context: unconfined_u:object_r:user_home_t:s0 Access: 2016-05-18 19:52:04.245033001 +0900 Modify: 2016-05-18 19:52:04.246033001 +0900 Change: 2016-05-18 20:22:55.401033001 +0900 Birth: -
$ stat newlist File: `newlist' Size: 251 Blocks: 8 IO Block: 4096 通常ファイル Device: fd00h/64768d Inode: 8947952 Links: 2 Access: (0664/-rw-rw-r--) Uid: ( 1000/ study) Gid: ( 1000/ study) Context: unconfined_u:object_r:user_home_t:s0 Access: 2016-05-18 19:52:04.245033001 +0900 Modify: 2016-05-18 19:52:04.246033001 +0900 Change: 2016-05-18 20:22:55.401033001 +0900 Birth: -
どちらにも「Links: 2」(4行目)とあるので、ハードリンクが2つ存在していることが分かります。また、どちらも「Inode: 8947952」(4行目)であることから、実体が同じであることも分かります。逆に言えば、ここを見ない限り、両者が同じものであるということは分かりません。当然ですが、タイムスタンプも全く同じになるので“どちらを先に作ったか”といったことも分かりません。
シンボリックリンクの場合は、ファイルの操作としては同じように扱うことができるけれど、「どのファイルへのリンクなのかが分かる」「シンボリックリンクであることが、ln -lですぐに分かる」というのがポイントです。
つまり、管理上“別の名前で参照している”ということを分かりやすくしておきたい場合はシンボリックリンク、区別をしたくないときはハードリンク、という使い分けができます(※)。
※ハードリンクには、「(1)同じパーティション内にないといけない」「(2)ディレクリへのハードリンクはスーパーユーザーにしか作れない(さらに「-d」オプションが必要)」という制限があります。
なお、「rm mylist03.txt」コマンドで「mylist03.txt」を削除した場合、「mylist03.txt」へのシンボリックリンク「latest」は“リンク先なし”となり、ハードリンク「newlist」はそのまま残ります(※)。
※「stat」コマンドで確認できる“リンク数(Links)”は「1」になります。「newlist」を削除するとリンク数が「0」になり、ファイルが削除されます。
PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.