lnコマンドを調べる中で学んだこと

ln コマンドとは,ファイルやディレクトリに対してリンクを作成するコマンドである.

  • リンクを作成?リンクとは?
  • 作成してどうする?

イメージがわかなかったので,調べてみた.その過程のメモ.

リンク

リンクを作成することで,そのリンクから大元のファイルにアクセスすることができる.ハードリンクとシンボリックリンクの二種類あるうちのシンボリックリンクを主に使うとのこと.(よってハードリンクとシンボリックリンクの違いは触れない.)

リンクを作成する目的

  • パス名が長いファイルやディレクトリに簡単にアクセスできる
  • ファイルパスを維持しながらファイルを更新できる
  • 同じ役割のファイルの重複を防ぐ

後半の二つについて,詳しく説明する.

ファイルパスを維持しながらファイルを更新できる

例えば,あるライブラリファイルを参照するシンボリックリンクがあるとする.ここでは,その大元のライブラリファイルをアップデートするケースを考える.

  1. 大元のライブラリファイル(lib_ver1.0.txt)を作成する.

     echo "ver1.0の内容です" > lib_ver1.0.txt
    
  2. 大元のライブラリファイルに対してシンボリックリンク(lib.txt)を作成する.

     ln -s lib_ver1.0.txt lib.txt
    
  3. リンクにアクセスすると,大元のライブラリファイルにアクセスできることを確認する.

     cat lib.txt // "ver1.0の内容です"と表示される
    
  4. アップデートされたライブラリファイル(lib_ver1.1.txt)を作成する.

     echo "ver1.1の内容です" > lib_ver1.1.txt
    
  5. シンボリックリンクを更新する.古いリンクを削除し,新しいライブラリファイルに対して新しいシンボリックリンクを作成する.

     rm lib.txt
     ln -s lib_ver1.1.txt lib.txt
    
  6. リンクにアクセスすると,新しいライブラリファイルにアクセスできることを確認する.

     cat lib.txt // "ver1.1の内容です"と表示される
    

このように,ファイルパスを一貫させたままライブラリのバージョンを更新できる.

同じ役割のファイルの重複を防ぐ

想定シナリオとして,プロジェクトで共通の設定ファイルを複数の場所で使用する場合を考える.

共通の設定ファイル common-config.txt が /project/config/ ディレクトリにある.

プロジェクトの異なるサブプロジェクトでこの設定ファイルを使用したい場合,各サブプロジェクトのディレクトリにシンボリックリンクを作成する.

ln -s /project/config/common-config.txt /project/subproject1/config.txt
ln -s /project/config/common-config.txt /project/subproject2/config.txt

これにより,common-config.txt の内容を更新するとサブプロジェクトのディレクトリにあるリンク経由で自動的に反映され,ファイルの重複を避けることができる.