Linuxオペレーティングシステムのハードリンクとソフトリンク


まず、Linuxシステムでは、カーネルが新しく作成したファイルごとにInode(インデックスノード)を割り当て、各ファイルには唯一のinode番号があることを明らかにします.ファイルプロパティはインデックスノードに保存され、ファイルにアクセスするとインデックスノードが内部にコピーされ、ファイルへの迅速なアクセスが実現されます.
リンクは、共有ファイルとアクセスしたユーザーの複数のディレクトリ・アイテムとの間で連絡を確立する方法です.Linuxには、ハードリンクとソフトリンクの2つのリンクがあり、ソフトリンクはシンボルリンクとも呼ばれます.
一、ハードリンク
ハードリンクは、ファイルインデックスノードを指すポインタであり、inodeを再割り当てしないことを示しています.:lnコマンドを使用してハードリンクを作成できます.構文:
ln [options] existingfile newfile
ln[options] existingfile-list directory

使用法:1つ目は「existingfile」にハードリンクを作成し、ファイル名は「newfile」です.2つ目は、「directory」ディレクトリで、「existingfile-list」に含まれるすべてのファイルに同じ名前のハードリンクを作成します.通常オプション[options]–fは、「newfile」が存在するかどうかにかかわらず、リンクを作成します.-n「newfile」が既に存在する場合、リンクは作成されません.
次に例を示します.
$ ls –il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8  5 16:38 file1
13059 -rwx - - - - - - 1 longcheng longcheng 57 8  5 16:40 file2
$ ln file2 file2hard
$ ls –il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8  5 16:38 file1
13059 -rwx - - - - - - 2 longcheng longcheng 57 8  5 16:40 file2
13059 -rwx - - - - - - 2 longcheng longcheng 57 8  5 16:40 file2hard

注意リンクを作成する前にfile 1に表示されるリンク数は1であり、リンクを作成した後(1)file 1とfile 1 hardのリンク数はいずれも2になる.(2)file 1とfile 1 hardはinode番号で同じ(3)file 1とfile 1 hardで表示されるファイルサイズも同じである.lnコマンドが実行された操作結果が表示されます.file 1とfile 1 hardは同じファイルの2つの名前で、同じインデックスノード番号とファイル属性を持ち、ファイルfile 1のハードリンクを確立します.これはfile 1のファイルインデックスノードの現在のディレクトリに新しいポインタを確立します.次の図では、rm file 2のようないずれかのポインタを削除できます.毎回1つのポインタしか削除されません.
リンク数を同時に1つ減らすと、カーネルはファイルの内容を指すすべてのポインタ、すなわちリンク数を0に減らすと、ファイルの内容をディスクから削除します.現在のディレクトリの論理構造:(申し訳ありませんが、図は表示されません).
異なるディレクトリでも、同じファイルシステムでファイルのハードリンクを確立できます.file 1、file 2をディレクトリ/home/longcheng/dir 1に設定し、以下のコマンドで、/home/longchengでfile 2のハードリンクを確立します.
ln file2 /home/longcheng/file2hard

次のプログラムは、dir 1ディレクトリ内のすべてのファイルをディレクトリdir 2にハードリンクする
$mkdir dir2
$ln /home/longcheng/dir1/* /home/longcheng/dir2

ln-f existingfile newfileを使用している場合、newfileがすでに存在する場合、元のnewfileがどんなファイルであっても、現在のユーザーのみが書き込み権限を持っている場合、newfileはexisitngfileのハードリンクファイルになります.
ハードリンクはスペースを節約し、Linuxシステムがファイルシステムを統合する従来の方法でもあるが、(1)異なるファイルシステムのファイル間でリンクを確立できない(2)スーパーユーザーだけがディレクトリにハードリンクを作成できるという欠点がある.多くのツリーでrootユーザーは作成できると言われていますが、筆者は学習中にrootユーザーでも作成できないことを発見しました.私のシステムはRedhatで、カーネル2.4、2.6は試したことがありますが、他のシステムではできるかどうか分かりません.