共有ファイルを解決するために使用することができるファイルと呼ばれるLinuxシステム内のファイルへのリンクがあります。リンクは、一方が他方には、ソフトリンクまたはシンボリックリンク(シンボリックリンク)と呼ばれる、ハードリンク(ハードリンク)は、二つのタイプに分けることができます。
まず、基本的な概念
1、ハードリンク
始める前に、最初のiノード(iノード)と呼ばれる概念を説明します。
Linuxのファイルシステムでは、関係なく、どのようなタイプの、ディスクパーティションにファイルを保存し、システムがそれに番号を割り当てますが、この数は、ファイルのlinux内のファイルやディレクトリがあるiノード番号(iノードインデックス)と呼ばれ、ユニークな識別システム。この数値を使用すると、ファイルの詳細に見つけることができます。
同時に、Linuxシステムでもそれは同じiノード(iノード)へのハードリンクしながら、複数のファイル名を許可することができます提供し、それはです。この設計では、限り、複数のリンクが存在し、ファイルのiノードとして、iノード自体や他のリンクを(それが削除されていないファイルの実体である)には影響しませんリンクを削除する利点があり、場合にのみ、最後にリンクが削除され、この時間は、ディスク上に格納される新しいデータがあるされた後、その後、削除されたファイルのデータ・ブロックとディレクトリがリリースされるリンク、収納スペースは、新しいデータで上書きされます。したがって、このメカニズムは効果的に誤った削除操作を防ぐことができます。
ハードリンクはファイルシステムのみが交差することはできません、ファイルシステムの同じタイプにリンクすることができます。それが唯一のファイルにリンクすることができ、同時に、あなたはディレクトリをリンクすることはできません。
2、ソフトリンク
異なるハードリンクを使用してWindowsシステム内のショートカットに似(にもシンボリックリンクと呼ばれる)ソフトリンク、、、ソフトリンクは通常のファイル、少し特殊なデータブロックの内容を、ユーザデータブロックを別のファイルに格納されたファイルの内容ですソースファイルのパス名へのポイントはすぐにこの方法によって実体ソフト接続ポイントを見つけることができます。
そのようなファイルシステムとして十分なスペースの問題を解決するために使用ソフトリンクは、スペースの不足しているが、現在のファイルシステムに新しいディレクトリを作成し、多数のファイルを格納する必要があり、あなたは他の残りのスペースの多くを置くことができますファイルシステムディレクトリは、ファイルシステムにリンクされています。
ソフトリンクは、ファイル・システムとリンクをまたがることができ、同時にファイルやディレクトリにリンクすることができます。
3.両者の差
- パスが存在している別のファイル、ファイルのコピーの形でハードリンクへのソフトリンクの形で保存されました。
- 異なるファイルシステムとリンク間でソフトリンク、ハードリンクはできません。
- ソフトリンクはディレクトリにリンクすることができ、およびハードリンクはできません。
- ソフトリンクはハードリンクのソースファイルが存在する必要があり、存在しないファイル名にリンクすることができます。
- ソフトリンクを削除すると、ファイルには影響しませんが指すが、元のファイルのポイントが削除された場合、関連するソフトの接続が死んでリンクになります。ハードリンクを削除し、限りiノード番号がゼロでないと、元のファイルが何らかの影響を与えることはありません。
注意:ソフトまたはハードリンクは完全にターゲットファイルの元のコピーをリンクするが、唯一のストレージスペースの非常に少量を占有しませんかどうか。
(LNコマンド)を作成するために第二に、道
ソフトリンクとハードリンクは、異なるパラメータを使用して、lnコマンドを使用して作成されます。次のようにコマンド形式は次のとおりです。
ln 参数 源文件或目录 目标文件或目录
注:ソースとターゲット・ディレクトリは絶対パスでなければなりません!
パラメータ:
- -i対話モードは、ユーザーがファイルがカバレッジ存在するかどうかを求めるメッセージが表示されます。
- -sソフトリンク(シンボリックリンク)。
- -d、スーパーユーザーがディレクトリへのハードリンクを作成することができます。
- -b以前に確立されたリンクをカバーし、削除します。
- -f強制。
- 一般的にシンボリックリンクディレクトリとみなし-n。
- -v詳細な処理手順を表示します。
だから、総括:
- ソフトリンク(シンボリックリンク)を作成し使用します。
ln -s source target
- (物理リンク)を使用ハードリンクを作成します。
ln source target
例えば:
--------------------------------------------------------------------------------------------------------
leon@Ubuntu:~/temp$ ll # 首先创建一个测试目录和测试文件
total 16
drwxrwxr-x 3 leon leon 4096 Aug 29 14:21 ./
drwxr-xr-x 23 leon leon 4096 Aug 29 14:20 ../
drwxrwxr-x 2 leon leon 4096 Aug 29 14:21 testdir/
-rw-rw-r-- 1 leon leon 40 Aug 29 14:21 testfile
--------------------------------------------------------------------------------------------------------
leon@Ubuntu:~/temp$ ln testdir hard_link # 不能对目录创建硬链接
ln: testdir: hard link not allowed for directory
--------------------------------------------------------------------------------------------------------
leon@Ubuntu:~/temp$ ln -s testdir soft_link_for_dir # 可以对目录创建软链接
leon@Ubuntu:~/temp$ ll
total 16
drwxrwxr-x 3 leon leon 4096 Aug 29 14:26 ./
drwxr-xr-x 23 leon leon 4096 Aug 29 14:20 ../
lrwxrwxrwx 1 leon leon 7 Aug 29 14:26 soft_link_for_dir -> testdir/
drwxrwxr-x 2 leon leon 4096 Aug 29 14:21 testdir/
-rw-rw-r-- 1 leon leon 40 Aug 29 14:21 testfile
--------------------------------------------------------------------------------------------------------
leon@Ubuntu:~/temp$ ln testfile hard_link_for_file # 可以对文件创建硬链接
leon@Ubuntu:~/temp$ ll
total 20
drwxrwxr-x 3 leon leon 4096 Aug 29 14:27 ./
drwxr-xr-x 23 leon leon 4096 Aug 29 14:20 ../
-rw-rw-r-- 2 leon leon 40 Aug 29 14:21 hard_link_for_file
drwxrwxr-x 2 leon leon 4096 Aug 29 14:21 testdir/
-rw-rw-r-- 2 leon leon 40 Aug 29 14:21 testfile
--------------------------------------------------------------------------------------------------------
leon@Ubuntu:~/temp$ ln -s testfile soft_link_for_file # 可以对文件创建软链接
leon@Ubuntu:~/temp$ ll
total 20
drwxrwxr-x 3 leon leon 4096 Aug 29 14:28 ./
drwxr-xr-x 23 leon leon 4096 Aug 29 14:20 ../
lrwxrwxrwx 1 leon leon 8 Aug 29 14:28 soft_link_for_file -> testfile
drwxrwxr-x 2 leon leon 4096 Aug 29 14:21 testdir/
-rw-rw-r-- 2 leon leon 40 Aug 29 14:21 testfile
--------------------------------------------------------------------------------------------------------
第三に、注意を払います
1は、前のディレクトリにソフトリンクを作成し、ディレクトリが事前に設定されている、直接lnコマンドが自動的に確立されるターゲットとしません。、あなたの先にターゲットディレクトリの確立の後に、ターゲットディレクトリを確立するために、lnコマンドを使用する場合は注意する必要がある、ネストされます!
leon@Ubuntu:~/temp$ ll testdir/ # 首先查看下源目录下的文件情况
total 8
drwxrwxr-x 2 leon leon 4096 Aug 29 14:29 ./
drwxrwxr-x 3 leon leon 4096 Aug 29 14:28 ../
-rw-rw-r-- 1 leon leon 0 Aug 29 14:29 test
# 下面的语句是直接创建软链接,可以看出软链接的结果是正确的
leon@Ubuntu:~/temp$ ln -s testdir soft_link_for_dir # 创建软链接1
leon@Ubuntu:~/temp$ ll soft_link_for_dir # 查看软链接1的详情
lrwxrwxrwx 1 leon leon 7 Aug 29 14:26 soft_link_for_dir -> testdir/
# 下面的语句是先创建好目标目录,然后再创建软链接。可以看出软链接的结果是不正确的
leon@Ubuntu:~/temp$ mkdir soft_link_for_dir2 # 先创建一个目录
leon@Ubuntu:~/temp$ ln -s testdir soft_link_for_dir2 # 然后再创建软链接2
leon@Ubuntu:~/temp$ ll soft_link_for_dir2 # 查看软链接2的详情
total 8
drwxrwxr-x 2 leon leon 4096 Aug 29 14:34 ./
drwxrwxr-x 4 leon leon 4096 Aug 29 14:34 ../
lrwxrwxrwx 1 leon leon 7 Aug 29 14:34 testdir -> testdir
2、あなたがディレクトリへのソフトリンクを作成するときに、「/」文字を運ぶ、またはソースディレクトリからソフトリンクポイントを作成していないにも「/」の記号を運ぶでしょう。表面の一方で、通常の訪問のように見えるが、特定の状況で問題が発生することを保証することはできません。また、注意しなければなりません!
leon@Ubuntu:~/temp$ ln -s testdir/ soft_link_for_dir1 # 不建议这么操作
leon@Ubuntu:~/temp$ ln -s testdir soft_link_for_dir2 # 这才是正确的
leon@Ubuntu:~/temp$ ll
total 16
drwxrwxr-x 3 leon leon 4096 Aug 29 15:41 ./
drwxr-xr-x 23 leon leon 4096 Aug 29 14:20 ../
lrwxrwxrwx 1 leon leon 8 Aug 29 15:40 soft_link_for_dir1 -> testdir//
lrwxrwxrwx 1 leon leon 7 Aug 29 15:41 soft_link_for_dir2 -> testdir/
drwxrwxr-x 2 leon leon 4096 Aug 29 14:29 testdir/
-rw-rw-r-- 1 leon leon 40 Aug 29 14:21 testfile
3.ソフトリンクを削除すると、「/」文字を運ぶことができないか、むしろソフトリンク自体よりも、ソフトリンク先のディレクトリの下に、そのリソース(つまり、ソースファイル)を削除します。
--------------------------------------------------------------------------------------------------------
leon@Ubuntu:~/temp$ rm -rf soft_link_for_dir1 # 这是正确的删除软链接的方式
leon@Ubuntu:~/temp$ ll # 当前目录下的链接文件已经被删了
total 16
drwxrwxr-x 3 leon leon 4096 Aug 29 15:53 ./
drwxr-xr-x 23 leon leon 4096 Aug 29 14:20 ../
drwxrwxr-x 2 leon leon 4096 Aug 29 14:29 testdir/
-rw-rw-r-- 1 leon leon 40 Aug 29 14:21 testfile
leon@Ubuntu:~/temp$ ls -al testdir/ # 并且,源目录下的原始文件还在
total 12
drwxrwxr-x 2 leon leon 4096 Aug 29 15:55 .
drwxrwxr-x 3 leon leon 4096 Aug 29 15:54 ..
-rw-rw-r-- 1 leon leon 18 Aug 29 15:53 new_file
--------------------------------------------------------------------------------------------------------
leon@Ubuntu:~/temp$ rm -rf soft_link_for_dir/ # 这是错误的删除软链接的方式
leon@Ubuntu:~/temp$ ll # 当前目录下的链接文件没有被删掉
total 16
drwxrwxr-x 3 leon leon 4096 Aug 29 15:54 ./
drwxr-xr-x 23 leon leon 4096 Aug 29 14:20 ../
lrwxrwxrwx 1 leon leon 7 Aug 29 15:54 soft_link_for_dir -> testdir/
drwxrwxr-x 2 leon leon 4096 Aug 29 15:54 testdir/
-rw-rw-r-- 1 leon leon 40 Aug 29 14:21 testfile
leon@Ubuntu:~/temp$ ls -al testdir/ # 而源目录下的原始文件却被删掉了
total 8
drwxrwxr-x 2 leon leon 4096 Aug 29 15:54 .
drwxrwxr-x 3 leon leon 4096 Aug 29 15:54 ..
--------------------------------------------------------------------------------------------------------