Lnソフトリンク

ソフトリンク

使用する

linux link (ln) 的用法 : ln -s <目标文件> <link_name>

总之,目标文件(被link的文件或文件夹)永远在前面,

我总是把两者弄混淆。。。

lnコマンドを明確に説明したい場合は、最初にextファイルシステム(Linuxファイルシステム)がどのように機能するかを説明する必要があります。パーティションのフォーマットはファイルシステムに書き込むことであり、Linuxは現在ext4ファイルシステムを使用していることを前に説明しました。回路図を使用してext4ファイルシステムを説明する場合は、図1を参照してください。

ext4ファイルシステムの概略図
図1ext4ファイルシステムの概略図

ext4ファイルシステムは、パーティションを2つの主要部分に分割します(当面はスーパーブロックについては触れません)。小さな部分はファイルのiノード(iノード)情報を格納するために使用され、残りの部分はファイルのiノード(iノード)情報を格納するために使用されます。ブロック情報。

iノードのデフォルトサイズは128バイトで、ファイルのアクセス許可(r、w、x)、ファイルの所有者とグループ、ファイルサイズ、ファイルステータスの変更時間(ctime)、ファイルの最終読み取り時間(Atime)、最後の記録に使用されます。ファイルの変更時刻(mtime)、およびファイルのデータが実際に保存されるブロック番号。各ファイルはiノードを占有する必要があります。注意深くチェックすると、ファイル名はファイルが配置されているディレクトリのブロックに記録されているため、iノードにファイル名が記録されていないことがわかります。

ブロックサイズは1KB、2KB、4KBで、デフォルトは4KBです。ブロックは実際のデータストレージに使用されます。1つのブロックがデータを保持できない場合、複数のブロックを占有する可能性があります。たとえば、10KBのファイルを保存する必要がある場合、そのファイルは3ブロックを占有します。最後のブロックをいっぱいにすることはできませんが、他のファイルのデータを配置することはできません。これらの3つのブロックは、連続的または分散的である可能性があります。

これから、次の2つの重要な情報を知ることができます。

  1. 各ファイルは独立してiノードを占有し、ファイルの内容はiノードのレコードによって示されます。
  2. ファイルの内容を読み取りたい場合は、ディレクトリに記録されているファイル名を使用してファイルのiノードを見つけ、ファイルの内容が配置されているブロックブロックを正常に見つける必要があります。

Linuxシステムの基礎となるファイルのストレージステータスを理解した後、次のステップはlnコマンドを学習することです。

lnコマンドは、ファイルへのリンクを作成するために使用されます。Linuxシステムに保存されているファイルの特性に応じて、リンクするには2つの方法があります。

  • ソフトリンク:Windowsシステムでファイルへのショートカットを作成するのと同様です。つまり、別のファイルを指すために使用される特別なファイルが生成されます。このリンク方法は、ディレクトリにも適用できます。
  • ハードリンク:ファイルの基本情報がiノードに格納されていることはわかっています。ハードリンクとは、ファイルのiノードに複数のファイル名を割り当てることを指します。任意のファイル名を使用して、ファイルのiノードを見つけて読み取ることができます。ファイルのデータ情報。

lnコマンドの基本的な形式は次のとおりです。

[root @ localhost〜] #ln [オプション]ソースファイルターゲットファイル

オプション:

  • -s:ソフトリンクファイルを作成します。「-s」オプションが追加されていない場合、ハードリンクファイルが確立されます。
  • -f:必須。ターゲットファイルがすでに存在する場合は、ターゲットファイルを削除してから、リンクファイルを作成します。

[例1]ハードリンクを作成します。

[root@localhost ~]# touch cangls
[root@localhost ~]# ln /root/cangls /tmp
#建立硬链接文件,目标文件没有写文件名,会和原名一致
#也就是/tmp/cangls 是硬链接文件

[例2]ソフトリンクを作成します。

[root@localhost ~]# touch bols
[root@localhost ~]# In -s /root/bols /tmp
#建立软链接文件

