- 技術 💻
ディレクトリとは|フォルダとの違いとパスの読み方をコマンドの実物で解説
結論
ディレクトリとは、ファイルを入れて整理するための「入れ物」です。Windows や Mac の画面で見る「フォルダ」と同じものを指し、コマンドやプログラムの世界では「ディレクトリ」と呼びます。ディレクトリは階層(入れ子)になっていて、その場所を文字で表したものが「パス」です。
この記事でわかること
- ディレクトリとフォルダの違い、ルート・親・カレント・ホームディレクトリの意味
- 絶対パス・相対パス・「.」「..」「~」の読み方を、ls・tree・cd・pwd の実行結果で
- 「No such file or directory」が出る理由と、Windows と Linux の書き方の違い
この記事で使う例のディレクトリです。ユーザー taro のホームディレクトリの中に project があり、その中に src・docs・data の3つのディレクトリと README.md があります(図では README.md と、taro の中の memo を省いています)。
flowchart TD
R["/ (ルート)"] --> H["home"]
H --> T["taro (ホーム)"]
T --> P["project"]
P --> S["src"]
P --> D["docs"]
P --> A["data"]
S --> F2["main.py"]
A --> F3["sales.csv"]
よく調べられることの答えを先にまとめます。
| 知りたいこと | 答え | 詳しい節 |
|---|---|---|
| ディレクトリとは | ファイルを入れて整理する入れ物。階層になっている | ディレクトリとは |
| ディレクトリとフォルダの違い | 同じもの。コマンドでは「ディレクトリ」、画面では「フォルダ」と呼ぶ | ディレクトリとフォルダの違い |
| カレントディレクトリとは | 今いる場所。pwd(Windows は cd)で分かる |
カレントディレクトリとは |
| ルートディレクトリとは | いちばん上。Linux は /、Windows は C:\ |
ディレクトリの階層 |
| 絶対パスと相対パスの違い | ルートから書くのが絶対パス、今いる場所から書くのが相対パス | パスとは |
| 「.」「..」「~」の意味 | 今いる場所・1つ上・ホーム | 「.」「..」「~」の意味 |
| ディレクトリを作る・移る・見る | mkdir・cd・ls(Windows は dir) |
Linux のディレクトリ操作 |
| 「ファイルが見つかりません」と出る | カレントディレクトリが思っている場所と違うことがほとんど | ファイルが見つかりません |
| Windows と Linux の書き方の違い | 区切りが \ と /、ドライブ文字の有無、大文字小文字 |
Windows と Linux の違い |
確認環境:Ubuntu 24.04.5 LTS の上で、bash 5.2.21・GNU coreutils 9.4(ls・mkdir・rmdir・cat・stat・readlink)・tree 2.1.1 を、記事用に作った /home/taro 以下のディレクトリ(自分の作業場所に bind マウントしたもの)で実行し、出力をそのまま載せています。プログラムからの扱いは Python 3.13.18・Node.js 22.23.4・OpenJDK 21.0.12 で実行しました。Windows の dir・cd・tree、パスの形式(ドライブ文字・区切り文字・大文字小文字)、PowerShell の Get-Location は Microsoft Learn の公式ドキュメントで確かめた範囲だけを書き、手元で動かしていない Windows の画面の出力は載せていません。Python の os.getcwd は公式ドキュメントと組み込みの説明文で確かめました。図は mermaid 11.16.0 で描画を確かめています(確認日 2026年10月29日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「ディレクトリとは|フォルダとの違いとパスの読み方をコマンドの実物で解説」
ディレクトリとは(意味を一言で)
この節では、ディレクトリという言葉が何を指すのかと、なぜ必要なのかが分かります。
ディレクトリ(directory)は、ファイルをまとめて入れておく「入れ物」です。 英語の directory は、もともと「住所録・名簿」という意味で、コンピューターでは「ファイルの名前と置き場所の一覧を持つもの」としてこの言葉が使われています。ディレクトリの中には、ファイルだけでなく、別のディレクトリも入れられます。入れ子にできるので、「書類→2026年→10月」のように階層を作って整理できます。
手元の例のディレクトリ project の中を、ls(一覧を表示するコマンド)で見た結果です。
$ ls -F
README.md
data/
docs/
src/
-F を付けると、ディレクトリの名前の後ろに / が付きます。README.md はファイル、data・docs・src はディレクトリです。file コマンドや stat で聞くと、種類がそのまま返ってきます。
$ file src docs README.md
src: directory
docs: directory
README.md: ASCII text
$ stat -c "%F %n" src README.md
directory src
regular file README.md
1ファイルを分ける
何百ものファイルを1か所に置くと探せない。目的ごとにディレクトリに分けると、名前も短くできる。
2同じ名前を別の場所に置ける
docs/README.md と src/README.md は別のファイル。ディレクトリが違えば名前が重なってもよい。
3場所を「パス」で指せる
どのディレクトリの中にあるかを文字で書いたものがパス。コマンドもプログラムも、パスでファイルを指す。
ディレクトリとフォルダの違い
この節では、「ディレクトリ」と「フォルダ」が同じものなのか、どう使い分けられているのかが分かります。
ディレクトリとフォルダは、同じものを指す別の呼び方です。 コマンドを打って操作する画面(CUI・ターミナル・コマンドプロンプト)では「ディレクトリ」、マウスで操作する画面(GUI・エクスプローラー・Finder)では「フォルダ」と呼ぶのが一般的です。Linux のコマンドは mkdir(make directory)、Windows のコマンドプロンプトも dir(directory)・chdir(change directory)と、どちらも directory の名前が付いています。
| ディレクトリ | フォルダ | |
|---|---|---|
| よく使う場面 | ターミナル・コマンドプロンプト・プログラム・技術文書 | エクスプローラー・Finder・一般向けの説明 |
| OS の傾向 | Linux・macOS のコマンド・サーバー | Windows・macOS の画面 |
| 指しているもの | ファイルシステム上の入れ物そのもの | ほぼ同じ。Windows では画面上だけの「まとめ」も含む |
| アイコン | 無い(文字で src/ のように表す) |
黄色い書類入れの絵 |
1つだけ違いがあります。Windows の「フォルダ」は、ディスク上のディレクトリと1対1に対応しないものも含みます。 たとえば「コントロールパネル」や「ごみ箱」はエクスプローラーではフォルダのように見えますが、ディスク上のディレクトリそのものではありません。開発や学習で出てくる「フォルダ」は、ほぼすべてディレクトリと読み替えて問題ありません。
言葉で迷ったら
エラーメッセージやドキュメントに「directory」とあれば、エクスプローラーで見ているフォルダのこと
ディレクトリの階層(ルート・親・子・サブディレクトリ)
この節では、ルートディレクトリ・親ディレクトリ・サブディレクトリ・ホームディレクトリという言葉の意味が、実際の階層の表示で分かります。
ディレクトリは木(ツリー)の形につながっていて、いちばん上を「ルートディレクトリ」と呼びます。 tree コマンドで、例の project を表示した結果です。
$ tree
.
|-- README.md
|-- data
| `-- sales.csv
|-- docs
| `-- manual.txt
`-- src
`-- main.py
4 directories, 4 files
先頭の . は「今いるディレクトリ(project)」です。その下に data・docs・src があり、それぞれの中にファイルがあります。「4 directories」は、. 自身と3つのサブディレクトリを数えています。tree -d でディレクトリだけ、tree -L 1 で1段だけ、tree -a で .env のような隠しファイルも表示できます。
$ tree -L 1 /home/taro
/home/taro
|-- Pictures
|-- memo
`-- project
4 directories, 0 files
| 言葉 | 意味 | 例の中では |
|---|---|---|
| ルートディレクトリ | いちばん上のディレクトリ。これより上は無い | Linux は /、Windows は C:\ |
| 親ディレクトリ | 1つ上のディレクトリ | src の親は project |
| サブディレクトリ(子) | あるディレクトリの中にあるディレクトリ | project のサブディレクトリは src・docs・data |
| ホームディレクトリ | ユーザーごとに用意された、自分のファイルを置く場所 | /home/taro(Windows は C:\Users\taro) |
| カレントディレクトリ | 今、作業している場所 | pwd で表示される |
ルートディレクトリ / の中には、OS が決めた名前のディレクトリが並んでいます。手元の Ubuntu で ls / を実行した結果の、どの Linux にもある部分です(この環境だけにあるものは省いています)。
$ cd /; pwd; ls
/
bin boot dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var
ユーザーのホームディレクトリは /home/ユーザー名 にあります。「ルートディレクトリ(/)」と「root ユーザーのホームディレクトリ(/root)」は名前が似ていますが別のものです。
パスとは(絶対パスと相対パスの違い)
この節では、パスという言葉の意味と、絶対パスと相対パスの読み方・書き方が分かります。
パス(path)は、ファイルやディレクトリの「場所」を、ルートからの道順として文字で書いたものです。 Linux では /home/taro/project/src/main.py のように、ディレクトリの名前を / で区切って書きます。「/home の中の taro の中の project の中の src の中の main.py」と、左から右へ読みます。
パスには2つの書き方があります。
絶対パス(/ から始まる)
ルートからの道順をすべて書く
例:/home/taro/project/data/sales.csv
どこにいても同じファイルを指す
「フルパス」とも呼ぶ
相対パス(/ から始まらない)
今いる場所(カレントディレクトリ)からの道順を書く
例:data/sales.csv、../memo/todo.txt
いる場所が変わると、指すファイルも変わる
短く書ける
同じ main.py を、2つの書き方で表示した結果です。project にいるときはどちらでも同じファイルが読めます。
$ pwd
/home/taro/project
$ cat src/main.py # 相対パス
print("hello")
$ cat /home/taro/project/src/main.py # 絶対パス
print("hello")
相対パスが「どこを基準にしているか」は、readlink -f や realpath で絶対パスに直すと確かめられます。src にいる状態で実行しました。
$ cd /home/taro/project/src
$ readlink -f ../data/./sales.csv
/home/taro/project/data/sales.csv
$ realpath ../docs
/home/taro/project/docs
cd と pwd の細かい使い方は、関連記事「Linuxのcd・pwdコマンドの使い方|相対パスと絶対パスの違いを図解」で扱っています。
「.」「..」「~」「/」の意味
この節では、パスの中に出てくる記号が何を指しているのかが、実行結果で分かります。
. は「今いるディレクトリ」、.. は「1つ上(親)のディレクトリ」、~ は「自分のホームディレクトリ」、先頭の / は「ルートディレクトリ」です。 手元の例で、それぞれを ls に渡した結果です(project にいる状態)。
$ pwd
/home/taro/project
$ ls . # 今いる project の中
README.md data docs src
$ ls .. # 1つ上の /home/taro の中
Pictures memo project
$ ls ~ # ホームディレクトリ /home/taro の中
Pictures memo project
$ echo ~
/home/taro
今いるディレクトリ
./main.py は「ここにある main.py」。tree の先頭の . も同じ意味。
スクリプトの実行で ./run.sh と書く
1つ上のディレクトリ
cd .. で親へ移る。../../ と重ねると2つ上。
ルートで .. はルート自身
ホームディレクトリ
cd ~ と cd は同じ。~/project は /home/taro/project。
シェルが展開する記号
ルート・区切り
先頭なら「ルートから」、途中なら「ディレクトリの区切り」。
Windows は \
. と .. は、記号ではなく、どのディレクトリにも実際に入っている名前です。ls -a(all)で隠しファイルも表示すると、先頭に並びます。ls -ld . .. で見ると、どちらも「d(ディレクトリ)」として表示されました。
$ ls -a
. .. .env README.md data docs src
$ cd src; ls -ld . ..
drwxr-xr-x 2 root root 4096 Oct 29 17:30 .
drwxr-xr-x 6 root root 4096 Oct 29 17:31 ..
.env のように名前が . で始まるファイルは、Linux では「隠しファイル」として、ただの ls には出ません。ls -a や tree -a で見えます。ls の出力の読み方は、関連記事「lsコマンドのオプション一覧とls -lの見方|パーミッション図解」で扱っています。
カレントディレクトリとは(pwd・cd の実行結果)
この節では、カレントディレクトリ(作業ディレクトリ)が何か、どう確かめ、どう移るのかが分かります。
カレントディレクトリは、「今、自分が立っているディレクトリ」です。 ターミナルを開くと、まずホームディレクトリに立っています。相対パスはすべてこの場所を基準に読まれるので、コマンドが思いどおりに動かないときは、最初にカレントディレクトリを確かめます。英語では current directory、または working directory(作業ディレクトリ)と呼びます。
今いる場所を見る:pwd
pwd(print working directory)は、カレントディレクトリを絶対パスで表示する。Windows のコマンドプロンプトは、引数なしの cd が同じ働きをする。
移る:cd ディレクトリ名
cd src で中へ、cd .. で上へ、cd /home/taro/project/data で絶対パスの場所へ。cd だけならホームへ戻る。
移ったら pwd で確かめる
プロンプト(taro@pc:~/project$ のような表示)にも場所が出るが、慣れないうちは pwd で確かめると迷わない。
実際に移りながら pwd で場所を確かめた結果です。
$ pwd
/home/taro/project
$ cd src
$ pwd
/home/taro/project/src
$ cd ..; pwd
/home/taro/project
$ cd ../..; pwd
/home
$ cd; pwd # 引数なしの cd はホームへ
/home/taro
$ cd ~/project/docs; pwd
/home/taro/project/docs
$ cd - # 1つ前にいた場所へ戻る(場所を表示する)
/home/taro
Windows のコマンドプロンプトでは、Microsoft の公式ドキュメントによると、cd をパラメーターなしで使うと「現在のドライブとディレクトリを表示」し、cd .. は「親フォルダーに変更」、cd\ は「ドライブのディレクトリ階層の最上位であるルートディレクトリに戻る」働きです。PowerShell では Get-Location が Unix の pwd に相当し、pwd と gl がその別名として用意されています。
Linux のディレクトリ操作コマンド(ls・cd・pwd・mkdir・rmdir・tree)
この節では、ディレクトリを見る・移る・作る・消す基本のコマンドと、その実行結果・エラーの文言が分かります。
最初に覚えるのは pwd・ls・cd・mkdir の4つです。 作って、中へ入り、一覧を見て、消すまでを手元で動かしました。
| したいこと | Linux・macOS | Windows(コマンドプロンプト) |
|---|---|---|
| 今いる場所を表示 | pwd |
cd(引数なし) |
| 中身の一覧 | ls、ls -l(詳しく)、ls -a(隠しも) |
dir、dir /b(名前だけ)、dir /a(隠しも) |
| 移る | cd 名前 |
cd 名前(別ドライブへは cd /d D:\work) |
| 1つ上へ | cd .. |
cd .. |
| ホームへ | cd または cd ~ |
cd %USERPROFILE% |
| 作る | mkdir 名前、mkdir -p a/b/c |
mkdir 名前(md も同じ) |
| 空のディレクトリを消す | rmdir 名前 |
rmdir 名前(rd も同じ) |
| 階層を表示 | tree(別途インストール) |
tree、tree /f(ファイルも) |
$ cd ~/project; mkdir build; ls -F
README.md
build/
data/
docs/
src/
$ mkdir -p out/2026/10; tree out # -p で途中の階層もまとめて作る
out
`-- 2026
`-- 10
3 directories, 0 files
$ mkdir src
mkdir: cannot create directory 'src': File exists
$ rmdir build; ls -F
README.md
data/
docs/
out/
src/
$ rmdir out
rmdir: failed to remove 'out': Directory not empty
mkdirは、同じ名前のディレクトリがあると「File exists」で止まります。rmdirは空のディレクトリしか消せません。中身ごと消すにはrm -r outを使います。Linux のrmはごみ箱を通らず、元に戻せないので、消す前にlsで中身を確かめます。
ディレクトリの名前にスペースが入ると、cd my docs は「my」と「docs」の2つの引数に分かれて失敗します。引用符で囲むと1つの名前になります。
$ mkdir "my docs"
$ cd my docs
bash: cd: too many arguments
$ cd "my docs"; pwd
/home/taro/project/my docs
mkdir の -p と touch の使い方は、関連記事「Linux mkdir・touchの使い方|-pで階層作成と空ファイル作成」で扱っています。
Windows のディレクトリ(dir・cd・tree・ドライブ)
この節では、Windows のコマンドプロンプトでディレクトリを扱うときの dir・cd・tree の働きと、ドライブという考え方が分かります。内容は Microsoft Learn の公式ドキュメントで確かめた範囲です。
Windows では、ルートディレクトリがドライブごとにあります。 C:\ は C ドライブのルート、D:\ は D ドライブのルートで、Linux のように1本の木にまとまっていません。公式ドキュメントによると、従来の DOS パスは「ドライブ文字とボリューム区切り記号(C:)」「ディレクトリ名」「ファイル名」の3つでできています。
| コマンド | 働き(公式ドキュメントの説明) |
|---|---|
dir |
ディレクトリ内のファイルとサブディレクトリの一覧を表示する。名前・最終更新日時・サイズ・合計数・空き領域も出る |
dir /b |
追加情報なしで、ファイル名とディレクトリ名だけを表示する |
dir /a:d |
ディレクトリだけを表示する(/a:-d はファイルだけ) |
dir /s |
サブディレクトリの中もすべて表示する |
cd(引数なし) |
現在のドライブとディレクトリを表示する |
cd .. |
親フォルダーに変更する |
cd\ |
ドライブのルートディレクトリに戻る |
cd /d D:\work |
現在のドライブだけでなく、ドライブの現在のディレクトリも変更する(/d が無いとドライブは変わらない) |
tree /f |
ディレクトリ構造を図のように表示し、/f で各ディレクトリ内のファイルの名前も表示する |
公式ドキュメントに載っている dir /x の出力例です。<DIR> と付いている行がディレクトリで、. と .. が Windows にもあることが分かります。
C:\test>dir /x
Volume in drive C has no label.
Volume Serial Number is B86A-EF32
Directory of C:\test
11/30/2004 01:40 PM <DIR> .
11/30/2004 01:40 PM <DIR> ..
11/30/2004 11:05 AM 0 T97B4~1.TXT t.txt2
11/30/2004 01:16 PM 0 t97.txt
Windows の cd で気をつける点が2つあります。
cd D:\workだけでは D ドライブに移りません。 公式ドキュメントのとおり、別のドライブへ移るにはcd /d D:\workと/dを付けるか、先にD:と打ってドライブを切り替えます。- コマンド拡張が有効なとき、
cdのパスはスペースを含んでいても引用符なしで通ります(公式ドキュメントの例:cd username\programs\start menu)。bash では引用符が要るので、動きが違います。
PowerShell では Set-Location で移り、Get-Location(別名 pwd・gl)で場所を見ます。公式の例では PS C:\Windows> Get-Location に対して Path の欄に C:\Windows が返っています。
Windows と Linux の違い(区切り文字・ドライブ・大文字小文字・ホーム)
この節では、同じ「パス」でも Windows と Linux・macOS で書き方がどう違うのかが分かります。
違いは4つです。区切り文字、ルートの数(ドライブ)、大文字と小文字の区別、ホームディレクトリの場所です。
| Linux・macOS | Windows | |
|---|---|---|
| 区切り文字 | / |
\(/ も多くの場面で通る) |
| ルート | / が1つだけ |
C:\・D:\ とドライブごと |
| 絶対パスの例 | /home/taro/project |
C:\Users\taro\project |
| ホーム | /home/taro(macOS は /Users/taro)、~ |
C:\Users\taro、%USERPROFILE% |
| 大文字小文字 | 区別する(Src と src は別) |
保持するが区別しない(Test.txt と test.txt は同じ) |
| 隠しファイル | 名前が . で始まる |
「隠しファイル」の属性で決まる |
Microsoft の公式ドキュメント(Windows のファイルパス形式)には、Windows で間違えやすい書き方がまとまっています。要点は次のとおりです。
C:\Projects\a.slnはドライブ C のルートからの絶対パス、\Projects\a.slnは「現在のドライブ」のルートからの相対パス、Projects\a.slnは現在のディレクトリからの相対パスです。C:Projects\a.sln(C:の後ろに\が無い)は、C ドライブの「現在のディレクトリ」からの相対パスです。 公式ドキュメントは、これが Windows のパスにまつわるバグのよくある原因だと注意しています。- Windows ではスラッシュ
/は正規化のときにバックスラッシュ\に変換されます。 - Windows のファイルシステムは大文字小文字を保持しますが区別しません。Linux は区別するので、Windows で動いたパスが Linux のサーバーで「見つからない」になることがあります。手元の Linux で
cd Src(本当は src)を実行すると、次のとおり失敗しました。
$ cd Src
bash: cd: Src: No such file or directory
Python には、Windows 流と Linux 流の両方のパスを扱う部品があります。Linux の上で Windows のパスの規則を確かめた結果です。
>>> import ntpath # Windows の規則
>>> ntpath.join("C:\\Users\\taro", "project", "data\\sales.csv")
'C:\\Users\\taro\\project\\data\\sales.csv'
>>> ntpath.isabs("C:\\Users\\taro"), ntpath.isabs("C:Users"), ntpath.isabs("\\Users")
(True, False, False)
>>> ntpath.splitdrive("C:\\Users\\taro\\project")
('C:', '\\Users\\taro\\project')
>>> ntpath.normpath("C:/Users/taro/./project/../memo")
'C:\\Users\\taro\\memo'
>>> from pathlib import PurePosixPath
>>> PurePosixPath("/home/taro/project/data/sales.csv").parts
('/', 'home', 'taro', 'project', 'data', 'sales.csv')
C:Users と \Users が絶対パスではない(False)と判定され、/ で書いたパスが \ に直されていることが分かります。Python の文字列の中では \ を \\ と書くか、r"C:\Users" のように raw 文字列にします。パスをプログラムで組み立てるときの書き方は、関連記事「Python pathlibの使い方|ファイル操作逆引き70例と実行結果」で扱っています。
「ファイルが見つかりません」が出る理由(エラー原文)
この節では、「No such file or directory」「FileNotFoundError」が出たときに、何が起きていて、どこを見れば直せるのかが分かります。
ファイルは存在しているのに「見つかりません」と出るとき、原因のほとんどは「カレントディレクトリが、自分が思っている場所と違う」ことです。 相対パスはカレントディレクトリを基準に読まれるので、立っている場所が1つずれるだけで、別の場所を探しに行きます。
手元で、project の中では読めた data/sales.csv を、data の中に移ってから同じ相対パスで読んだ結果です。
$ pwd
/home/taro/project
$ cat data/sales.csv
name,qty
apple,3
$ cd data
$ cat data/sales.csv
cat: data/sales.csv: No such file or directory
$ cat sales.csv # data の中にいるので、名前だけで読める
name,qty
apple,3
data の中で data/sales.csv と書くと、/home/taro/project/data/data/sales.csv を探しに行くので見つかりません。同じことがプログラムでも起きます。ホームディレクトリ(/home/taro)に立ったまま、project の中のスクリプトやファイルを相対パスで指した結果です。
$ cd /home/taro
$ python3 src/main.py
python3: can't open file '/home/taro/src/main.py': [Errno 2] No such file or directory
$ python3 -c 'open("data/sales.csv")'
Traceback (most recent call last):
File "<string>", line 1, in <module>
open("data/sales.csv")
~~~~^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'data/sales.csv'
$ node -e 'require("fs").readFileSync("data/sales.csv")'
Error: ENOENT: no such file or directory, open 'data/sales.csv'
$ java Cwd.java # Files.readString(Paths.get("data/sales.csv"))
Exception in thread "main" java.nio.file.NoSuchFileException: data/sales.csv
Python のメッセージには、探した絶対パス /home/taro/src/main.py が出ています。「本当はどこを探したのか」がこの行で分かるので、見つからないときはメッセージの中のパスを読みます。 cd /home/taro/project と移ってから同じコマンドを実行すると、どれも成功しました。
| エラーの原文 | 出した側 | 意味・直し方 |
|---|---|---|
bash: cd: nothing: No such file or directory |
bash | そのディレクトリが無い。ls で名前を確かめる(大文字小文字も) |
bash: cd: README.md: Not a directory |
bash | ファイルに cd しようとした。ディレクトリではない |
bash: cd: too many arguments |
bash | 名前にスペースがある。cd "my docs" と引用符で囲む |
cat: data/sales.csv: No such file or directory |
cat | カレントディレクトリがずれている。pwd で場所を確かめる |
cat: docs: Is a directory |
cat | ディレクトリを cat した。中のファイル名まで書く |
mkdir: cannot create directory 'src': File exists |
mkdir | 同じ名前がすでにある |
rmdir: failed to remove 'out': Directory not empty |
rmdir | 中身がある。rm -r を使う(消してよいか確かめてから) |
FileNotFoundError: [Errno 2] No such file or directory |
Python | 相対パスの基準(os.getcwd())を確かめる |
Error: ENOENT: no such file or directory |
Node.js | ENOENT は「Error NO ENTry」。process.cwd() を確かめる |
java.nio.file.NoSuchFileException |
Java | System.getProperty("user.dir") が基準 |
- 1
pwdで今いる場所を見る思っている場所と1つ違うだけで、相対パスはすべてずれる - 2
lsでその名前が本当にあるか見るLinux は大文字小文字を区別する。拡張子(.txt)が隠れていないかも見る - 3エラーメッセージの中のパスを読むPython は探した絶対パスを出す。そこが正しい場所かを見る
- 4絶対パスで試す絶対パスで読めれば、原因はカレントディレクトリのずれと確定する
- 5スペース・全角・末尾の空白を疑う「my docs」は引用符で囲む。コピーしたパスの末尾の空白にも注意
Java で同じ失敗をしたときの読み方は、関連記事「Java FileNotFoundExceptionの原因と対処|相対パス早見表」で扱っています。
プログラムからのカレントディレクトリの扱い(Python os.getcwd)
この節では、プログラムの中でカレントディレクトリがどう決まり、どう確かめ、どう書けば場所に左右されなくなるのかが分かります。
プログラムのカレントディレクトリは「スクリプトのファイルがある場所」ではなく、「プログラムを起動したときに立っていた場所」です。 ここを取り違えると、「エディターから実行すると動くのに、ターミナルから実行すると見つからない」が起きます。Python の os.getcwd() は、公式の説明どおり「現在の作業ディレクトリを表す文字列を返す」関数です。次のスクリプトを src/cwd.py に置き、起動する場所を変えて実行しました。
import os
from pathlib import Path
print("getcwd :", os.getcwd()) # 起動した場所
print("__file__:", __file__) # このスクリプトの場所
print("abs :", os.path.abspath("data/sales.csv")) # 相対パスが指す先
print("exists :", os.path.exists("data/sales.csv"))
print("home :", Path.home())
print("sep :", repr(os.sep))
$ cd /home/taro/project; python3 src/cwd.py
getcwd : /home/taro/project
__file__: /home/taro/project/src/cwd.py
abs : /home/taro/project/data/sales.csv
exists : True
home : /home/taro
sep : '/'
$ cd /home/taro; python3 project/src/cwd.py
getcwd : /home/taro
__file__: /home/taro/project/src/cwd.py
abs : /home/taro/data/sales.csv
exists : False
home : /home/taro
sep : '/'
スクリプトの場所を基準にファイルを指すと、どこから起動しても同じファイルを読めます。__file__ から project の場所を求めて data を読む書き方です。
import os
from pathlib import Path
base = Path(__file__).resolve().parent.parent # src の親 = project
print("cwd :", os.getcwd())
print("base :", base)
print((base / "data" / "sales.csv").read_text())
$ cd /home/taro; python3 project/src/read.py
cwd : /home/taro
base : /home/taro/project
name,qty
apple,3
カレントディレクトリそのものを変えたいときは os.chdir(path) を使います(公式の説明は「現在の作業ディレクトリを指定したパスに変更する」)。ただし、プログラム全体の基準が変わるので、読む場所を __file__ や設定値から組み立てるほうが安全です。
$ cd /home/taro; python3 -c 'import os; print(os.getcwd()); os.chdir("project"); print(os.getcwd()); print(open("data/sales.csv").read())'
/home/taro
/home/taro/project
name,qty
apple,3
| 言語 | カレントディレクトリを見る | スクリプト自身の場所 |
|---|---|---|
| Python | os.getcwd()、Path.cwd() |
__file__、Path(__file__).resolve().parent |
| Node.js | process.cwd() |
__dirname(ES Modules は import.meta.dirname) |
| Java | System.getProperty("user.dir") |
クラスパスの資源として読むのが一般的 |
| bash | pwd、$PWD |
$(dirname "$0") |
手元の Node.js では process.cwd() が /home/taro、Java では user.dir が /home/taro と、起動した場所がそのまま返りました。
似ている言葉:環境変数 PATH・ディレクトリトラバーサル・Active Directory
この節では、「ディレクトリ」「パス」と名前が似ていて混同しやすい言葉の違いが分かります。
- 環境変数 PATH:ファイルの「パス」ではなく、「コマンドを探すディレクトリの一覧」を入れた変数です。
python3と打ったときに、どのディレクトリから探すかを決めています。「command not found」はこちらの問題です。関連記事「Linux環境変数PATHの設定方法|exportと.bashrcの使い分け早見表」で扱っています。 - ディレクトリトラバーサル:Web アプリが受け取ったファイル名に
../を混ぜられ、公開していないディレクトリのファイルを読まれてしまう弱点の名前です。作る側は、受け取ったパスをrealpathのように正規化してから、公開してよいディレクトリの中に収まっているかを確かめます。 - Active Directory・ディレクトリサービス:ファイルの入れ物ではなく、ユーザーやコンピューターの情報を一元管理する仕組みの名前です。「住所録」という元の意味のほうで directory が使われています。
- Web ディレクトリ:URL の
/news-blog/のような部分もディレクトリと呼ばれます。Web サーバーのディレクトリ構成と対応していることもあれば、しないこともあります。
絶対パスと相対パスの使い分け(判断表)
この節では、どちらの書き方を選ぶかを場面ごとに決められます。
人が打つコマンドは相対パス、設定ファイルや自動で動くものは絶対パス(または基準を明示した相対パス)が基本です。
- 1ターミナルで今いる場所の近くを指す → 相対パス
cd src、cat ../README.md。短く、Tab 補完が効く - 2cron・systemd・タスクスケジューラーで動かす → 絶対パス起動時のカレントディレクトリが自分のホームとは限らない
- 3プロジェクトの中のファイルをプログラムから読む → スクリプトの場所を基準にした相対パス
Path(__file__).resolve().parentから組み立てる - 4Git で共有する設定・ドキュメント → リポジトリの基準からの相対パス
/home/taro/…と書くと他の人の環境で壊れる - 5OS が決めた場所(ログ・設定)を指す → 絶対パス
/var/log/syslog、/etc/hosts - 6Windows と Linux の両方で動かす → 区切り文字を自分で書かない
pathlibやos.path.joinに任せる
よくある質問
Q. ディレクトリとは何ですか? A. ファイルを入れて整理するための入れ物です。中に別のディレクトリも入れられるので、階層(ツリー)を作れます。Windows や Mac の画面で「フォルダ」と呼ばれているものと同じです。
Q. ディレクトリとフォルダの違いは何ですか? A. 同じものを指す別の呼び方です。コマンドやプログラムの世界では「ディレクトリ」、エクスプローラーや Finder の画面では「フォルダ」と呼びます。Windows の「コントロールパネル」のように、ディスク上のディレクトリではないフォルダもありますが、開発で出てくる場面ではほぼ同じと考えて差し支えありません。
Q. カレントディレクトリとは何ですか?
A. 今、自分(またはプログラム)が立っているディレクトリです。相対パスはこの場所を基準に読まれます。Linux・macOS では pwd、Windows のコマンドプロンプトでは引数なしの cd、PowerShell では Get-Location(pwd でも可)で確かめます。
Q. ルートディレクトリとは何ですか?
A. 階層のいちばん上にあるディレクトリです。Linux・macOS では / が1つだけあり、Windows では C:\・D:\ のようにドライブごとにあります。root ユーザーのホームディレクトリ /root とは別のものです。
Q. 絶対パスと相対パスの違いは何ですか?
A. 絶対パスはルート(/ や C:\)から全部書いたもので、どこにいても同じ場所を指します。相対パスはカレントディレクトリからの道順で、いる場所によって指す先が変わります。Linux では先頭が / かどうかで見分けます。
Q. 「.」と「..」は何ですか?
A. . は今いるディレクトリ、.. は1つ上の親ディレクトリです。記号のように見えますが、どのディレクトリの中にも実際に入っている名前で、ls -a で表示されます。cd .. で上に戻れます。
Q. 「~」(チルダ)は何ですか?
A. 自分のホームディレクトリを表す記号で、シェルが /home/taro のような絶対パスに置き換えます。cd ~ と cd は同じで、~/project は /home/taro/project です。
Q. ファイルはあるのに「No such file or directory」と出ます。
A. ほとんどの場合、カレントディレクトリが思っている場所と違います。pwd で場所を見て、ls で名前(大文字小文字・拡張子)を確かめ、絶対パスで読めるかを試します。絶対パスで読めれば、原因は場所のずれです。
Q. Windows のパスはなぜ「\」なのですか? 「/」は使えますか?
A. Windows はディレクトリの区切りに \ を使う設計です。Microsoft の公式ドキュメントによると、/ はパスの正規化のときに \ に変換されるため、多くの場面で / も通ります。プログラムの文字列では \ がエスケープ記号になるので、\\ と書くか raw 文字列を使います。
Q. Windows の cd で別のドライブに移れません。
A. cd D:\work だけでは、D ドライブの現在のディレクトリが変わるだけで、今のドライブは C のままです。公式ドキュメントのとおり、cd /d D:\work と /d を付けるか、先に D: と打ってドライブを切り替えます。
Q. ディレクトリの中身ごと消すにはどうしますか?
A. Linux では rm -r ディレクトリ名 です。rmdir は空のときしか消せません。rm はごみ箱を通らず元に戻せないので、消す前に ls で中身を確かめます。
Q. 環境変数 PATH とファイルのパスは同じものですか?
A. 別のものです。環境変数 PATH は「コマンドを探すディレクトリの一覧」で、python3 と打ったときにどこから探すかを決めています。ファイルのパスは1つのファイルやディレクトリの場所です。
まとめ
- ディレクトリはファイルを入れる入れ物で、フォルダと同じもの。コマンドの世界では「ディレクトリ」、画面の世界では「フォルダ」と呼ぶ。
- ディレクトリは木の形につながっていて、いちばん上がルート(Linux は
/、Windows はC:\)。1つ上が親、中にあるのがサブディレクトリ、自分の置き場がホーム。 - パスは場所を文字で書いたもの。
/から始まる絶対パスはどこにいても同じ場所、相対パスはカレントディレクトリからの道順。.は今いる場所、..は1つ上、~はホーム。 - 手元の実行では、同じ
cat data/sales.csvが project では成功し、data の中では「No such file or directory」になった。Python・Node.js・Java も、起動した場所で結果が変わった。見つからないときはpwd・ls・絶対パスで確かめる。 - Windows は区切りが
\、ルートがドライブごと、大文字小文字を区別しない。別ドライブへはcd /d。プログラムからはos.getcwd()で場所を確かめ、__file__を基準にファイルを指すと場所に左右されない。
参考・出典
確認日はいずれも 2026年10月29日です。
- Microsoft Learn「cd」(Windows コマンド):https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/cd
- Microsoft Learn「dir」(Windows コマンド):https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/dir
- Microsoft Learn「tree」(Windows コマンド):https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/tree
- Microsoft Learn「Windows システムのファイル パス形式」:https://learn.microsoft.com/ja-jp/dotnet/standard/io/file-path-formats
- Microsoft Learn「Get-Location」(PowerShell 7.5):https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/get-location?view=powershell-7.5
- Python 公式ドキュメント「os --- 雑多なオペレーティングシステムインターフェース」(os.getcwd・os.chdir):https://docs.python.org/ja/3/library/os.html#os.getcwd
- Python 公式ドキュメント「pathlib --- オブジェクト指向のファイルシステムパス」:https://docs.python.org/ja/3/library/pathlib.html
- GNU Coreutils「ls invocation」:https://www.gnu.org/software/coreutils/manual/html_node/ls-invocation.html
- GNU Bash Reference Manual「Bourne Shell Builtins」(cd・pwd):https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「ディレクトリとは|フォルダとの違いとパスの読み方をコマンドの実物で解説」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。