
81.パスの通ったディレクトリ補足
ナックス「今回はコマンドをバックグラウンドで実行する方法を教えようと思っていたのですが……」
デビー君「ですが?」
ナックス「教えようと思ったら意外と教えるのが難しくてですね。教えるのをあきらめました」
ナックス「はっはっはっは」
ナックス「どんまい」
デビー君「自分で言うんだ……」
ナックス「というわけで、今回は『パスの通ったディレクトリ』の補足をしようと思う」
デビー君「補足?」
ナックス「うん。今までの解説を見直すと、あたかもC言語のプログラムで作成した実効可能ファイルしかパスの通ったディレクトリに置いて実行できない、みたいな教え方をしてしまっているけど、パスの通ったディレクトリは実行可能なファイルさえ置けば何でも動くから別にC言語じゃなくても良いんだ」
デビー君「あ、そうなの?」
ナックス「うん。PHPだろうがRubyだろうがPerlだろうがPythonだろうがC++だろうがなんだっていいんだ。シェルスクリプトもオッケーだ」
デビー君「え!シェルスクリプトも良いんだ!?」
ナックス「うん。というわけで、79.パスの通ったディレクトリを作成するを参考にパスの通ったディレクトリを作成して、中に以下のシェルスクリプトを作成してもらえますか?」
- ファイル名[heyheyhey.sh]
#!/bin/sh ls
ナックス「ファイル名はheyheyhey.shというファイル名にしてね。これは、実行するとlsコマンドを実行するという画期的なスクリプト!!」
デビー君「すごい!普通にlsコマンドを使ったほうが早いのに、わざわざシェルスクリプトにしてる!」
ナックス「chmodコマンドで実行権限をつけてね」
$ chmod u+x heyheyhey.sh
ナックス「パスの通ったディレクトリにちゃんとheyheyhey.shを配置した状態になってることを確認したら、どこか適当な場所でheyheyhey.shを実行してみてね」
$ heyheyhey.sh
デビー君「おー。ちゃんとlsコマンドの機能が実行されるね」
ナックス「そうです。パスの通ったディレクトリは、実行可能なファイルであれば、C言語に限らず何でも実行できる、って覚えておいてね」
デビー君「はーい」
ナックス「次回、し」
デビー君「え!?今日これだけ!?」
ナックス「え?」
デビー君「手抜き……」
ナックス「……補足その2!!」
ナックス「前々から、『拡張子は人間がみてわかりやすいためにつけるんだよ』っていう話をしています」
デビー君「かくちょうし……ってなんだっけ?」
ナックス「ファイル名の後ろにつける、.txtとか.cとか。今回のシェルスクリプトの場合は.shですね」
デビー君「あー!あれね!」
ナックス「これに関して、ピンときていない人もいるかもしれないので、今回作成したシェルスクリプトのファイル名をheyheyhey.shからheyheyheyに変更してください」
$ mv heyheyhey.sh heyheyhey
デビー君「え!拡張子を取り除いちゃうんだ!?」
ナックス「はい。で、どこか適当な場所でheyheyheyを実行してください」
$ heyheyhey
デビー君「ん?問題なくlsコマンドの機能が実行されるよ?」
ナックス「そうなんです。実はLinuxでは、拡張子は無くても問題なくプログラムは動くんです。今までの解説で拡張子をファイル名につけて基本的に解説してきましたが、あれら全ては、拡張子をつけなくても、実は問題ないんです!」
デビー君「マジか!」
ナックス「でも、たとえば今回のファイル名heyheyheyで拡張子が存在しないファイルの場合、パッと見、シェルスクリプトなのかC言語で作成した実行可能ファイルなのかが、私達人間には分からないじゃないですか?」
デビー君「うん、分からない」
ナックス「なので、私達人間がパッと見で分かるように、基本的には拡張子はつけてね、って話です」
デビー君「はーい(私達人間って言ってるけど、ナックスは人間じゃなくてペンギンじゃないかな……?)」
ナックス「あ、今回作成したheyheyheyスクリプトは、今回の解説のためだけに作成したので、不要なようであれば削除してしまっていいですよー」
デビー君「はーい」
--- 以下、2018/1/14追記 ---
ナックス「補足その3!!」
ナックス「実は、whichコマンドを使用することで、コマンドの本体(実行可能ファイル)が実際はどこにあるかを知ることが出来ます」
ナックス「例えば以下のようにzipコマンドに対してwhichコマンドを使用すると……」
$ which zip
ナックス「以下のように実行可能ファイルの場所が表示されるし」
/usr/bin/zip
ナックス「以下のようにdiffコマンドに対してwhichコマンドを使用すると……」
$ which diff
ナックス「以下のように実行可能ファイルの場所が表示されます」
/usr/bin/diff
デビー君「なるほど」
ナックス「ちなみに、Linuxディストリビューションによってはwhichコマンドが最初はインストールされていない場合があります。whichコマンドを試して『そんなコマンド無いよ』みたいなエラーが出たら、Synapicなりaptコマンドなりyumコマンドなりを使用すればwhichコマンドをインストールできます」
デビー君「了解です」
ナックス「次回、C言語の基本!!……の前に、ハッカーの三大美徳の話!!(82.ハッカーの3大美徳)」