GNU/Linux >> Linux の 問題 >  >> Linux

Linuxシステムでハードリンクとソフト(シンボリックリンク)リンクを作成する方法

Linux / Unixベースのオペレーティングシステムでは、多くの場合、基礎となる概念を理解するのが賢明です。そうすれば、コマンドの美しさとその実装方法を理解できるのは1人だけです。

これらのコマンドと関連する概念について事前によく知っていれば、いくつかの小さな詳細が、多くの困難な状況のデバッグとトラブルシューティングに大いに役立ちます。

このトピックでは、リンクとは何か、さまざまなタイプ、特徴的な文字、およびそれらをより適切に使用する方法と、必要な概念について説明します。

「manln」コマンドを実行すると、「ファイル間のリンクを作成」と表示され、ソフトリンクまたはハードリンクについては表示されないことがわかります。

[email protected] ~}$ man ln

同様に、コマンド「man link」は、「ファイルを作成するためのlink関数の呼び出し」として説明されています。

ソフトリンク:

名前が示すように、ソフトリンクは新しいファイルに作成された単なる新しいリンクです。この場合、新しいファイルのiノード番号は古いファイルを指します。

ハードリンク:

この場合、古いファイルと新しいファイルの両方が同じiノード番号を指します。

シンボリックリンク:

一部のUnix/Linuxフレーバーでは、シンボリックリンクとソフトリンクの両方が同じように扱われます。ただし、実際の違いは、新しいファイルと古いファイルの両方のiノード番号が新しいiノード番号を指していることです。これは完全に実装に依存します。

注1 :-多くの場合、シンボリックとソフトリンクの用語は同じ意味で使用されます。ただし、いつ何を使用するかを知っておく必要があります。

ハードリンクとソフトリンクを作成するための「ln」コマンドの使用

ハードリンクの作成

1) 「manln」コマンドは次の出力を提供します。

[email protected] ~}$ man ln
ln  - make links between files

2) 「ln」コマンドを引数なしで渡すと、「ファイルオペランドがありません」というエラーがスローされます。

[email protected] ~}$ln
ln: missing file operand
Try 'ln --help' for more information.

3) 2つのファイル間のハードリンクを作成します。最初に既存のファイルがあるかどうかを確認します。そうでない場合は、ファイルを新たに作成してからリンクします。以下は、段階的なアプローチです

[email protected] ~}$ ls -la
total 24
drwx------  4 root root 4096 Feb  6 15:23 .
drwxr-xr-x 23 root root 4096 Jan 25 16:39 ..
-rw-r--r--  1 root root 3122 Jan 25 16:41 .bashrc
drwx------  2 root root 4096 Feb  6 15:23 .cache
-rw-r--r--  1 root root    0 Jan 25 16:41 .hushlogin
-rw-r--r--  1 root root  148 Aug 17  2015 .profile
drwxr-xr-x  2 root root 4096 Jan 25 16:41 .ssh

i) 「タッチ」コマンドを使用してファイルを作成します

[email protected] ~}$ touch 123.txt
[email protected] ~}$ ls -l
total 0
-rw-r--r-- 1 root root 0 Feb  6 15:51 123.txt

ii) 「cat」コマンドを使用してファイルに内容を入力し、「ctrl+c」を押して保存して終了します。

[email protected] ~}$ cat > 123.txt
Welcome to this World!
^C

iii) ファイル「123.txt」と「321.txt」の間にハードリンクを作成します。この場合、「WelcometothisWorld」という内容の「123.txt」がすでに存在しています。

[email protected] ~}$ ln 123.txt 321.txt
[email protected] ~}$ ls -l
total 8
-rw-r--r-- 2 root root 23 Feb  6 15:52 123.txt
-rw-r--r-- 2 root root 23 Feb  6 15:52 321.txt

iv) ファイルのiノード(インデックスノード)番号を確認してください。どちらのファイルでも、iノード番号は同じで794583です。また、「123.txt」と同じ新しいファイル「321.txt」の内容も確認してください。

[email protected] ~}$ ls -li
total 8
794583 -rw-r--r-- 2 root root 23 Feb  6 15:52 123.txt
794583 -rw-r--r-- 2 root root 23 Feb  6 15:52 321.txt
$ cat 321.txt
Welcome to this World!

注2 :-iノード番号は、Linux/unixオペレーティングシステムで作成されているファイルに対して生成される一意のインデックス番号です。これらのiノード番号は、/procディレクトリのdirectory/file属性に格納されます。ただし、リンクの場合、これらのiノード番号はファイル間で共有され、ファイルテーブルではパスのみが更新されます。

