$ ln
link
シンボリックリンクやハードリンクを作成する。
Linux のリンクは、Windows では ショートカット、MacOS では エイリアス と呼ばれる。
-s
オプションをつけない場合、ハードリンクを作成することになる。
$ ln リンク元 ハードリンク
$ ln -s リンク元 ハードリンク
ハードリンク
データ本体への参照を名前が異なる複数のファイルが共有すること(Linux のファイルシステムでは、ファイルは データ本体 と inode で構成される)。
ハードリンクを作成したファイルは元のファイルと同じ inode を持つため、ファイルシステム上で完全に等価関係にある。
ハードリンクのリンク元、リンク先ファイルは完全に等価。
リンク元、リンク先は区別できない。
ハードリンクは同じファイルシステム内でしか作成できない。ファイルシステム、マウントポイント、パーティションをまたいだファイル間では作成できない。
ディレクトリに対しても作成できない。
ハードリンクは $ ln
コマンドを使用して作成する。
$ ln リンク元ファイル名 リンクファイル名 # リンクファイルは存在しないことが前提
ファイルの削除
ハードリンクが作成されたファイルの データ本体 は、リンク数が 0
になるまでは完全には削除されない。
$ rm
コマンドを実行した時、内部ではそのファイル名とinodeの紐付けが解除され、これによりリンク数が 1
減少している。さらにリンク数が 0
になった場合にのみ、ファイルのデータ本体とinodeが初めて削除(解放)されている。
ファイルのデータ本体はリンク数が 0
になるまで削除されない
シンボリックリンク
リンク元ファイルへのパスを保持する特殊なファイル。
ハードリンク と異なり、異なるネットワーク、ファイルシステム、パーティション間でも作成できる。
シンボリックリンクは元ファイルのデータ本体ではなく、パスを参照するだけなので、元ファイルが削除されるとリンクは壊れてしまう。
$ ln -s リンク元ファイル名 リンクファイル名 # リンクファイルは存在しないことが前提
ディレクトリに対しても作成することができる。
$ ls -s リンク元ディレクトリ名 リンクディレクトリ名
シンボリックリンクは ls -l
コマンド実行時に ->
で表示される。
$ ls -l
> lrwxrwxrwx 1 kei kei 5 Jan 30 11:33 file1 -> file1
パーミッション は rwxrwxrwx
と表示されるが、実際には リンク元のパーミッションが適用される。
シンボリックリンクのパーミッションは、リンク元のパーミッションが適用される。
リンクのコピー
ハードリンク、シンボリックリンクをファイルコピーした場合、デフォルトではリンク元ファイル(ファイルの実体)がコピーされる。
$ cp リンク コピー先ファイル
ファイルの実体ではなくリンク自体をコピーしたい場合、-d
オプションを使用する。
$ cp -d リンク コピー先ファイル
比較
特徴 | ハードリンク | シンボリックリンク |
---|---|---|
参照方式 | 同じデータ本体を参照 | パスを参照 |
inode 番号 | 同じ | 異なる |
リンク元ファイル削除時の挙動 | リンクが残る限りデータにアクセス可能 | リンク切れになる |
制約 | 同じファイルシステム内でのみ作成可能 | 異なるファイルシステムでも作成可能 |
ディレクトリのリンク | 不可 | 可能 |