HOMELinux道場Linux道場入門編第8回 パスの概念

Linux道場入門編

第8回パスの概念

今回はパスについてのお話です。Linuxの操作の基本はCUIでのコマンド実行というお話を前回しましたが、コマンドの実行を学ぶためにはまず前提知識としてパスの概念を理解しておく必要があります。パスとは「場所、道筋、経路」などの意味合いがありますが、使われる場面によってパスの意味合いが微妙に異なることがあります。ここで述べるパスはコマンド実行やファイル操作を行うという場合のパスとなりますが、コマンド実行する際にこのパスの概念を理解していることが重要なポイントとなります。ここではコマンド実行を理解するために必要なパスの概念についてお話します。

Linuxのディレクトリ構造の考え方

まずパスの考え方を理解する前提として、Linuxのディレクトリ構造を理解しておく必要があります。
例えばWindowsであれば、ファイルエクスプローラなどでディスクの中身を見てみるとCドライブなどを頂点として、その中に各種フォルダ、ファイルが配置されている構造になっています。このようなドライブという概念を基点としてデータ管理をおこなうことをドライブレターと表現します。それに対してLinuxにはドライブという概念はなく、全てのデータをディレクトリという単位でまとめて管理しています。このディレクトリはツリー構造という形で複数のディレクトリがまとめられており、イメージとして以下のようになっています。

Linuxのディレクトリ構造の考え方

特に重要なのが階層構造のトップにあたるルートディレクトリです。ルートディレクトリは全てのディレクトリの頂点となる特別なディレクトリで、全てのディレクトリの親ディレクトリと表現することもできます。(それに対して親ディレクトリに連なるディレクトリは子ディレクトリとなります)表記としては「/」であらわされます。このルートディレクトリ以下に各種ディレクトリが連なっており、これによってLinuxの階層構造が構成されています。

  • ※ディレクトリは、Windowsのフォルダと似たものであると考えてもらえれば大丈夫かと思います。ここでは混乱を避けるためあえて詳細は説明しませんが、厳密にはフォルダとディレクトリは似て非なるものです。ただしこの違いを認識することは通常利用する上ではないので現段階では深く考えなくても問題ありません。

パスの考え方

そこでパスの考え方ですが、ここでいうパスとはLinuxが持つディレクトリ構造を使ってファイルやディレクトリの位置、または位置を指定する方法ということになります。コマンドであるファイルを開こうとした場合、ファイルの場所をコマンド入力する際に指定する必要があります。このファイルの場所指定を、パスを使うことによって行うわけです。例えばtest.txtというファイルを開こうとした場合、単にtest.txtという指定ではどこにある test.txtなのかわかりません。このため具体的な「どこにある」という指定をパスの記述で行うわけです。以下に具体的なパスを指定して test.txtの場所を指定してみます。

/usr/local/src/test.txt
これは「/」以下にある「usr」ディレクトリの下にある「local」ディレクトリの下にある「src」ディレクトリの下にあるtest.txtという意味になり、test.txtの具体的な場所を示していることになります。

パスの考え方

ディレクトリ名の間に出てくる「/」はパスの区切り文字でLinuxではディレクトリやファイルの区切りに必ず「/」をいれます。これは Windowsでは「\」で表記されるものです。ただしLinuxでは先頭の「/」と区切り文字の「/」は意味が異なります。先ほどお話したとおり、先頭の「/」はルートディレクトリを現しており、先頭の「/」と区切り文字の「/」は意味異なりますので注意が必要です。

  • ※このような区切り文字を「デリミタ」といいます。パスの指定の場合、このデリミタを日本語で「〜の」というふうに読み替えるとパスの読み方がわかりやすいかもしれません。

コマンド実行では、ファイルやディレクトリなどを操作する場合には具体的な場所を示す必要があります。GUIでのマウス操作ではアイコンなどでグラフィカルに場所が表現されているので、とくにこのような場所を示すことを意識せずにすむ場合もあります。しかしコマンド実行の場合、明示的な指定が求められるためパスを理解してディレクトリ構造の把握を頭の中で行えるようにしておく必要があります。

絶対パスと相対パス

先ほどの「/usr/local/src/test.txt」のようにパスとファイル名を記述する方法は、階層が深いと入力が長くなってしまうという煩雑さが出てきます。このパスの記述を短縮する方法があります。これが相対パス指定です。先ほどのルートディレクトリのパスの記述は絶対パス指定と呼ばれ、必ずルートディレクトリを先頭にしてパスの記述を行います。それに対して相対パス指定は、現在自分のいる場所から考えて場所の指定を行う方法です。現在自分のいる場所は「カレント」と表現され、このカレントが相対パス指定の場合重要になってきます。例えばカレントが「/usr/local/src」だったとすると、パスの指定は「./test.txt」ですんでしまいます。この指定の先頭についている「./」という記述はカレントをあらわす「.」とデリミタの「/」の組み合わせです。つまりこの指定は「現在の場所のtest.txt」という指定になり、「/usr/local/src /test.txt」という指定をしたことと等しくなります。

  • ※この「./」は省略可能であるため、「test.txt」と単に指定した場合には「./test.txt」と自動的に読み替えられます。

相対パス指定にはカレントをあらわす「.」ともう1つの指定があります。それが「..」です。これは1つ上の階層を指す指定で、カレントから考えて 1つ上のディレクトリを指定していることになります。例えばカレントが「/usr/local/src」で「../」と指定した場合は「/usr /local」を指定したことになります。これらの指定は組み合わせることも可能で、カレントが「/usr/local/src」で「./../..」と指定した場合は、カレントの1つ上の1つ上ということになり「/usr」を指定していることになります。相対パス指定と絶対パス指定は一長一短があるため、場合によって使い分けるということが必要です。

  • ※ちなみに「…」はありません・・・。

絶対パスと相対パス

相対パス指定はあくまでカレントが基準になるので現在の位置を把握してディレクトリ構造を考えながら指定する必要がありますが、パスの記述を短く済ませることができます。それに対して絶対パス指定は必ずルートディレクトリから始まる絶対的な位置指定であるためパスの記述が長くなる可能性はありますが、カレントを意識せずにパスの指定を行うことができます。

相対パス指定はあくまでカレントが基準になるので現在の位置を把握してディレクトリ構造を考えながら指定する必要がありますが、パスの記述を短く済ませることができます。それに対して絶対パス指定は必ずルートディレクトリから始まる絶対的な位置指定であるためパスの記述が長くなる可能性はありますが、カレントを意識せずにパスの指定を行うことができます。

パスの指定はコマンドを実行する様々な場面で利用します。このためコマンド実行を理解するにはこのパス指定の考え方を理解して、Linuxのディレクトリ構造を頭で思い描けるようになっておくとよいでしょう。

末永 貴一

コラム執筆/末永 貴一
株式会社エイチアイ研究開発部 部長

ヒューマンインターフェイスの研究開発、コンテンツの開発を行う株式会社エイチアイで次世代技術の研究開発を行う業務を担当している。 オープン系のシステム開発事業、教育事業を経て、自社独自の組込み機器向け3DリアルタイムレンダリングエンジンであるミドルウェアのMascotCapsuleを中心とした開発に従事した。数年前にLinuxを知ってからはサーバ構築、開発、教育、執筆などさまざまな場面で関わるようになり、現在では組込み開発でもLinuxを利用することもある。

このページのトップへ