May 10, 2017 – 5 min read

Hello there again.K.

Hello there again.K.

では、ハードリンクとは何か、シェルで何をするのか。

ハードリンクは、Linux や他の Unix 系 OS では既存のファイルに対する追加の名前にすぎません。 ハード リンクは、他のハード リンクに作成することもできます。 しかし、ディレクトリに対して作成することはできず、ファイルシステムの境界を越えたり、パーティションにまたがることはできません。

おそらくハードリンクの最も有用なアプリケーションは、ファイル、プログラム、およびスクリプト (つまり短いプログラム) を、元のファイルまたは実行ファイル (つまりプログラムの実行可能バージョン) から別のディレクトリに容易にアクセスできるようにすることです。 ハードリンクの名前を入力すると、元の名前を使用した場合と同じように、プログラムやスクリプトが実行されます。 (http://www.linfo.org/hard_link.html)

この話を後で読みたいですか? Journal.

では、この定義の本当の意味は何でしょうか。 ln file_name hardlink というコマンドを使用すると、既存のファイルへのハード リンクを作成することができます。 以下に、実際にハード リンクを作成する例を示します。 以下の例では、hlink1.8384>

Now lets ls -i とあるファイルへのショートカット、ハードリンクというものを作りました。 これは inode.

INODE 定義を持つすべてのファイルを一覧表示するようにします。 inode は Unix 系ファイルシステムにおけるデータ構造で、 ファイルやディレクトリのようなファイルシステムオブジェクトを記述するものである。 各inodeには、オブジェクトのデータの属性とディスクブロックの位置が格納される。 ファイルシステムオブジェクトの属性は、所有者とパーミッションデータと同様に、メタデータ (最終変更時刻、アクセス時刻、修正時刻) を含むかもしれません。 ディレクトリは、それ自身、その親、およびその子のそれぞれのためのエントリを含んでいます。 (https://en.wikipedia.org/wiki/Inode)

file1とhlink1を見てみると、左側のinodeは同じであることがわかるでしょう。 本質的に、ハードリンクはハードリンクされたファイルへのショートカットとして機能します。

次に「ソフト リンク」に移ります。 ハード リンクとは異なり、シンボリック リンクにはターゲット ファイルのデータは含まれません。 それは単に、ファイル システムのどこかにある別のエントリを指すだけです。 この違いにより、シンボリックリンクには、ディレクトリや、NFSを介してネットワーク接続されたリモートコンピュータ上のファイルへのリンクなど、ハードリンクにはない特質があります。 また、対象のファイルを削除すると、そのファイルへのシンボリックリンクは使用できなくなりますが、ハードリンクではファイルの内容が保持されます。 (https://kb.iu.edu/d/abbe)

それでは、上で作成したハードリンクと比較するために、ソフトリンクを作成してみましょう

それでは、ターミナルを開いてみましょう。 ファインダーか検索でターミナルと入力すると、ポップアップで表示されるはずですので、それをクリックして開きます。 touch example1 と入力し、エンターキーを押します。 ファイルを作成することができます。

ここで、シェルに ln -s example1 softlink1 と入力すると、ファイル間のソフトリンクが作成されます。 下の例を見てください。

softlink

ここでls -iと入力してみると、ハードリンクファイルだけがハードリンクと同じinodeを持っており、ソフトリンクファイルには異なるinodeを持っているということにも気がつくと思います。

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

ソフトリンクにはターゲットファイル内のデータは含まれない。

ソフト リンクは、ファイル システムのどこかの別のエントリを指します。

ソフト リンクには、ディレクトリ、または NFS を介してネットワーク接続されたリモート コンピューターのファイルにリンクする機能があります。

ハードリンクはファイルの内容を保持します。

ハードリンクはディレクトリに対して作成できず、ファイルシステムの境界を越えたり、パーティションをまたいだりすることはできません。

要するに、

「ファイル システムの下では、ファイルは inode によって表される」

ファイル システム内のファイルは基本的に inode へのリンクです。 inode へのすべてのリンクが削除されたときのみ、inode は削除されます (または削除可能/上書き可能)。 inode 上のデータへの変更は、その inode を参照するすべてのファイルに反映されます。

注意: ハードリンクは同じファイル システム内でのみ有効です。 シンボリックリンクは単に別のファイルの名前であるため、ファイルシステムをまたぐことができます」

(http://stackoverflow.com/questions/185899/what-is-the-difference-between-a-symbolic-link-and-a-hard-link)

シェルとコマンド実行方法の検討

  • シェルはファイル、文字列、ユーザーのターミナルから入力を読みます」
  • 入力はクォート規則に従って単語と演算子に分割されます。 これらのトークンはメタキャラクタによって区切られる。
  • シェルはトークンを単純および複合コマンドに解析 (分析および置換) します。
  • シェルはさまざまなシェル展開を行い、展開されたトークンをファイル名とコマンドおよび引数のリストに分割します。
  • 必要に応じてリダイレクションを行い、リダイレクション演算子とそのオペランドを引数リストから削除します。
  • コマンドを実行します。
  • オプションとして、シェルはコマンドが完了するのを待ち、終了ステータスを収集する。

コメントを残す

メールアドレスが公開されることはありません。