システムプログラム(第-1回): 木構造の制約と問題点、シンボリック・リンク

                                       筑波大学 システム情報系 情報工学域
                                       新城 靖
                                       <yas@cs.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~syspro/2022/2022-05-11/symlink.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~syspro/2022/
http://www.coins.tsukuba.ac.jp/~yas/

■木構造の制約と問題点

大量の情報を保存するには、木構造を使うしかない。 しかし、木構造だけではうまくいかない。

◆こうもりの分類問題

図13 こうもりの分類(1)
図13 こうもりの分類(1)

図14 こうもりの分類(2)
図14 こうもりの分類(2)

木構造は、ファイルを整理するのに非常に強力な構造である。しかし、それだ けでは、ファイルを整理するには不都合が起きる。それを解消するために、次 のような名前で呼ばれる仕組みが用意されている。

2つの節に、「別名」をつけて、2つの道からたどり着けるようにする。 (木構造では、1つの節にたどり着く道は、ただ1つしかない。)

注意:bash, csh の alias とファイル名の alias (Macintosh) は、まったくの別物。

図15 こうもりの分類(別名つき)
図15 こうもりの分類(別名つき)

シンボリック・リンク(symbolic link)は、Unix で、ファイルに別名をつける ための機能。「リンク」とは、木構造の枝の意味で、つまり、ファイル名を意 味する。シンボル(symbol)は、(数ではなくて)文字列であることを意味する。 シンボリック・リンク(symbolic link)は、文字列の形で、ファイルの別名を保 持している。

例:java コマンド

$ ls -l /usr/bin/java [←]
lrwxr-xr-x  1 root  wheel  74 10  7  2015 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
$ []
シンボリック・リンクは、ls -l で見ると、右端に l (小文字の L) と表示さ れる。 ファイル /usr/bin/java を参照すると、 /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands にある java が使われる。
$ ls -l /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java [←]
-rwxr-xr-x  1 root  wheel  54624  2  7  2014 /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
$ []

シンボリック・リンクを作成するには、ln -s コマンドを使う。

$ ln -s oldname newname [←]
この結果、newname でファイルを参照すると、 oldname というファイルが使われる。(このファイルは、 newnameoldname の2つの名前を持つ。)

cp コマンドは、コピー元にシンボリック・リンクを指定しても、リンクの先の ファイルをコピーする。
$ cat file1 [←]
cat: file1: No such file or directory
$ echo file1 > file1 [←]
$ cat file1 [←]
file1
$ ln -s file1 slink1 [←]
$ cat slink1 [←]
file1
$ ls -l file1 slink1 [←]
-rw-r--r--  1 yas  prof  6  6 17 14:20 file1
lrwxr-xr-x  1 yas  prof  5  6 17 14:20 slink1 -> file1
$ cp slink1 file2 [←]
$ ls -l file2 [←]
-rw-r--r--  1 yas  prof  6  6 17  2015 file2
$ cat file2 [←]
file1
$ []
cp -r や cp -R でファイルをコピーする時に、シンボリック・リンクが含まれ ていると、問題が生じることがある。システム(MacOS, Linux, BSD)によって cp コマンドの挙動が異なる。シンボリック・リンクをシンボリック・リンクと してコピーするには、tar コマンド等を使い、cp を使わない方が良い。
Last updated: 2022/03/25 22:11:08
Yasushi Shinjo / <yas@cs.tsukuba.ac.jp>