ここで、ソフトリンクファイルのソースファイルは、相対パスではなく絶対パスとして書き込む必要があることに注意してください(ハードリンクにはそのような要件はありません)。そうでない場合、ソフトリンクファイルはエラーを報告します。これは初心者にとって非常に簡単な間違いです。

リンクを作成するlnの詳細な分析

ハードリンクとソフトリンクを確立するのは非常に簡単ですが、これら2種類のリンクの違いは何ですか?彼らは何をしますか?これはリンクファイルの最も難しい部分です。個別に説明しましょう。

lnはハードリンクを作成します

もう一度ハードリンクファイルを作成してから、これら2つのファイルの特性を見てみましょう。

[root@localhost ~]# touch test
#建立源文件
[root@localhost ~]# ln /root/test /tmp/test-hard
#给源文件建立硬链接文件 /tmp/test-hard
[root@localhost ~]# ll -i /root/test /tmp/test-hard
262147 -rw-r--r-- 2 root root 0 6月 19 10:06 /root/test
hard
262147 -rw-r--r-- 2 root root 0 6月 19 10:06 /tmp/test-hard
#查看两个文件的详细信息,可以发现这两个文件的 inode 号是一样的,"ll"等同于"ls -l"

ここには非常に奇妙なことがあります。前にiノード番号について話したときに、各ファイルのiノード番号は異なるはずだと言いました。iノード番号はファイルIDに相当します。ファイルを検索するときは、ファイルの内容を読み取る前に、まずiノード番号を検索する必要があります。

しかし、ソースファイルとハードリンクファイルのiノード番号は同じなので、ファイルを検索したときに、どのファイルが見つかりましたか?図2に示すように、回路図を描きましょう。

ハードリンク図
図2ハードリンクの概略図

iノード情報では、ファイル名は記録されませんが、ファイル名は上位ディレクトリのブロックに記録されます。言い換えると、ディレクトリのブロックに記録されるのは、ディレクトリ内のすべての第1レベルのサブファイルとサブディレクトリのファイル名とiノードの対応です。ファイルのブロックには、の実際のデータが記録されます。ファイル。

/ root / testなどのファイルを探すときは、次の手順を実行する必要があります。

  1. 最初にルートディレクトリのiノードを見つけ(ルートディレクトリのiノードはシステムによって認識され、iノード番号は2です)、次にユーザーがルートディレクトリのブロックにアクセスする権限を持っているかどうかを判断します。
  2. 権限がある場合は、ルートディレクトリのブロックにある/ rootのファイル名と対応するiノード番号にアクセスできます。
  3. / root /ディレクトリのiノード番号から、/ root /ディレクトリのiノード情報を見つけて、ユーザーが/ root /ディレクトリのブロックにアクセスする権限を持っているかどうかを判断できます。
  4. 権限がある場合は、テストファイルのファイル名と対応するiノード番号を/ root /ディレクトリのブロックから読み取ることができます。
  5. テストファイルのiノード番号から、テストファイルのiノード情報を見つけて、ユーザーがテストファイルのブロックにアクセスする権限を持っているかどうかを判断できます。
  6. 権限がある場合は、ブロック内のデータを読み取ることができます。これにより、/ root / testファイルの読み取りとアクセスが完了します。

この手順に従って、ソースファイル/ root / testのハードリンクファイル/ tmp / test-hardが作成された後、テストおよびtest-hard情報が/ root /ディレクトリおよび/ tmpのブロックに作成されます。 /ディレクトリ、これ情報は主にファイル名と対応するiノード番号です。ただし、testとtest-hardのiノード情報は実際には同じであることがわかります。したがって、どのファイルにアクセスしても、最終的にはiノード番号262147のファイル情報にアクセスします。

これがハードリンクの原則です。ハードリンクの特徴は次のとおりです。

  • ソースファイル(テストファイル)を変更する場合でも、ハードリンクファイル(テストハードファイル)を変更する場合でも、他のファイルのデータは変更されます。
  • ソースファイルの削除やハードリンクファイルの削除に関係なく、別のファイルがあれば、このファイル(iノード番号262147のファイル)にアクセスできます。
  • ハードリンクは、新しいiノード情報を作成したり、iノードの総数を変更したりすることはありません。
  • iノード番号は異なるファイルシステムで再計算されるため、ファイルシステム(パーティション)間でハードリンクを確立することはできません。
  • ディレクトリへのハードリンクを作成する場合、ディレクトリ自体を再確立する必要があるだけでなく、サブディレクトリ内のすべてのサブファイルを含む、ディレクトリ内のすべてのサブファイルが必要になるため、ハードリンクはディレクトリをリンクできません。これは、現在のLinuxでは複雑すぎます。

