はじめに
Linuxシステムでは、一つのファイルに複数の名前を付けたり、あるファイルやディレクトリを別の場所から参照したりする仕組みとしてリンクが使われます。このリンクを作成するのが、ln(link)コマンドです。
リンクには大きく分けてハードリンクとシンボリックリンク(ソフトリンク)の2種類があり、それぞれ特性が異なります。lnコマンドを理解することは、Linuxのファイル構造とデータ管理の仕組みを深く理解する上で不可欠です。
LPICレベル1の試験では、特にハードリンクとシンボリックリンクの違いや、それらがファイルシステムに与える影響について問われます。この記事では、lnコマンドの基本的な使い方から、コマンド名の由来、必須オプション、そしてLPIC対策として押さえるべきポイントまでを詳しく解説していきます。
lnコマンドの基本
まずは、lnコマンドの基本的な使い方と、主要なオプションを確認しましょう。
lnコマンドの書式
ln [オプション] ターゲット(元ファイル) リンク名(別名)
- ポイント: オプションを指定しない場合、
lnはデフォルトでハードリンクを作成します。
主要オプション一覧
| オプション | 意味 | 補足 |
-s | シンボリックリンクを作成する | symbolic |
-i | リンク作成時に同名ファイルがあると確認のプロンプトを表示する | interactive |
-f | 同名のリンク/ファイルが存在する場合、強制的に削除して作成する | force |
-v | リンク作成の処理内容を詳細に表示する | verbose |
コマンド名の由来:なぜ「ln」なのか?
lnコマンドの「ln」は、英語の “link”(リンク、関連付ける) の短縮形です。
このコマンドの目的は、ファイルシステム内にある既存のファイルに対し、新しい参照(リンク)を作成することにあります。その機能がそのまま簡潔な2文字の略語として定着しました。
ハードリンクとシンボリックリンクの違い
lnコマンドを理解する上で、この2種類のリンクの特性を区別することが最も重要です。
| 特性 | ハードリンク (デフォルト) | シンボリックリンク (ln -s) |
| 実体 | inode(実データ)を共有する、ファイルへの新しいエントリ。 | ターゲットファイルへのパスが書かれた小さなファイル。 |
| inode番号 | 元のファイルと同じ。 | 元のファイルとは異なる(リンク自体がファイルのため)。 |
| ファイルシステム | 同じファイルシステム内でのみ作成可能。 | 異なるファイルシステムや、ディレクトリにも作成可能。 |
| 元ファイル削除 | データは削除されない(最後のリンクが削除されるまでデータは保持)。 | 元ファイルが削除されると、リンクは切れて参照不能になる(デッドリンク)。 |
ls -l表示 | ファイルタイプは-(通常ファイル)。リンク数が1増える。 | ファイルタイプはl(リンク)。リンク先が->で表示される。 |
必須オプションの詳細と実践例
lnコマンドのオプションを、主要オプション一覧の順番に沿って詳しく見ていきます。
1. -s (symbolic) オプション:シンボリックリンクの作成
意味: リンクの最も一般的な形式で、シンボリックリンク(ソフトリンク)を作成します。これは、Windowsでいう「ショートカット」に最も近い概念です。
実践例:
シンボリックリンクを作成:
ln -s /etc/hosts ~/ln_sample

ls -lで確認:
ls -l ~/ln_sample
# 出力例: lrwxrwxrwx 1 user group 10 Oct 28 10:00 myhosts_shortcut -> /etc/hosts

オプションの由来: sはsymbolic(象徴的な)の頭文字です。
2. オプションなし:ハードリンクの作成
意味: lnにオプションを指定しない場合、ハードリンクが作成されます。これは、同じデータにアクセスするための完全に同等のファイル名を追加する行為です。
実践例:
ハードリンクを作成:
touch original_file.txt
ln original_file.txt same_data_file.txt

ls -lで確認:
ls -l original_file.txt same_data_file.txt

3. -i (interactive) オプション:上書き前の確認
意味: リンクを作成しようとした場所に同名のファイルやリンクが既に存在する場合、上書きしてもよいか確認のプロンプトを表示します。
実践例:
ln -i fileA linkB

リンク数(2列目。-rw-r–r–の右の数値)が1から2に変わっていることがわかります。ハードリンクした場合、fileAとlinkBは同じinode番号(ファイルの実体)を持っています。そのため、その実体に対して2つのファイルが結びついている意味で2の値になっています。
例えばこの状態でfileAを更新した場合、その更新内容はlinkBにも反映されます。なぜなら同じinodo番号(ファイルの実体)を持つファイル同士だからです。
この辺りはどこかでまた深く触れることにします。
オプションの由来: iはinteractive(対話式)の頭文字です。
4. -f (force) オプション:強制上書き
意味: リンク先に同名のファイルやリンクが既に存在する場合でも、確認なしで強制的に削除し、新しいリンクを作成します。
実践例:
ln -sf fileA linkB

オプションの由来: fはforce(強制する)の頭文字です。
LPIC対策としてのポイント
lnコマンドに関するLPICの出題傾向として、以下の点を確実に押さえておきましょう。
- シンボリックリンクの絶対パス/相対パス: シンボリックリンクを作成する際、ターゲット(元ファイル)を相対パスで指定すると、リンクの移動によってリンク切れが発生しやすくなるため、絶対パスで指定するのが一般的です。
- ハードリンクの制限: ハードリンクは、ディレクトリに対して作成できず、かつ異なるファイルシステムをまたいで作成できないこと。
- リンク数の意味:
ls -lで表示されるリンク数(2列目)は、そのファイルの実体(inode)を参照しているハードリンクの総数を示すこと。
まとめ
今回は、ファイルにリンクを作成するlnコマンドについて、その基本的な使い方からコマンド名の由来、そして特に重要なハードリンクとシンボリックリンクの違いまでを詳しく解説しました。この2種類のリンクの特性を理解することは、Linuxのファイル構造を理解する鍵となります。
LPICレベル1の試験対策としては、シンボリックリンクを作成する-sオプションと、両リンクのinode番号や削除時の挙動の違いをしっかりとマスターしておきましょう。



コメント