背景:
- Python3.9をインストールしたが、
python3.9 --version
コマンドが無効。 - その理由は、プログラムは
/usr/local/bin
の下にインストールされているため、デフォルトの bin ディレクトリ/usr/bin
の下には何もない。 - 解決策は、リンクを作成すること。
- しかし、Linuxにはシンボリックリンクとハードリンクがあるため、どう使い分けるか?
- 以下は調査結果で、メモして置く。
1.Linuxのシンボリックリンクとハードリンク
1-1.各自の解釈
-
Linux では、リンクはファイル名を実際のファイルまたはディレクトリにマッピングするプロセスのこと。
シンボリックリンクとハードリンクはリンクの2つの異なる方法。 -
シンボリックリンクは、別のファイルへのポインタを含む特殊なタイプのファイルのこと。
ファイル システム内のシンボリックリンクはそれが指すファイルと同じではなく、パス名に過ぎない。
ln -s コマンドを使用してシンボリックリンクを作成。
ln -s /path/to/target /usr/bin/link
このコマンドは、/usr/bin/
の下に link という名前のシンボリックリンクを作成。
このリンクの指す場所は/path/to/target
。
デモ
-
ハード リンクは、ファイル名を物理的な保存場所にマップするリンク。
ハード リンク ファイルとソース ファイルは、同じ inode 番号とデバイス番号を持ち、同じデータ ブロックを指す。
ln コマンドを使用してハード リンクを作成。
ln /path/to/target /usr/bin/link
このコマンドは、/usr/bin/
の下に link という名前のハード リンクを作成。
このリンクの指す場所は/path/to/target
。
デモ
1-2.同じの部分
- そのため、リンクという機能につき、両方は同じ。
1-3.次は両方の相違点
- シンボリックリンクは異なるファイル システムにまたがることができるが、ハード リンクは同じファイル システム内でしか作成できない。
ソース ファイルが削除されても、ハード リンクは引き続きソース ファイルのコンテンツにアクセスできるが、シンボリックリンクは無効になる。
ハード リンク リンクとソース ファイルが同じ inode 番号を共有するため。
コメント欄