v) 「456.txt」というファイルをもう1つ作成し、lnコマンドを使用してこれを「321.txt」にリンクします。これで、3つのファイルすべてのiノード番号が同じになります。 「456.txt」の内容は元のファイルと同じになります。

[email protected] ~}$  ls -li
total 12
794583 -rw-r--r-- 3 root root 23 Feb  6 15:52 123.txt
794583 -rw-r--r-- 3 root root 23 Feb  6 15:52 321.txt
794583 -rw-r--r-- 3 root root 23 Feb  6 15:52 456.txt
$ cat 456.txt
Welcome to this World!
[email protected] ~}$   ls -l
total 12
-rw-r--r-- 3 root root 23 Feb  6 15:52 123.txt
-rw-r--r-- 3 root root 23 Feb  6 15:52 321.txt
-rw-r--r-- 3 root root 23 Feb  6 15:52 456.txt

vi) ソースファイルまたはこれらのファイルのいずれかが削除されても、他のファイルに影響を与えることはありません。ソースファイルは、「rm」コマンドを使用して削除できます。他のファイルの内容も影響を与えません。

[email protected] ~}$ rm 123.txt
[email protected] ~}$ ls -l
total 8
-rw-r--r-- 2 root root 23 Feb  6 15:52 321.txt
-rw-r--r-- 2 root root 23 Feb  6 15:52 456.txt
[email protected] ~}$ ls -li
total 8
794583 -rw-r--r-- 2 root root 23 Feb  6 15:52 321.txt
794583 -rw-r--r-- 2 root root 23 Feb  6 15:52 456.txt
[email protected] ~}$ cat 456.txt
Welcome to this World!

vii) ディレクトリ間でのハードリンクの作成は許可されていません。

[email protected] ~}$ls -l
total 8
-rw-r--r-- 2 root root 23 Feb  6 15:52 321.txt
-rw-r--r-- 2 root root 23 Feb  6 15:52 456.txt
[email protected] ~}$ mkdir abc
[email protected] ~}$ ln abc def
ln: abc: hard link not allowed for directory

viii) 1つのファイルの内容に変更を加えると、他のファイルの内容に影響を与え、それに応じて変更されます。以下に説明する手順を示します。

[email protected] ~}$ vi 321.txt
Welcome to this World!
You are welcomed to this new world
:wq
[email protected] ~}$ ls -l
total 12
-rw-r--r-- 2 root root   59 Feb  6 16:24 321.txt
-rw-r--r-- 2 root root   59 Feb  6 16:24 456.txt
drwxr-xr-x 2 root root 4096 Feb  6 16:18 abc
[email protected] ~}$ cat 456.txt
Welcome to this World!
You are welcomed to this new world

ソフトリンクの作成:

1) 「touch」コマンドを使用してファイル「src.txt」を作成し、catコマンドを使用して「HelloWorld」としてコンテンツを入力し、「ctrl+c」を押して保存して終了します。

[email protected] ~}$ touch src.txt
[email protected] ~}$ cat > src.txt
Hello World
^C
[email protected] ~}$ ls -l
total 4
-rw-r--r-- 1 root root 12 Feb  6 16:32 src.txt

2) 宛先ファイルを「dst.txt」として作成し、「ln -s」コマンドラインオプションを使用してシンボリックリンク(ソフトリンクとも呼ばれます)を作成します。 「dst.txt」ファイルの内容を確認すると、「src.txt」と同じ内容が表示されます。

[email protected] ~}$ ln -s src.txt dst.txt
[email protected] ~}$  ls -l
total 4
lrwxrwxrwx 1 root root  7 Feb  6 16:33 dst.txt -> src.txt
-rw-r--r-- 1 root root 12 Feb  6 16:32 src.txt
[email protected] ~}$  cat dst.txt
Hello World

3) シンボリックリンクの場合、ソースファイルと宛先ファイルのiノード番号が異なります。また、権限には、これらがリンクであることを示す文字「l」が表示されます。 「dst.txt–> src.txt」は、現在確立されている新しいリンクになります。

[email protected] ~}$  ls -li
total 4
794584 lrwxrwxrwx 1 root root  7 Feb  6 16:33 dst.txt -> src.txt
794583 -rw-r--r-- 1 root root 12 Feb  6 16:32 src.txt

