LoginSignup
8
6

More than 1 year has passed since last update.

リンク(ln)とシェルスクリプト(.sh)を使った自作コマンドの作り方について

Last updated at Posted at 2016-11-02

はじめに

 自分で作ったシェルスクリプト(.sh)をコマンドにする方法をまとめたものです。

リンク(ln)について

 lnは、任意のファイルもしくはディレクトリ(以下、ターゲットと呼称)と紐づいた、特殊なファイルを作るコマンドのことです。lnではハード・リンクとシンボリック・リンクの2種類のファイルを作成することができ、それぞれに違った特徴があります。

ハード・リンク

 lnにオプションを付けなかった場合に作成されるリンクです。ターゲットにはファイルのみが指定でき、ディレクトリを指定することはできません。ハード・リンクは、いわゆるコピーに似た振る舞いをするため、ターゲットが消えてしまってもデータを参照、実行することが可能です。しかし、厳密には、ターゲットと同じiノード(ポインタやサイズ、作成日時などを含むデータ)を参照しているだけで、実態となるデータを複製しているわけではないため、ディスク容量はほとんど増加しません。ちなみに、#ls -lからターゲットを特定することはできません。

シンボリックリンク・リンク

 lnにオプションとして-sを付けると作成されるリンクです。ターゲットにはファイルとディレクトリの両方が指定できます。シンボリックリンク・リンクは、ターゲット自体を参照する0バイトのリンクを作るため、ターゲットが消えるとリンクは働かなくなります。いわゆるショートカットを作っているとお考え下さい。ターゲットは#ls -lコマンドから特定できます。

自作コマンドを作ってみる

 以上のことを踏まえて簡単に自作コマンドを作ってみます。自作コマンドを作るにあたってはシェルスクリプト(.sh)を使用しますので、シェルスクリプトの詳細については別途参照してください。

まずは、ターゲットとなるスクリプトを# vim ~/target.shでホームディレクトリに作ります。

~/target.sh
#!/bin/sh
echo "Hello World"

# sh ~/target.shで動作することを確認してください。

次にshを省いても動作するように# sudo chmod a+x ~/target.shで実行権限を与えます。
これで# ~/target.shで動作するようになっていると思います(相対パスでは動作しません)。

ここまで来たら自作コマンドはほぼて出来ている状態なので、あとはどこからでもこのコマンドを利用できるように、パスの通ったディレクトリにlnでターゲットのリンクを作成します。今回はハード・リンクとシンボリック・リンクの違いを検証できるように両方作ってみます。

# sudo ln ~/target.sh /usr/local/bin/hard
# sudo ln -s ~/target.sh /usr/local/bin/symbolic

# hard# symbolicで自作コマンドを試してみて下さい。Hello Worldが出力されると思います。

最後に# rm ~/target.shでターゲットを消してみます。
もう一度# hard# symbolicで自作コマンドを試してみて下さい。シンボリック・リンクが動作しなくなったことが確認できると思います。

8
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6