ハードリンクには多くの制限があり、ファイルシステムを越えたりディレクトリをリンクしたりすることはできません。ソースファイルとハードリンクファイルの間のiノード番号が同じである以外に、他の明らかな機能はありません。これらの機能により、ハードリンクは一般的に使用されないため、誰もが理解する必要があります。

実験を通してテストしてみましょう。

[root@localhost ~]# echo 1111 >>/root/test
#向源文件中写入数据
[root@localhost ~]# cat /root/test
1111
[root@localhost ~]# cat /tmp/test-hard
1111
#源文件和硬链接文件都会发生改变
[root@localhost ~]# echo 2222 >> /tmp/test-hard
#向硬链接文件中写入数据
[root@localhost ~]# cat /root/test
1111
2222
[root@localhost ~】# cat /tmp/test-hard
1111
2222
#源文件和硬链接文件也都会发生改变
[root@localhost ~]# rm -rf/root/test
#删除源文件
[root@localhost ~]# cat /tmp/test-hard
1111 2222
#硬链接文件依然可常读取

lnはソフトリンクを作成します

ソフトリンクはシンボリックリンクとも呼ばれます。ハードリンクと比較して、ソフトリンクがはるかに一般的に使用されます。最初にソフトリンクを確立してから、ソフトリンクの特性を見てみましょう。

[root@localhost ~]# touch check
#建立源文件
[root@localhost ~]# ln -s /root/check /tmp/check-soft
#建立软链接文件
[root@localhost ~]# ll -id /root/check /tmp/check-soft
262154 -rw-r--r-- 1 root root 0 6月 19 11:30 /root/check
917507 lrwxrwxrwx 1 root root 11 6月 19 11:31 /tmp/ check-soft -> /root/check
#软链接和源文件的 inode 号不一致,软链接通过 -> 明显地标识出源文件的位置
#在软链接的权限位 lrwxrwxrwx 中,l 就代表软链接文件

この場合も、ソフトリンクのソースファイルに絶対パスを書き込む必要があります。そうしないと、作成されたソフトリンクファイルでエラーが報告され、通常は使用できません。

ソフトリンクの兆候は非常に明白です。まず、許可ビットの「l」は、これがソフトリンクファイルであることを示します。次に、ソースファイルのフルネームがファイルの後ろに「->」で表示されます。 。したがって、ソフトリンクの符号はハードリンクよりもはるかに明白であり、ソフトリンクはハードリンクほど制限されていません。たとえば、ソフトリンクはディレクトリをリンクしたり、パーティションを越えてソフトリンクを確立したりできます。

ソフトリンクはWindowsのショートカットとして扱うことができ、その特性はショートカットと同じです。ハードリンクの代わりにソフトリンクを使用することをお勧めします。

ソフトリンクを学習するとき、誰もがいくつかの質問をします:ソースファイルが深すぎるため、Windowsショートカットを見つけるのは簡単ではありません。簡単に検索できるようにデスクトップにショートカットを作成します。Linuxソフトリンクの機能は何ですか?

著者は個人的に、ソフトリンクは主に管理者の使用習慣を管理するためのものであると考えています。たとえば、一部のシステムの自己起動ファイル/etc/rc.localが/ etcディレクトリに配置されているが、一部のシステムはそれを/etc/rc.d/rc.localに配置している場合、次のソフトウェアを簡単に作成できます。これらの2つのファイル。リンク、どのファイルに慣れていても、結果は同じです。

さらに注意を払うと、ソフトリンクとソースファイルのiノード番号に一貫性がないことに気付くはずです。また、図3に示すように、ソフトリンクの原理を確認するための回路図を描画します。

ソフトリンクの概略図
図3ソフトリンクの概略図

ソフトリンクとハードリンクの原則の主な違いは、ハードリンクは独自のiノードインデックスとブロック(データブロック)を確立せず、ソースファイルのiノード情報とブロックを直接指すため、ハードリンクとiノードがソースファイルの番号は同じです。ソフトリンクは実際に独自のiノードインデックスとブロックを確立するため、ソフトリンクとソースファイルのiノード番号に一貫性がなく、ソフトリンクのブロックでは何が書き込まれるのは実際のデータではなく、ソースのみです。ファイルのファイル名とiノード番号。

ソフトリンクにアクセスする手順とハードリンクにアクセスする手順の違いを見てみましょう。

  1. 最初にルートディレクトリのiノードインデックス情報を見つけてから、ユーザーがルートディレクトリのブロックにアクセスする権限を持っているかどうかを確認します。
  2. ルートディレクトリのブロックにアクセスする権限がある場合、/ tmp /ディレクトリのiノード番号がブロックに表示されます。
  3. 次に、/ tmp /ディレクトリのiノード情報にアクセスして、ユーザーが/ tmp /ディレクトリのブロックにアクセスする権限を持っているかどうかを確認します。
  4. 許可がある場合は、ソフトリンクファイルcheck-softのiノード番号がブロックで読み取られます。ソフトリンクファイルは実際には独自のiノードインデックスとブロックを作成するため、ソフトリンクファイルとソースファイルのiノード番号は異なります。
  5. ソフトリンクファイルのiノード番号を介して、チェックソフトファイルのiノード情報が検出され、ユーザーがブロックにアクセスする権限を持っているかどうかが判断されます。
  6. 許可がある場合は、check-softファイルのブロックに実際のデータはなく、ソースファイルのiノード番号のみがチェックされていることがわかります。
  7. 次に、ソースファイルのiノード情報にアクセスして、ソースファイルのiノード番号を確認し、ユーザーがブロックにアクセスする権限を持っているかどうかを確認します。
  8. 権限がある場合は、チェックファイルのブロックで実際のデータが読み取られ、データアクセスが完了します。

このプロセスを通じて、ソフトリンクの特性を要約できます(ソフトリンクの特性は、Windowsのショートカットとまったく同じです)。

  • ソースファイルを変更する(チェック)か、ハードリンクファイルを変更する(チェックソフト)かにかかわらず、他のファイルのデータは変更されます。
  • ソフトリンクファイルを削除します。ソースファイルは影響を受けません。元のファイルを削除すると、ソフトリンクされたファイルに実際のデータが見つからないため、ファイルが存在しないことがわかります。
  • ソフトリンクは独自のiノード情報とブロックを作成しますが、実際のファイルデータはブロックに保存されませんが、ソースファイルのファイル名とiノード番号は保存されます。
  • ソフトリンクはディレクトリをリンクできます。
  • ソフトリンクはパーティションにまたがることができます。

ソフトリンクの特性をテストしてみましょう。

[root@localhost ~]# echo 111>>/root/check
#修改源文件
[root@localhost ~]# cat /root/check
111
[root@localhost ~]# cat /tmp/check-soft
111
#不论是源文件还是软链接文件,数据都发生改变
[root@localhost ~]# echo 2222 >>/tmp/check-soft
#修改软链接文件
[root@localhost ~]# cat /tmp/check-soft
111
2222
[root@localhost ~]# cat /root/check
111
2222
#不论是源文件还是软链接文件,数据也都会发生改变
[root@localhost ~]# rm -rf/root/check
#删除源文件
[root@localhost ~]# cat /tmp/check-soft
cat: /tmp/check-soft:没有那个文件或目录
#软链接无法正常使用

ソフトリンクは、次のようなディレクトリをリンクできます。

[root@localhost ~]# mkdir test
#建立源目录
[root@localhost ~]# ln -s /root/test/ /tmp/
[root@localhost ~]# ll -d /tmp/test
lrwxrwxrwx 1 root root 11 6月 19 12:43 /tmp/test->/root/test/
#软链接可以链接目录

おすすめ

転載: blog.csdn.net/ahelloyou/article/details/115118321