OS や開発言語の〇〇PATHって何よ? ②コマンドサーチパス登場


前回のお話

  • コンピュータは融通が利かない
  • コンピュータの操作の対象、やることは常に一つ!!「真〇は常に一つ!!」
  • 名前空間は超便利
  • ディレクトリ、フォルダも名前空間の側面をもつ

PATHのお話

さて、ディレクトリ、フォルダも名前空間のエッセンスを持っていることを理解したところで、今回はOSがどうやって、コマンドを呼び出すのか。という話に移っていきます。

前提の環境

No. 前提事項 備考
1. Operating System Posix系 OS

いったん、話を見通しやすいようにPosix系 OSを前提にお話してきますが、Window考え方は同じです。

プログラムの実行

では、「python」を例に、プログラムを実行してみましょう。

> python

さて、前回のお話によって、ディレクトリは「名前スペース」として働き、同名のファイルを可能となりました。これはとても良いことに思えます。さて、このコマンドは正しく実行されるでしょうか?

課題

さて、コマンドを実行する前に、ディレクトリで名前スペースを分けることの「課題」をお話しますプログラムただのファイルですから、前述の通り、ディレクトリさへ違っていれば、同名のプログラムを保持することは可能です。たとえば下図のように、3つのPythonファイルがシステム上に存在するとします。すると、一つの問題が生じます。 単純にpythonと呼び出しても、OSからは「どのpythonを実行していいのかわからない」 のです。 また単にpythonといわれも、コンピュータはpythonを自分で探すことができないのです。

解決策

さて、この問題を解決するには、 プログラムを格納場所込みの、「場所」+「名前」 で呼べばいいのです。図ではそれぞれ


$ /usr/bin/python
$ /usr/lib/python/bin/python
$ /home/shupe/python/bin/pytyon

いずれかで明示的に実行します。これなら、1つに特定できるからです。(コンピュータはなんでも疑いの余地なく、解釈が1つになるようにしてあげなければいけません。)
また、このように名前区間+名前として対象を指定する場合、一般には フルパス と呼ばれます。PATHは「通り道」ぐらいの意味で、文字通り、対象に到達するまでの「通り道」を表します。また、この対象の場所+対象の名前は、FQDN と言われることもあるので、「おんなじことだな」と理解すればよいです。

無事、目的のプログラムを呼び出せるようになりました。ただ、この方法だと常にファイルシステム上のフルパスを使って呼び出す必要があります。これは以下の点で非効率です。

  • 常に長いプログラム名を覚えて使いまわなくてはいけない
  • 環境によってフルパスは変わるので(バージョン情報とかパスに持ってたり)、プログラムの中からプログラムを呼びだすような場合の「可搬性」が悪化する。

二点目が特に重要です。たとえばこういうケースです。

#!/bin/bash

/usr/lib/python/bin/python <python プログラム>

この/usr/lib/python/bin/pythonは環境によって変化します。どこか別のパソコンに持っていくたびに、このフルパスは書き直さなければいけません。しかもプログラムの中からプログラムを呼ぶのは、割と普通にあって、このままだと、利用するPC毎にプログラムを大量に書き換える必要が出てきます。 大問題です。この問題を解決するのに導入されたのがコマンドサーチパスです。いわゆるPATHのことです。いよいよコマンドサーチパスが登場しましたが、長くなるのでここまでとします。次回はコマンドサーチパスと、組み立てパスの話をしたいと思います。

まとめ

  • プログラムを実行する場合、疑いの余地なく一意に決まる方法=フルパス/FQDNで呼ぶ必要があるよ。
  • フルパスでの呼び方は、可搬性に劣るので、そのままだと問題ありありだよ。
  • そこで、コマンドサーチパスの概念を導入するよ。