cd で移動できるようになったのに、記事のとおりに打つと「No such file or directory」。さっきは動いたのに、今度は動かない……。そんな経験、ありませんか?
私もこれで何度もつまずきました。原因はたいてい、「今いる場所」と「書いた場所」の関係を取り違えていたことでした。しかも、あとで自動化のスクリプトを定時に動かそうとしたときにも、まったく同じ理由で動かなかったんです。
この「場所の書き方」のことをパスと呼びます。この記事では、絶対パス・相対パスと、よく出てくる記号 ~・.・.. を、実際に移動しながら一緒に整理していきましょう。
- Linuxのディレクトリの形(ツリー構造)
- 絶対パス(=いちばん上の
/から書いた場所)と相対パスの違いと、使い分け -
~(ホーム)・.(今いる場所)・..(1つ上)の意味 - WindowsのパスとLinuxのパスの違い(WSLの場合)
- スペースを含む名前の書き方と、よくあるエラー
pwd・ls・cd を一度打ったことがあればOKです。例のユーザー名は kaito、パソコンの名前は demo にしています。あなたの環境では、kaito の部分を自分のユーザー名に読みかえてください。
- ディレクトリ:フォルダのこと
- スクリプト:やりたい処理を順番に書いておき、まとめて実行できるファイル(小さなプログラム)
用語で迷ったら、連載のまとめ記事の「よく出てくる用語ミニ辞典」でも確かめられます。
結論:「/」で始まれば絶対パス、それ以外は相対パス
| 種類 | 書き方の例 | 意味 | たとえると |
|---|---|---|---|
| 絶対パス | /home/kaito | いちばん上(/)からの道順 | 住所(どこから見ても同じ場所) |
| 相対パス | linux-practice/memo | 今いる場所からの道順 | 「ここから2つ先の角」 |
見分け方はかんたんで、先頭が / なら絶対パス、それ以外は相対パスです(~ で始まるものは、ホームディレクトリの絶対パスに置きかわります。あとで説明します)。
Linuxのディレクトリは「1本の木」の形
Linuxのディレクトリは、いちばん上の /(ルートディレクトリ)から枝分かれした、木のような形をしています。これをツリー構造と呼びます。
(例:一部を抜き出した図です。実際にあるディレクトリは環境により異なります)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
/
├── etc
├── home
│ └── kaito ← あなたのホームディレクトリ
│ └── linux-practice
│ └── memo
├── tmp
└── usr
└── share
└── docWindowsは「Cドライブ」「Dドライブ」とドライブごとに入口がありますが、Linuxは入口が / のひとつだけです。どんな場所も、必ず / からたどれます。
絶対パス:いちばん上からの「住所」
絶対パスは、/ から順番にディレクトリ名を / でつないで書きます。
- 1
cd /usr/share/doc- 1
pwdここから先の出力例は、Debian 13での実行例です(ユーザー名 kaito・パソコン名 demo のダミー環境)。UbuntuやWSLでは、表示が少し違うことがあります。
(例)
- 1
/usr/share/docこれは「/ → usr → share → doc」という道順です。絶対パスは今どこにいても同じ場所を指すので、確実に移動したいときに便利です。
相対パス:今いる場所からの「道順」
相対パスは、今いる場所を出発点にした書き方です。
- 1
cd /usr/share- 1
cd doc- 1
pwd(例)
- 1
/usr/share/doc/usr/share にいるときに cd doc と打つと、「今いる場所の中の doc」に移動します。短く書けるのが良いところです。
ただし、今いる場所が違うと、同じ相対パスでも行き先が変わります(または見つかりません)。ここが、つまずきの一番の原因です。
3つの記号:~(ホーム)・.(ここ)・..(1つ上)
| 記号 | 読み方 | 意味 | 例 |
|---|---|---|---|
~ | チルダ | 自分のホームディレクトリ | ~ は /home/kaito と同じ |
. | ドット | 今いるディレクトリ | ./memo は「ここにある memo」 |
.. | ドットドット | 1つ上のディレクトリ | ../.. は「2つ上」 |
一緒にやってみましょう:記号を使って移動する
まず、練習用のディレクトリを作ります。mkdir はディレクトリを作るコマンドで、-p を付けると、途中のディレクトリもまとめて作ってくれます(くわしくは次の記事で扱います)。
- 1
mkdir -p ~/linux-practice/memoホームに戻ってから、相対パスで1段ずつ入ってみます。
- 1
cd ~- 1
cd linux-practice- 1
cd memo- 1
pwd(例)
- 1
/home/kaito/linux-practice/memo次は、.. で2つ上に戻ります。
- 1
cd ../..- 1
pwd(例)
- 1
/home/kaito. を使って、「ここにある linux-practice の中の memo」に一気に入ることもできます。
- 1
cd ./linux-practice/memo./ は省略しても同じ意味なので、cd linux-practice/memo でも移動できます。
最後に、~ を使えば、どこにいてもホームを基準に移動できます。
- 1
cd ~/linux-practice- 1
pwd(例)
- 1
/home/kaito/linux-practice今の場所の「絶対パス」を知りたいとき
相対パスで移動していて、「結局ここの住所は?」と思ったら、pwd で確認できます。ファイルの絶対パスを知りたいときは、realpath というコマンドも使えます。
- 1
realpath memo(例:~/linux-practice にいるとき)
- 1
/home/kaito/linux-practice/memo🤖 詰まったらAIに聞こう:相対パスと絶対パスを書きかえたい
- 1
- 2
- 3
- 4
- 5
- 6
- 7
Linuxの初心者です。パスの書き方を練習しています。
次の「今いる場所」から「行きたい場所」へ移動するコマンドを、1) 絶対パス、2) 相対パス、の両方で教えてください。
それぞれのパスが、どうたどっているのかも説明してください。
【使っている環境】WSLのUbuntu など
【今いる場所(pwd の結果)】ここに pwd の結果を貼る
【行きたい場所】例:/home/kaito/linux-practice/memoWindowsのパスとLinuxのパスの違い(WSLの場合)
WSLを使っていると、Windowsのパスと見比べる場面が出てきます。違いは主に3つです。
| Windows | Linux | |
|---|---|---|
| 区切りの記号 | \(円記号・バックスラッシュ) | /(スラッシュ) |
| いちばん上 | ドライブごと(C:\ など) | / のひとつだけ |
| 大文字・小文字 | 基本的に区別しない | 区別する(Memo と memo は別) |
WSLでは、Windowsの Cドライブは /mnt/c として見えています。
(対応の例:WSLだけの話なので、Debian 13の実機ではなく、Microsoftの説明をもとにしています)
- 1
- 2
Windows:C:\Users\kaito\Desktop
WSL :/mnt/c/Users/kaito/Desktopkaito の部分は、Windowsのユーザーフォルダ名に読みかえてください。
🤖 詰まったらAIに聞こう:Windowsのパスを、Linuxの書き方にしたい
- 1
- 2
- 3
- 4
- 5
- 6
WSLのUbuntuを使っています。Windowsのエクスプローラーで見ている次の場所を、WSLのターミナルで開きたいです。
Linuxでの書き方(パス)と、そこへ移動するコマンドを教えてください。
名前にスペースや日本語が含まれる場合の注意点も教えてください。
【使っている環境】WSLのUbuntu など
【Windowsのパス】ここにエクスプローラーのアドレスバーのパスを貼る(例:C:\Users\【Windowsのユーザー名】\Desktop)よくあるつまずきと直し方
先頭の「/」を付け忘れた・付けすぎた
ホームディレクトリにいるときに、次のように打つと……
- 1
cd home/kaito(例)
- 1
-bash: cd: home/kaito: No such file or directory先頭に / がないので「今いる場所(/home/kaito)の中の home」を探してしまい、見つからないんです。いちばん上から書きたいときは、cd /home/kaito のように 先頭に / を付けます。
逆に、今いる場所の中のディレクトリに入りたいのに cd /linux-practice と / を付けると、「いちばん上にある linux-practice」を探して、やはり見つかりません。
- 1
cd /linux-practice(例)
- 1
-bash: cd: /linux-practice: No such file or directory-bash: も bash: も、どちらも同じ bash からのメッセージで、意味は変わりません(ログインしたときに最初に動くシェルかどうかの違いです)。くわしくは「「黒い画面」とは?ターミナル・シェル・コマンドの違いを初心者向けにやさしく解説」の記事で説明しています。
日本語環境では、-bash: cd: home/kaito: そのようなファイルやディレクトリはありません のように表示されます。
🤖 詰まったらAIに聞こう:パスを書いたのに見つからない
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
Linuxで、次のパスを指定したら「No such file or directory」と表示されました。
絶対パス・相対パスの考え方で、どこが間違っているのかを初心者向けに教えてください。
【使っている環境】WSLのUbuntu など
【今いる場所(pwd の結果)】ここに pwd の結果を貼る
【その場所の中身(ls の結果)】ここに ls の結果を貼る
【実行したコマンド】ここに実行したコマンドを貼る
【表示されたメッセージ】ここにエラーメッセージを貼るパスや ls の結果には、ユーザー名やファイル名がそのまま入ります。AIに貼る前に、パスワード、APIキー、トークン、個人名や取引先名が入ったファイル名が含まれていないかを確認しましょう。APIキーやトークンは、Web のサービスを使うときに本人の代わりになる、合言葉のような文字列です。気になる部分は「***」などに置き換えて大丈夫です。
名前にスペースが入っている
My Documents のように、名前にスペースが入ったディレクトリにそのまま cd しようとすると、シェル(=打ったコマンドを読み取って、プログラムを動かし、結果を返してくれるプログラム)は「My」と「Documents」の2つに分けて受け取ってしまいます。
- 1
cd My Documents(例)
- 1
-bash: cd: too many arguments「引数(場所の指定)が多すぎます」という意味です。日本語環境では -bash: cd: 引数が多すぎます と表示されます。名前全体を "(ダブルクォート)で囲めば、ひとまとまりとして扱われます。
- 1
cd "My Documents"~ は引用符(")の外に出す ホームの中にある My Documents に行こうとして、~ ごと引用符で囲んで cd "~/My Documents" と書くと、~ がホームの意味にならず、「~ という名前のディレクトリ」を探して No such file or directory になります。cd ~/"My Documents" のように、~/ は引用符の外に書きましょう。
私の環境(Debian 13)で、引用符の内と外で ~ がどう変わるかを確かめると、次のようになりました。
(例)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
kaito@demo:~$ echo "~"
~
kaito@demo:~$ echo ~
/home/kaito
kaito@demo:~$ cd "~/My Documents"
-bash: cd: ~/My Documents: No such file or directory
kaito@demo:~$ cd ~/"My Documents"
-bash: cd: /home/kaito/My Documents: No such file or directory引用符の中の "~" は ~ という文字のまま表示され、引用符の外の ~ は /home/kaito に置きかわりました。cd "~/My Documents" のエラーには ~/My Documents と ~ がそのまま残っていて、cd ~/"My Documents" のエラーには /home/kaito/My Documents と出ています。~/ を引用符の外に出すと、ちゃんとホームの意味になり、スペースを含む名前もひとまとまりで受け取られているのがわかります。今回の練習用の環境には My Documents を作っていないので、どちらもエラーになっていますが、あれば2つ目の書き方で移動できます。
自分でディレクトリを作るときは、スペースや日本語を使わず、半角英数字と -(ハイフン)にしておくと、こうしたトラブルを避けられます。
🤖 詰まったらAIに聞こう:スペースや記号が入った名前を扱いたい
- 1
- 2
- 3
- 4
- 5
- 6
- 7
Linuxのターミナルで、名前にスペース(または日本語・記号)が入ったファイルやディレクトリを扱いたいです。
次の名前を、cd や ls で正しく指定する書き方を、いくつかの方法で教えてください。
【使っている環境】WSLのUbuntu など
【扱いたい名前】ここにファイル名またはディレクトリ名を書く
【実行したコマンド】ここに実行したコマンドを貼る
【表示されたメッセージ】ここにエラーメッセージを貼る自動で動かすときは「絶対パス」が安心
あとで、スクリプトを決まった時刻に自動で動かすようになると、「手で打つと動くのに、自動だと動かない」という場面に出会うことがあります。原因のひとつが、自動で動くときは「今いる場所」が手で打つときと違うことです。
相対パスは今いる場所しだいで行き先が変わるので、自動化では絶対パスで書くのが基本です。これは、この連載の後の記事(定時実行)でもくわしく扱います。
理解度チェック:3問だけ解いてみよう
記事の木の図(/home/kaito/linux-practice/memo など)を見ながら、答えを考えてみてください。
問1. 今 /home/kaito/linux-practice/memo にいます。相対パスでホームディレクトリ(/home/kaito)に戻るコマンドは?
問2. 今 /home/kaito にいます。/usr/share/doc に移動するコマンドを、絶対パスで書くと?
問3. cd memo と打ったら No such file or directory と出ました。最初に打って確かめるコマンドを2つ挙げると?
答え
- 問1:
cd ../..(..で1つ上のlinux-practice、もう1つ上でkaito)。どこからでも戻れるcd ~やcdでも正解です - 問2:
cd /usr/share/doc。相対パスならcd ../../usr/share/docですが、遠い場所は絶対パスのほうが確実です - 問3:
pwd(今どこにいるか)とls(ここに memo があるか)
よくある質問
Q. 絶対パスと相対パス、ふだんはどちらを使えばいいですか?
手で打つときは、短く書ける相対パスで大丈夫です。迷ったときや、スクリプトで自動で動かすときは、今いる場所に左右されない絶対パスを使いましょう。
Q. ~ と /home/kaito は、まったく同じですか?
自分のユーザーで使うときは、同じ場所を指します。ただし、~ は「今のユーザーのホーム」という意味なので、別のユーザーで使うと、そのユーザーのホームを指します。
まとめ
- Linuxのディレクトリは、
/から始まる1本の木 - 先頭が
/なら絶対パス(住所)、それ以外は相対パス(今いる場所からの道順) -
~はホーム、.は今いる場所、..は1つ上 - WSLでは、Windowsの
C:\は/mnt/c。区切りは/、大文字・小文字は区別される - 迷ったら
pwd。自動化では絶対パスが安心
今日作った ~/linux-practice の中で、cd と .. を使って行ったり来たりしてみてください。「今どこ? → どっちへ行く?」を頭の中で描けるようになれば、パスはもう怖くありません。
次に読む記事
次は、今日作った練習用のディレクトリの中に、ファイルやフォルダを作ってみましょう。
- 前の記事:Linuxの最初の3コマンド|pwd・ls・cdで「いまどこ?」がわかる【初心者向け】
- 次の記事:Linuxでファイルとフォルダを作る|mkdir・touch・echoの使い方【初心者向け】
関連する記事
- Pythonで毎日の作業を自動化する入門|ダウンロードフォルダを自動で整理しよう:フォルダの場所(パス)を使った自動化に進みたい方に
- Python入門|環境構築と最初の1本を動かす:ファイルの場所を指定してプログラムを動かしてみたい方に
- Git入門|init・add・commit を1回やってみる:ディレクトリの中で、ファイルの変更を記録する方法を知りたい方に