このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
UNIX 系のファイルシステムには、
ハードリンクとシンボリックリンクがある。
これらは、ファイルに別名をつける機能である。
同じデータを参照する別名のファイルを作成するので、
ファイルのコピーと異なり、余計な容量を占有しない。
ハードリンクは、ファイルに複数の名前を持たせる機能である。
あるファイルに対してハードリンクを作成することで、
1 つのファイル内容に対して、複数のファイル名が対応する。
1 方のファイル名でファイルに変更を加えた場合は、
別のファイル名でもその変更内容にアクセスができる。
これは、ファイルの内容が共有されていることを意味する。
ハードリンクの場合、対応するファイル名に主従関係はなく、
ファイルのデータは、ハードリンクされている、
全てのファイルを削除しない限りは失われることはない。
そのため、ハードリンクは、
単純な削除防止機構として使うことができる。
あるファイルにハードリンクを張っておけば、
元のファイルを削除しても、別のファイル名で、
元のデータにアクセスできることになるからだ。
ハードリンクは、ln コマンドで作成することができる。
$ echo CONTENT > ./file1.txt
$ ln ./file1.txt ./file2.txt
$ cat ./file2.txt
CONTENT
file1.txt file2.txt は同じ内容「CONTENT」を指す、
対等なファイルとなる。
そのため、最初のファイルを削除してもデータは失われず、
file2.txt を使ってアクセスすることができる。
$ rm ./file1.txt
$ cat ./file2.txt
CONTENT
シンボリックリンクは、別のファイル名を指し示す、
特殊なファイルを作成する機能である。
シンボリックリンクの指すのはファイルデータではなく、
「ファイル名」である点が、ハードリンクと異なる。
これは、Windows のショートカットファイルに近い。
(近いだけで等しくはない)
シンボリックで作成したファイルは、特殊なファイルとなり、
内部にファイル名を格納している。
シンボリックファイルを読み書きする際は、
シンボリックファイル自体ではなく、
シンボリックファイルが示すファイルに対して
アクセスしたことになる。
シンボリックリンクは、ln コマンドに、
-s オプションをつける事で作成することができる。
$ echo CONTENT > ./file1.txt
$ ln -s ./file1.txt ./file2.txt
$ cat ./file2.txt
CONTENT
シンボリックファイルは、名前を持っているだけなので、
リンクが指し示すファイルが存在することは保証しない。
つまり、元のファイルを削除してしまうと、
シンボリックファイルからもアクセスができなくなる。
$ rm ./file1.txt
$ cat ./file2.txt
cat: ./file2.txt: No such file or directory
シンボリックリンクのメリットは、
ディレクトリにも張ることができるということである。
この場合、シンボリックリンクのパスを使って、
リンクの指す実際のディレクトリにアクセスすることができる。
これは、バージョン管理には最適な方法だ。
例えば、mysql の複数の版を以下にインストールするとする。
/usr/local/mysql-5.0.24/
/usr/local/mysql-4.1.21/
/usr/local/mysql-4.1.13/
どのディレクトリにも ./bin/mysql コマンドがあるとする。
/usr/local/mysql-5.0.24/bin/mysql
/usr/local/mysql-4.1.21/bin/mysql
/usr/local/mysql-4.1.13/bin/mysql
これに対して、以下のようなシンボリックリンクを作る。
/usr/local/mysql => /usr/local/mysql-5.0.24
/usr/local/mysql-4 => /usr/local/mysql-4.1.21
左がシンボリックファイル名、右が指し示すファイル名だ。
これは、主にバージョン非依存のパスを示すのに用いる。
こうしておけば、/usr/local/mysql/bin/mysql とすることで、
常に最新の mysql コマンドが利用できる。
/usr/local/mysql-4/bin/mysql とすれば、
mysql のバージョン 4 系の最新版が利用できる。
また、設定ファイル等でも、基本的に
/usr/local/mysql/ を使ってパスを指定しておけば、
シンボリックリンクを張り替えるだけで、
簡単に動作しるバージョンを切り替えることができるのだ。
このように、リンクは UNIX で重要な役割を果たしている。
それでは Windows ではどうなのだろうか。