4) ディレクトリのシンボリック作成が許可されます。これは、以下の手順で説明されています

[email protected] ~}$ mkdir abc
[email protected] ~}$ ln -s abc def
$ ls -l
total 8
drwxr-xr-x 2 root root 4096 Feb  6 16:34 abc
lrwxrwxrwx 1 root root    3 Feb  6 16:34 def -> abc
lrwxrwxrwx 1 root root    7 Feb  6 16:33 dst.txt -> src.txt
-rw-r--r-- 1 root root   12 Feb  6 16:32 src.txt

5) すべてのファイル/ディレクトリのiノード番号(ソースと宛先が異なります)

[email protected] ~}$  ls -li
total 8
794585 drwxr-xr-x 2 root root 4096 Feb  6 16:34 abc
794586 lrwxrwxrwx 1 root root    3 Feb  6 16:34 def -> abc
794584 lrwxrwxrwx 1 root root    7 Feb  6 16:33 dst.txt -> src.txt
794583 -rw-r--r-- 1 root root   12 Feb  6 16:32 src.txt

6) 前に説明したように、ディレクトリに対してシンボリックリンクを作成できます。シンボリックリンクのあるこれらのディレクトリが作成されると、これらのディレクトリ内にファイルを作成できます。これにより、これが現在どのように動作するかを知ることがより面白くなります。ソースディレクトリにファイルを作成すると、宛先ディレクトリにも同じことが反映されます。次の手順でこれを明確に説明します。

[email protected] ~}$ $ cd abc
[email protected] ~}$  touch 123.txt
[email protected] ~}$  vi 123.txt
Hello
:wq!
[email protected] ~}$  touch 456.txt
[email protected] ~}$  cd ..
[email protected] ~}$  ls -l
total 8
drwxr-xr-x 2 root root 4096 Feb  6 16:36 abc
lrwxrwxrwx 1 root root    3 Feb  6 16:34 def -> abc
lrwxrwxrwx 1 root root    7 Feb  6 16:33 dst.txt -> src.txt
-rw-r--r-- 1 root root   12 Feb  6 16:32 src.txt
[email protected] ~}$ cd def
[email protected] ~}$ ls -l
total 4
-rw-r--r-- 1 root root 6 Feb  6 16:37 123.txt
-rw-r--r-- 1 root root 0 Feb  6 16:36 456.txt
[email protected] ~}$ cat 123.txt
Hello

注3 :-ネストされたリンクはいくつでも持つことができます。ただし、これらのシンボリックリンクを作成するユーザー/管理者は、これらが混乱を招く可能性があることに注意する必要があります。忘れられて、望ましくない結果が生じる場合があります。したがって、注意する必要があります。

注4 :-存在しないリンクを指す「シンボリック」または「ソフト」リンクの可能性がいくつかあります。これを「ダングリングリンク」と呼びます。これはどこにも指さないでしょう。

注5 :-プログラミングレベルでシンボリックまたはハードリンクを作成するためにlinux / unixで使用されるシステムコールがあります(システムレベルのC / C ++プログラムを使用)。これらは1)シンボリックリンク2)シンボリックリンクです。

これらを、上記で説明したコマンドラインユーティリティと混同しないでください。

ソフトリンク/シンボリックリンクの削除

ソフトリンクまたはシンボリックリンクは、「rm」コマンドとリンク解除コマンドを使用して削除されます。

構文:

#rm

のリンクを解除します

ソフトリンクディレクトリの削除

構文:

#rm

のリンクを解除します

結論:

ハードかソフトかに関係なくリンクを作成することは、管理者と開発者にとって非常に役立ちます。上記の参考資料は、作成しているリンクの種類とその有用性を理解するのに役立ちます。また、この記事は、リンクの違いと利用法を理解するのに役立ちます。


Linux
  1. Linuxのハードリンクとソフトリンクの説明

  2. RHEL 7 – RHCSA 注:ハード リンクとソフト リンクを作成します。

  3. Linux ファイル システムのソフト リンクとハード リンクとは

  1. Linuxのルートでもファイルとディレクトリを削除できないようにする方法

  2. シンボリック リンク (ソフト リンク) とは何か、および Linux でそれらを作成する方法

  3. Linuxのソフトリンクとハードリンクの違い

  1. Linuxでハードリンクとシンボリックリンクを作成する方法

  2. Linuxでソフトリンクとハードリンクを作成する方法

  3. Linux でファイルシステムを作成してマウントする方法