Linuxコマンド ln(ファイルへリンクを作成する)

ファイルへのリンク(ハードリンク」と「シンボリックリンク」)を作成するlnコマンドについて解説。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

参考サイト:Man page of INSTALL

使用方法

lnコマンドを使用してハードリンクやシンボリックリンクを作成します。リンクには実リンク(ハードリンク)とシンボリック(ソフトリンク)があります。

ハードリンクは、「ファイルの中身に対するリンク」であり、リンク元とリンクファイルの関係は対応であり、一方のファイルが削除された場合でも内容は保持されます。また、一般ユーザーアカウントでは、ディレクトリに対するハードリンクを作成することができません。

シンボリックは、リンク元とリンクファイルのお関係は「主従」の関係にあり、リンク元のファイルを削除するとリンクファイルは読み出すことができなくなります。Windowsのショートカットと同様です。

書式

$ ln [オプション・・・] リンク元ファイル名 リンクファイル名
$ ln [オプション・・・] リンク元ディレクトリ名 リンクディレクトリ名

オプション

-f,
–force
既にリンクファイルがあった場合は削除する
-i,
–interactive
すでにリンクファイルがあった場合は問合せして削除する
-L,
–logical
対象ファイルがシンボリックリンクの場合はリンクをたどる
-sシンボリックリンクを作成する
-r,
–relative
相対パスを使ったシンボリックリンクを作成する
–backup[=フラグ]移動先に同じファイル名がある場合のバックアップ方法を指定する
-S 文字列,
–suffix=文字列
移動先に同じファイル名がある場合、
指定した文字列をバックアップファイル名に付加する。「.」などは勝手に付加されない
オプション一覧
フラグ説明
none/offバックアップを作成しない
numbered/t常に数字の拡張子を持つバックアップを作成する
existing/nil数字つきのバックアップファイルがある場合は加算、ない場合は「~」だけ付加する
simple/never「~」をつけるだけのバックアップを行う
指定可能なバックアップ方法

.(ドット)や..(ドットドット)
lsコマンドに-aオプションを付けることにより、.(カレントディレクトリ)や..(親ディレクトリ)が表示されるが、これはカレントディレクトリや親ディレクトリを示すハードリンクである。

サンプル:シンボリックリンクを作成する

$ ln -s sample1/sample.txt ln_sample

実行結果

[centos@ work]$ tree
.
└── sample1
    └── sample.txt

1 directory, 1 file
[centos@ work]$ ln -s sample1/sample.txt ln_sample
[centos@ work]$ tree
.
├── ln_sample -> sample1/sample.txt
└── sample1
    └── sample.txt

1 directory, 2 files
[centos@ work]$ cat sample1
cat: sample1: Is a directory
[centos@ work]$ cat sample
cat: sample: No such file or directory

[centos@ work]$ cat ln_sample
sample test data
[centos@ work]$ rm sample1/sample.txt       ←参照元を削除
[centos@ work]$ cat ln_sample 
cat: ln_sample: No such file or directory   ←参照元の実体がないためエラーとなる。
[centos@ work]$ 

サンプル:ハードリンクを作成する

$ ln sample1/sample.txt sample

実行結果

[centos@ work]$ ln sample1/sample.txt sample
[centos@ work]$ tree
.
├── sample
└── sample1
    └── sample.txt

1 directory, 2 files
[centos@ work]$ rm sample1/sample.txt  ←リンク元を削除する
[centos@ work]$ tree
.
├── sample
└── sample1

1 directory, 1 file
[centos@ work]$ cat sample            ←リンク元が削除されても、ハードリンクはcatで表示できる。
sample test data
[centos@ work]$