【初心者でもわかる】Linuxでのリンクファイルの作成方法と使い方

リンクファイル
  • このエントリーをはてなブックマークに追加
  • Pocket

LinuxのリンクファイルとはWindowsでいうところのショートカットだ。ショートカットキーではなく、デスクトップに置かれるようなファイルやフォルダへのショートカットがそれに当たる。

このページではLinuxでのリンクファイルの作成方法と使い方についてお伝えした。

リンクファイルを作成する意味

「リンク」を使用すると深い階層にあるファイルへのパスを短くしたり、特定の場所にリンクを設置することで、あたかも実態がそこにあるかのように振る舞うことが出来る。

例えば実態の実行ファイルをパスの通っていない場所に設置して、リンクをパスの通った場所に設置することでリンクをとおしてファイルを実行できるようになる。

要するに諸々の作業時間を減らしたり、わかりやすくすることができるということだ。

作業時間を減らすという意味では下記ページも参考になるし、下記でもリンクファイルの作成方法を簡単に説明している。このページよりもざっくり説明しているので、早く知りたい方はこちらを参考に。

Windowsでは「ショートカット」といわれるが、Linuxではリンクの種類が二つある「ハードリンク」と「シンボリックリンク」である。

ハードリンクに最初は戸惑うかもしれないが、さほど難しい概念ではないので安心していただきたい。

inodeのお話

ハードリンクやシンボリックリンクの話をする前にファイルの実態に関わる「inode」について話をしよう。

Linuxでファイルを作成すると、自動的にユニークな「inode番号」という番号が割り振られる。全てのファイルにinode番号が割り当てられることになっており、inodeはファイルの実態と強く結びついている。

またinodeにはファイルの「各属性情報」が収納されており、具体的には

  • ファイル種別
  • ファイルサイズ
  • アクセス権
  • 所有者情報
  • リンク
  • ブロック番号

などが納められている。

ハードリンク

ハードリンクを理解するときに重要なのは、「ファイル名はラベル」ということだ。ひとつのinodeにたいして複数のファイル名を割り振ることが可能になっている。

ハードリンクがまさにそれだ。ハードリンクはinodeに複数のファイル名つまりラベルを貼りつける作業となる。

ハードリンク

名前や場所が違うファイルが実際には同じものを見ているイメージだ。

ファイルそのものを見るため、ファイルシステムに強く関係している。そのため、異なるファイルシステムやパーティションへのハードリンクはできない。

また、inodeの番号を参照するため、元のファイルを移動させてもリンクがデットリンクになることがない。

特徴

  • inodeを参照する
  • パーティションをまたげない(inodeの関係上)
  • 異なるファイルシステム上ではリンクを作成できない(inodeの関係上)
  • ディレクトリのハードリンクは作成できない
  • 元ファイルを移動しても大丈夫

シンボリックリンク

Linuxに限らずパソコン上で一般的にリンクというと「シンボリックリンク」を指すことが多いだろう。こっちが、Windows用語でいうならば「ショートカット」となる。

ただ、置き場を見にくだけのリンクだ。

シンボリックリンク

パスでの参照となるのでinodeに依存しておらず、OSが認識しているファイルシステムならパーティションや異なるファイルシステムであっても問題なくリンクを作成できる。

lsなどで見ると、シンボリックリンクもファイルのように見える。

元ファイルを移動や削除するとデットリンクになる。ハードリンクよりもソフト的であり比較的に柔軟だ。

他のファイルシステムなどにリンクを貼っても動く。

特徴

  • パスでファイルやディレクトリを参照(リンク元のポインタとして動作する)
  • 別のファイルシステムでも問題なく動作する
  • ディレクトリに対しても有効
  • 元ファイルを移動するとデットリンクになる
  • 元ファイルを削除するとデットリンクになる

lnコマンドで実際に操作してみる

ハードリンクを実験する

では実際にlnコマンドでリンクを作成してみよう。とりあえず実験するためにディレクトリとファイルを用意しよう

$ mkdir -p testdir/mydir

$ touch testdir/mydir/testfile1.txt

$ echo test > testdir/mydir/testfile1.txt

$ cd testdir

準備はこのくらいで大丈夫だろう。いよいよlnコマンドを使用してみる

$ ln mydir/testfile1.txt ./test-hard-link

ハードリンクの作業は以上で終了だ。

ためしに

$ cat test-hard-link

としてみるとtestfile1.txtと内容が同じになっているはずだ。無事にリンクを作成できている。

さて次はinodeを確認してみよう

$ ls -il test-hard-link mydir/testfile1.txt

カラム1がinode番号であり、同じものをしめしているのがわかる。

ここで元のファイルtestfile1.txtの場所を変更してみよう

$ mv mydir/testfile1.txt .

この状態で

$ cat test-hard-link

としてみよう。問題なく参照できるはずだ。

ハードリンクはinode番号(今回の例では145717)が判断基準となりファイル名が増えるだけなので、どこに移動させてもリンクの状態はたもたれる。

ちなみにカラム3がinode番号に対してリンクされている数をしめしている。通常では実態ファイルを削除したい場合、ハードリンクをすべて削除すると実態も削除される。つまり現状

$ rm testfile1.txt

$ cat test-hard-link

としても実態はなくならないのである。inodeを基準にファイルが開かれるはずだ。

シンボリックリンクを実験する。

ハードリンクの次はシンボリックリンクを実験してみよう

まずは先程とおなじく適当にディレクトリやファイルを作成

$ mkdir -p stestdir/smydir

$ touch stestdir/smydir/stestfile1.txt

$ echo test > stestdir/smydir/stestfile1.txt

$ cd stestdir

この状態で

$ ln -s smydir/stestfile1.txt ./test-link

として

$ ls -lah

とすると

リンクがはられているのがわかる。

この状態で元ファイルの場所を変えてみよう

$ mv smydir/stestfile1.txt .

この状態で

$ cat test-link

としてみるとファイルが参照できなくなる。

シンボリックリンクはファイル名とパスに依存している。そのため名前が変わったり、場所が変更されると参照できなくなるので注意しよう。またシンボリックリンクを削除するときはrmコマンドを使用するよりも「unlink」コマンドを使用した方が安全だ。

$ unlink test-link

まとめ

このページではLinuxのリンクファイルの作成方法などについてまとめてご紹介してきた。

特にシンボリックリンクはシステム動作にも不可欠なものになっている。よく出てくるので、使い方含めマスターしてしまおう。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメントを残す

*