ハードリンク およびソフトリンク Unixライクな環境で作業しているときに理解する重要な概念です。この記事では、ハードリンクとソフトリンクとは何か、およびLinuxでそれらを作成する方法について説明します。
Linuxはすべてをファイルとして扱います。ブロックデバイス、キャラクターデバイス、ソケット、名前付きパイプのいずれであっても、Linuxはそれらをファイルとして扱います。 ハードリンク およびソフトリンク また、別のファイルを参照して実際に作成されるファイルの一種です。
Linuxのハードリンクとは
ハードリンク 元のファイルのクローンのようなものです。すべてのハードリンクは同じiノード番号を共有し、元のファイルまたは他のハードリンクされたファイルを削除しても他のファイルには影響しませんが、ファイルの内容を読み取ることができます。
注 :ディレクトリのハードリンクは作成できません。
Linuxでハードリンクを作成する方法
ハードリンクを操作する方法を見てみましょう。 file1.txtという名前のファイルを作成しています それにいくつかの内容を書きます。
$ cat file1.txt
次に、-i
を指定してlsコマンドを実行します。 file1.txtのiノード番号を確認するためのフラグ とリンク数。
$ ls -li file1.txt
次に、新しいハードリンクを作成し、同じlsコマンドを実行します。 iノード番号を確認します。両方のファイルのiノード番号が同じであることがわかります。
$ ln <source-file> <destination-file> $ ln file1.txt file2.txt
次に、 file2.txtから新しいハードリンクファイルを作成します。 これはfile1.txtからすでに作成されています 。リンク数を確認すると、すべてのファイルで3に更新されます。
$ ls -li file2.txt /home/karthick/file3.txt
Linuxでハードリンクを削除する方法
これで、ハードリンクされたファイルのいずれかを削除すると、それに応じてすべてのファイルのリンクカウントが更新され、ファイルの内容に引き続きアクセスできます。
$ rm file1.txt
ファイルシステム全体でハードリンクされたすべてのファイルを完全に削除するには、findコマンドを使用して、同じiノード番号のファイルを検索し、ファイルを削除します。
$ find <directory> -inum <inode-number> # SYNTAX $ find / -inum 415314 # Finding all files with Inode 51425368
ファイルを削除するには、 execを追加します 検索へのコマンド コマンド。
$ sudo find / -inum415314 -exec rm -f {} \;
注 :検索を実行すると コマンドを実行し、ファイルシステム内のすべてのディレクトリをスキャンする場合は、 sudoを使用することをお勧めします。 。
Linuxのソフトリンクとは
ソフトリンク シンボリックリンクまたはシンボリックリンクと呼ばれることもあります。ソフトリンクを作成すると、新しいファイルが作成され、そのファイルは親ファイルを指します。これは、ファイルやフォルダー用に作成するショートカットと考えてください。新しいファイルには、親ファイルとは異なるiノードがあります。
$ cat > slink.txt $ ls -li slink.txt
Linuxでソフトリンクを作成する方法
次に、新しいソフトリンクを作成し、同じlsコマンドを実行します。 iノード番号を確認します。両方のファイルのiノード番号が同じであることがわかります。また、各ファイルのリンク数も確認してください。
$ ln -s <source> <destination> # SYNTAX $ ln -s file1.txt file2.txt
上の画像のリンク数を見てください。常に1になります。 すべてのファイルが個別のiノード番号を取得するため、ソフトリンクの場合。これで、ソフトリンクを削除しても、元のファイルには影響しません。
# grep ^ ./slink* # Display the contents of file1, file2 # rm slinked_linked.txt
元のファイルを削除すると、リンクされたファイルにアクセスしようとしたときにエラーがスローされます。
$ ls -li $ rm slink.txt $ ls -li $ cat slink_linked.txt
親ファイルを削除しても、リンクされているすべてのファイルを削除するのを忘れる場合があります。次のコマンドを実行すると、孤立したすべてのソフトリンクを確認およびクリーンアップできます。 検索 コマンドは、 / home /から孤立したすべてのリンクを見つけようとします ディレクトリと-delete
リンクが削除されます。
# find -L /home/ -type l -delete
この記事は以上です。貴重なフィードバックや記事を改善するためのヒントをお聞かせください。