スポンサードリンク
こんにちは! ももやまです!
今回はプログラミングを学んでいる人は知らない人はいないであろうUnix (MacOS, Linux(Ubuntu, CentOS))、Windowsのファイルシステムについて、絶対パス・相対パスの違いを説明したいと思います。
前回の計算機システムの記事はこちら!
目次
スポンサードリンク
1.ファイル・ディレクトリ
まずはファイルとディレクトリの違いについて説明していきます。
(1) ファイル
ファイルを簡単に言うと書類です。
皆さん普段いろんなデータをPCに保存していますよね。
例えば、PDF、画像ファイル(.jpg,.png)、Wordで書いた企画書、レポート、Excelデータ、プレゼンファイル(.pptx)、テキストファイル(.txt)、他にもいろいろあります。
これらPC上で扱えるすべてのデータはファイルです。
(2) ディレクトリ(フォルダ)
ディレクトリを簡単に言うと、クリアファイルみたいな入れ物です。
皆さんは家や仕事場の机の周りはもちろん整理整頓しますよね。
しない人はする努力してください…
整理整頓をしないとどこに何があるのかがわからなくなるように、ファイルが増えてくるとどのファイルがどこにあるか全くわからなくなりますよね…
そこで、関連するファイルをテーマやカテゴリーごとにグループ分けして整理整頓したくなりますよね。
Unixにおいてファイルをグループ分けするものをディレクトリと呼びます。ディレクトリに関連するファイルごとに分けて入れることができます。
ディレクトリの中がごちゃごちゃしてきたらディレクトリの中にさらにディレクトリを入れて整理整頓することができます。
スポンサードリンク
2.絶対パス・相対パスってなに?
ファイルの場所を表す方法には絶対パス・相対パスの2つがあります。2つの違いについて説明していきましょう。
1で説明したファイルやディレクトリが下の図のようになっているとします。今回の説明ではこれを使います。
(1) 絶対パス
絶対パスは、ルートディレクトリ(始点)からの対象(目的地)までの経路を表します。
分かりやすく言うと住所と同じです。「福岡県北九州市戸畑区仙水町…」
ルートディレクトリとは、一番上位のディレクトリ、つまり出発点をあらわします。住所で例えると「日本」となります。
例えば、ramen.jpg というファイルの場所を絶対パスで表すとどうなるでしょうか。
ramen.jpg は fukuoka というディレクトリの中に入っていますよね。なので、この場合の絶対パス は
となります。相対パスでも同じなのですが、UnixOSの場合ディレクトリやファイル名は / (スラッシュ)で区切っていきます(Windowsの場合は \ で区切る、コマンドプロンプト(Windows版ターミナル)でコマンドを入力するときは / (スラッシュ)でもOK)。
もう1つ例を出してみましょう。今度は takoyaki.jpg を探してみましょう。
takoyaki.jpg は osaka というディレクトリの中の kita ディレクトリの中に入っていますね。なので絶対パスは、
となります。
(2) 相対パス
ディレクトリ構造が複雑になると絶対パスを入力するだけでかなりめんどくさいですよね。近くのファミレス行くときに「今日さ、京都府京都市左京区田中門前町にあるサイゼリアに行かね?」なんて絶対に言いませんよね。「サイゼリア行かね?」で通じますよね。
相対パスは、カレントディレクトリ(現在地点)から対象(目的地)までの経路を表します。
カレントディレクトリは名前の通り、現在いる場所を表します。
相対パスでのみ使用される*12つのコマンド(?)を紹介します
その1:"." カレントディレクトリを表す
その2:".." 1つ前のディレクトリを表す
今回はカレントディレクトリを usagi (/fukuoka/tobata/usagi) としましょう。
例えば usagi の中にある unsei.pdf を相対パスで表すとどうなるでしょうか。
usagi ディレクトリから見れば、unsei.pdf はディレクトリを一切経由せずにたどりつけますよね。なので、相対パスは、
となります。
カレントディレクトリの (./) は基本的に省略OK*2なので
と表されることが多いです。
今度は takajo.jpg というファイルを相対パスを使って表してみましょう。
カレントディレクトリは先程と同じ usagi とします。
今回は、カレントディレクトリから1つ戻ってtobataの中のguntieディレクトリの中にtakajo.jpg がありますよね。なので相対パスは、
となります。
たまに現在いる場所の住所が知りたくなったりするときってありますよね。Unixでは現在いる場所の絶対パスを表示させるコマンドがあります。絶対パスを知りたい人は次のコマンドを打ち込んでください、
すると絶対パスが表示されます。(Windowsの場合はcdと入力)
起動時に設定されるカレントディレクトリはホームディレクトリと呼びます。自宅みたいなもんです。
一般利用者にとってはホームディレクトリが一番最上位のディレクトリとなります。
スポンサードリンク
3.絶対パス・相対パスの長所短所
絶対パス・相対パスにはそれぞれ長所、短所があります。それでは説明していきましょう。
(a) 絶対パスが優れている点
(1) 誰が見ても絶対パスは変わらない
住所って自分がいる場所が北海道だろうが沖縄だろうが変わりませんよね。
絶対パスも同じようにファイル自体を動かさない限りはカレントディレクトリの場所によって変化しません。
なので他の人に場所を教えるときは絶対パスを使用します。
(b) 相対パスが優れている点
(1) 近い場所ならとにかく短い
上のほうで書きましたが、近くの場所を示すときに住所は使いませんよね。「京都府京都市左京区……の桃山の家で遊ぼうぜ!」なんて言わずに「桃山の家で遊ぼうぜ!」と言いますよね。カレントディレクトリが usagi の unsei.pdf のパスは、
絶対パス:/fukuoka/tobata/usagi/unsei.pdf
相対パス:unsei.pdf
長さが全然違いますよね。いちいち絶対パスを打ち込みたくありませんよね。しかし、相対パスのときが長くなってしまうときがあります。
例えば先程と同じくカレントディレクトリが usagi とし、 hiroshima というディレクトリのなかの miyajima.jpg までのパスは、
絶対パス:/hiroshima/miyajima.jpg
相対パス:../../../hiroshima/miyajima.jpg
となります。相対パスの場合、3回もディレクトリを戻らなければいけないため、../ というのを3回も書かなければならず大変です。
(2) お引越しをしても相対パスは変わらない
例えば usagi ディレクトリ(/fukuoka/tobata/usagi の中)を osaka ディレクトリの中に丸ごと移動させることを想定してみましょう。
カレントディレクトリをusagiとしたときのusagiフォルダの中にあるunsei.pdf までのパスは、
移動前絶対パス:/fukuoka/tobata/usagi/unsei.pdf
移動後絶対パス:/osaka/usagi/unsei.pdf
相対パス:unsei.pdf
このように、移動前後で絶対パスは変わっていますが相対パスは変わっていませんよね。*3
usagiディレクトリ内にあるプログラムで、usagiディレクトリの中にあるファイルの場所を絶対パスで指定した場合は、すべて書き換えないといけないのですが相対パスだとそのままでOKなのでかなり楽です。
4.ワイルドカード
ファイルを指定するときに名前がわからない…、とか複数のファイルを指定したい、っていうときがありますよね。そのときに便利なのが2つのワイルドカードです。
(1) ?
この文字を使うと ? 1文字を任意の1文字とすることができます。例えば、
のようにできます。上のコマンドは、「fukuokaディレクトリの中にある3文字 + .jpg」となるファイルすべてを表します。例えば、abc.jpg、def.jpg などは当てはまりますが、hakata.jpgのように???.jpgに当てはまらないファイルは該当しません。
下のコマンドは、「mizukiディレクトリの中にあるkadai + 2文字 . txt」となるファイルすべてを表します。この場合は、kadai01.txt、kadai13.txtなどは該当しますが、kadai1.txt のようなファイルは kadai??.txt に当てはまらないので該当しません。
(2) *
この文字は、?と違って、すべての文字とすることができます。
例えば、
みたいに打つことができます。このとき、上からコマンドの説明をすると
上:/fukuoka/iizuka/sen/ex*/jpg
senディレクトリの中にあるexで始まり、.jpgで終わるファイルすべてを表します。例えば、ex1.jpg、ex2.jpg、ex200.jpgなど、exで始まり.jpgで終わるファイルすべてに該当します。
中:/hrioshima/*carp.jpg
carpディレクトリにある carp.jpg で終わるファイルすべてを表します。例えば、hiroshimacarp.jpg、hirocarp.jpg、114carp.jpg などが該当します。
下:/fukuoka/tobata/usagi/*
usagiディレクトリにあるすべてのファイルを表します。このように * 単体で打つとすべてのファイルやディレクトリを表すことができます。
個人的意見なのですが、? より * のほうを使う機会が多いように感じます…
4.練習問題
では、絶対パスと相対パスに慣れてもらうために何問か練習をしてもらいましょう。
練習1~練習4はITパスポート・基本情報の過去問、練習5はUnixコマンドを用いた応用問題となっています。
練習1
UNIXの階層的ファイルシステムにおいて、アカウントをもつ一般の利用者がファイルの保存などに使う階層で最上位のものはどれか。
[基本情報技術者平成22年春期 午前問21]ア:カレントディレクトリ
イ:デスクトップディレクトリ
ウ:ホームディレクトリ
エ:ルートディレクトリ
練習2
ファイルシステムの絶対パス名を説明したものはどれか。
[基本情報技術者平成26年秋期 午前問19]ア:あるディレクトリから対象ファイルに至る幾つかのパス名のうち,最短のパス名
イ:カレントディレクトリから対象ファイルに至るパス名
ウ:ホームディレクトリから対象ファイルに至るパス名
エ:ルートディレクトリから対象ファイルに至るパス名
練習3
図に示す階層構造において、カレントディレクトリが*印のディレクトリであるとき,相対パス指定で ../../B/B によって指定したディレクトリと同じディレクトリを絶対パス指定したものはどれか。
[ITパスポート平成26年春期 問68]ア:¥A¥B¥B
イ:¥B
ウ:¥B¥B
エ:¥B¥B¥B
練習4
絶対パス名 /a/a/b/c を持つディレクトリがカレントディレクトリであるとき、相対パス ./../../a/b/file をもつファイルを絶対パス名で表現したものはどれか。
[基本情報技術者平成21年春期 午前問21]ア:/a/b/file
イ:/a/a/b/file
ウ:/a/a/a/b/file
エ:/a/a/b/a/b/file
練習5 応用 Unixコマンドと絶対パス・相対パス
カレントディレクトリは、fukuoka とします。つぎの(1)~(7)の指示に合うようなコマンドを書きなさい。
ただし、ファイルの位置は以下のように与えられる。
(1) tokyoディレクトリの中にあるtmp.txtの中身を表示するコマンドを絶対パスで入力しなさい。
(2) iizukaディレクトリの中身を確認するコマンドを相対パスで入力しなさい
(3) このとき、mizukiディレクトリに入っている excali.jpgをsenディレクトリへ移動するコマンドを相対パスで書きなさい。ただし、移動後に
(4) このとき、カレントディレクトリをsenに変更するコマンドを絶対パスで入力しなさい。
ここから先はカレントディレクトリをsenとする。
(5) guntieディレクトリにあるtakajo.jpgを自分のカレントディレクトリ(sen)にコピーするコマンドを相対パスで入力しなさい。コピー前後で名前が変わらないようにすること。
(6) mizukiディレクトリにある .txt で終わるファイルすべてをiizukaディレクトリに移動するコマンドを相対パスで入力しなさい。コピー前後で名前が変わらないようにすること。
(7) ユーザー名がseikyoのホームディレクトリにあるyosanディレクトリを nagoya ディレクトリの中にコピーするコマンドを絶対パスで入力しなさい。
ヒント1:
ユーザー名 sample のホームディレクトリは、
と表します。
ヒント2:Unixコマンド一覧表
cat コマンドは、次のように指定することでファイルの中身を表示することができる。
ls コマンドは、次のようにディレクトリを指定することで、ディレクトリの中身を確認することができる。
mv コマンドは、次のようにファイルやディレクトリを指定することで、指定したファイルなどを移動させることができる。
cpコマンドは次のように入力することでファイルをコピーすることができる。
また、次のように入力することでディレクトリをコピーすることもできる。
mv、cpコマンドは移動先のファイル名(、ディレクトリ名)を指定しない場合は移動元のファイル名(、ディレクトリ名)と同じ名前となる。
cd コマンドは次のように入力することでカレントディレクトリを変更することができる。
5.練習問題の答え
解答1
解答:ウ
一般利用者にとっての最上位のディレクトリはホームディレクトリです。
ルートディレクトリと間違えないようにしましょう!
(ルートディレクトリは一般利用者が使用することはほぼありません。)
解答2
解答:エ
絶対パスとは、ルートディレクトリからの対象までの経路でしたね。なので答えはエとなります。
(ちなみに相対パスの説明はイの「カレントディレクトリからの経路」となります。)
解答3
解答:エ
カレントディレクトリは下の赤で囲われた場所ですね。
そこから、相対パスを1つずつたどっていきましょう。
すると、緑色で囲われた部分にたどり着きますね。
この部分を絶対パスで表すと /B/B/B となりますね。
よって答えはエとなります。
解答4
解答:ウ
カレントディレクトリ(/a/a/b/c)から指されている相対パス ./../../a/b/file を実際に下のような図を書いてどこになるかを当てはめてみましょう。
すると、緑で囲われた部分が file になりますね。
その部分の絶対パスは /a/a/a/b/file なので、答えはウとなります。
解答5 応用 Unixコマンドと絶対パス・相対パス
答えは下のようになります。
5.さいごに
今回はファイルシステムについて、特に絶対パス、相対パスについてまとめてみました。Unixを使う人やプログラミングをする人にとっては絶対に必要な知識なのでぜひ覚えておきましょう! ではまた次回。
関連広告・スポンサードリンク