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


LinuxのようなUnixライクなオペレーティングシステムでは、「すべてはファイル」であり、ファイルは基本的にinode(ファイル名と実際の内容を除いてファイルに関するすべてを格納するデータ構造)へのリンクです。

ハードリンクは、別のファイルと同じ基礎となるiノードを指すファイルです。ファイルを1つ削除した場合は、基礎となるiノードへのリンクが1つ削除されます。シンボリックリンク(ソフトリンクとも呼ばれる)はファイルシステム内の別のファイル名へのリンクです。

2種類のリンクのもう1つの重要な違いは、ハードリンクは同じファイルシステム内でしか機能できないのに対し、シンボリックリンクは異なるファイルシステムにまたがることができることです。

Linuxでハードリンクを作成する方法

Linuxでハードリンクを作成するには、 lnユーティリティを使用します。たとえば、次のコマンドはファイル topprocs.sh への tp という名前のハードリンクを作成します。

$ ls -l
$ ln topprocs.sh tp
$ ls -l

上記の出力を見て、lsコマンドを使用して、新しいファイルはリンクとして示されず、通常のファイルとして示されます。これは、 tp topprocs.sh と同じ基になるiノードを指す別の通常の実行可能ファイルであることを意味します。

ハードリンクを直接ソフトリンクにするには、このように -P フラグを使用します。

$ ln -P topprocs.sh tp

Linuxでシンボリックリンクを作成する方法

Linuxでシンボリックリンクを作成するには、 -s スイッチと同じ lnユーティリティを使用します。たとえば、次のコマンドは topps.sh という名前のファイル topprocs.sh へのシンボリックリンクを作成します。

$ ln -s ~/bin/topprocs.sh topps.sh
$ ls -l topps.sh

上記の出力から、 topps.sh l:で示されるリンクであり、別のファイル名へのリンクであることがファイル許可のセクションからわかります。

シンボリックリンクが既に存在する場合、操作を強制する(既存のシンボリックリンクを削除する)にはエラーが発生するかもしれません。

$ ln -s ~/bin/topprocs.sh topps.sh
$ ln -sf ~/bin/topprocs.sh topps.sh

詳細モードを有効にするには、 -v フラグを追加して、リンク先の各ファイルの名前を出力に表示します。

$ ln -sfv ~/bin/topprocs.sh topps.sh
$ $ls -l topps.sh

それでおしまい!以下の関連記事をチェックしてください。

  1. fdupes – A Command Line Tool to Find and Delete Duplicate Files in Linux
  2. 5 Useful Commands to Manage File Types and System Time in Linux

この記事では、Linuxでハードリンクとシンボリックリンクを作成する方法を学びました。下記のフィードバックフォームから、このガイドに関する質問や意見をシェアすることができます。