Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

【Linux入門】lnコマンドでシンボリックリンク(ソフトリンク)を作成する方法

このチュートリアルでは、Linuxのlnコマンドを使用して、シンボリックリンク(通称「ソフトリンク」)を作成する方法を解説します。

WindowsからLinuxに移行してきた方であれば、「ショートカット」という概念はご存じでしょう。ショートカットとは、実データを一切含まず、アクセスしたい実際のファイルやフォルダへの参照(リンク)だけを保持するファイルのことです。

ショートカットが使われる理由はさまざまです。単に利便性のため(何重にもネストされたフォルダを毎回クリックして辿る手間を省く)だったり、出力先を振り替えるため(プログラムに出力先ディレクトリがハードコードされていて、実際には別の場所に保存したい)だったりします。

Linuxにおけるソフトリンク(シンボリックリンク)は、本質的に同じ目的を果たすものです。

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

  • ソフトリンク(シンボリックリンク/シムリンクとも呼ばれる)は、ファイルシステム上の別のファイルやフォルダの「場所」を参照します。
    • そのため、リンク先のファイルが削除されると、ソフトリンクは存在しないファイルを指すことになり、無意味な状態(壊れたリンク)になります。
    • ソフトリンクはあくまでリンク先の場所への参照にすぎないため、異なるファイルシステム間でも作成できます。
    • パーミッションはリンク元とリンク先で共有されません。
  • ハードリンクは、リンク元ファイルの「鏡像コピー」のようなもので、両者はストレージ上の同一データを参照します。
    • そのため、ハードリンクされたファイルを削除してもデータ自体は消えません。同じデータに対するもう一つの「ハードリンク」が、ファイルシステム上にファイルとして残り続けます。
      • ファイルシステムは、ディスク上のファイルがいくつの参照を持っているかをカウントしています。すべてのハードリンクが削除されると、このカウントは0になります。カウントが0になった時点で初めてファイルは削除され、データ領域は解放され、他のファイルの保存に使えるようになります。
    • 両者は同一データへの参照であるため、必ず同じファイルシステム上に存在しなければなりません。
    • パーミッションは共有されます。リンク元とリンク先は、ディスク上では同じファイルを2箇所から参照しているにすぎないからです。

基本構文

ln [OPTIONS] SOURCE_PATH LINK_PATH

ポイントは以下のとおりです。

  • SOURCE_PATHには、ファイルもフォルダも指定できます。
  • ソフトリンクはLINK_PATHの位置に作成されます。

主なオプション

lnコマンドには、以下のオプションを指定できます。

オプション 説明
-F 作成しようとしているリンク(link_name)が既に存在し、それがディレクトリである場合、リンクを作成できるようそのディレクトリを削除します。-Fオプションは-fまたは-iオプションと併用する必要があり、どちらも指定しない場合は-fが暗黙的に適用されます。-sオプションが指定されていない場合、-Fは何もしません。
-h link_nameまたはlink_dirnameがシンボリックリンクである場合、それを辿りません。-fオプションと組み合わせて、ディレクトリを指している可能性のあるシンボリックリンクを置き換える際に特に有用です。
-f 作成しようとしているリンク(link_name)が既に存在する場合、リンクを作成できるようにそのリンクを解除(unlink)します。(-fオプションは、以前に指定された-iオプションを上書きします。)
-i 作成しようとしているリンクが既に存在する場合、標準エラー出力に確認プロンプトを表示します。標準入力からの応答がyまたはYで始まる場合はリンクを解除してリンクを作成し、それ以外の場合はリンクを作成しません。(-iオプションは、以前に指定された-fオプションを上書きします。)
-n -hと同じ動作です。他のln実装との互換性のために用意されています。
-s シンボリックリンクを作成します。
-v 詳細表示モードになり、処理中のファイルを順次表示します。

これらのオプションおよびlnコマンドの詳細については、以下のコマンドでユーザーマニュアルを参照できます。

man ln

実行例

シンプルなシンボリックリンク(略してsymlink)の作成をデモしてみましょう。まず、テスト用のファイルを作成します。

touch test_file.txt

次に、このファイルへのソフトリンクを作成します。

ln -s test_file.txt link_to_test_file

リンクが正しく作成されたかどうかは、次のコマンドで確認できます。

ls -l

出力は以下のようになります。

-rw-r--r--  1 user  staff        0  2 Jan 01:31 test_file.txt
lrwxr-xr-x  1 user  staff        9  2 Jan 01:32 link_to_test_file -> test_file.txt

出力の見方を解説します。

  • 先頭の列の文字は、ファイルやフォルダの種類およびパーミッションを表しています。
  • その次の数字は、含まれるファイル数(リンク数)です。
  • user/staffは、そのファイルやフォルダへのアクセス権を持つユーザー/グループです。
  • 続いて、ファイルサイズ、更新日時、名前が表示されます。
  • 行頭のlに注目してください。これは「リンク」であることを示しています。
  • さらに、行末の->の部分を見ると、このファイルがtest_file.txtにリンクされていることがわかります。
  • つまり、これが確かにリンクであることが確認できました。

まとめ

多くのシステムにログインすると、まずユーザーのホームディレクトリに移動します。そこで毎回長いパスを打ち込む代わりに、その日に作業したいディレクトリ(たとえば、デプロイ中のWebアプリのファイルが置かれているディレクトリなど)へのソフトリンクを最初に作っておくのがおすすめです。そうすれば、作業ディレクトリに戻りたいときに、いちいちフルパスを入力する必要がなくなります。

このように、シンボリックリンクは日常的な操作をぐっと楽にしてくれる、非常に便利な機能です。

Linuxを始めたばかりの方は、ぜひ実際にコマンドを打ちながら覚えていきましょう。

  1. Linux lnコマンド徹底解説 – Linuxでシンボリックリンクを作成する方法【Bashコマンド例】

    シンボリックリンク(symlink)とは、Linux上で他のファイルやディレクトリ(フォルダ)を指し示すファイルの一種です。シンボリックリンクは、コマンドラインで ln コマンドを使用することで簡単に作成できます。シンボリックリンクは、ファイルやディレクトリへのショートカットとして機能するため、日々の作業で非常に役立ちます。この記事では、ln コマンドを使ってファイルやディレクトリへのシンボリックリンクを作成する方法を、具体例とともに解説します。Linuxにおけるソフトリンクとハードリンクの違いとは?ソフトリンク(シンボリックリンク)は、システム上の元ファイルを指し示します。一方、ハードリンク

  2. Linuxのwatchコマンドの使い方と実用例をわかりやすく解説

    Linuxのwatchコマンドは、指定したコマンドを一定間隔で繰り返し実行し、その結果を画面に表示し続けるためのツールです。コマンドの出力が時間とともにどう変化するかをリアルタイムで監視したい場合に非常に便利です。この記事では、watchコマンドの基本的な使い方と、覚えておくと役立つ実用的な例を紹介します。 watchコマンドの基本構文 watchコマンドの構文は以下のとおりです。 watch オプション コマンド 各要素の意味は次のとおりです。 オプション: 後述の表から選択したオプションを指定します。watchコマンドのデフォルト動作を変更できます。 コマンド: watchが繰り返し実行