InfraAcademy

InfraAcademy Blog

【Linux】./の意味とは?ドットスラッシュにはどのような意味があるのか?

| #Linux

こんにちは、フルスタックエンジニアのryuです。

今回の記事では、Linuxにおける./の意味について解説します。結論から言うと、./(ドットスラッシュ)はカレントディレクトリを指します。

./(ドットスラッシュ)はコマンドラインで使われることが多いと思います。lsコマンドなどと一緒に使われる場合もありますし、シェルスクリプトを実行するときにも登場しますよね。

なぜ、./(ドットスラッシュ)がカレントディレクトリになるのか。そして、なぜスクリプトを実行するときに./を付ける必要があるのか、実際のコマンドを交えて詳しく解説します。

【Linux】./(ドットスラッシュ)の意味とは?

まずは、./(ドットスラッシュ)が何を表しているのか、基本からおさえていきましょう。

./(ドットスラッシュ)はカレントディレクトリを表す

./(ドットスラッシュ)はカレントディレクトリを表します。カレントディレクトリとは、現在作業しているディレクトリのことです。

Linuxを操作するとき、私たちは常にどこかのディレクトリの中で作業しています。その今いる場所こそが、カレントディレクトリです。

WindowsのエクスプローラーやMacのFinderで、今開いているフォルダをイメージすると分かりやすいのではないでしょうか。コマンドラインでは画面にフォルダが表示されないぶん、自分の現在地を記号や文字で表す必要があります。

カレントディレクトリを調べるには、pwdコマンドを実行します。

pwd

コマンドを実行すると、カレントディレクトリは/(ルート)であることが分かります。

pwdはprint working directoryの略で、現在地を表示するコマンドです。コマンドラインで自分がどこにいるか迷ったら、まずpwdと覚えておきましょう。

.(ドット)と/(スラッシュ)に分解すると理解しやすい

./という記号は、.(ドット)と/(スラッシュ)の2つに分解すると意味がつかみやすくなります。

.(ドット)は、カレントディレクトリそのものを表す記号です。そして/(スラッシュ)は、ディレクトリとその中身を区切るための記号です。

つまり./file.txtという書き方は、カレントディレクトリの中にあるfile.txtという意味になります。カレントディレクトリを基準にした、相対パスの書き方の1つです。

Linuxには、./以外にも場所を表す記号がいくつかあります。代表的なものを表にまとめました。

記号 意味 使用例
. カレントディレクトリ ls .
.. 1つ上の親ディレクトリ cd ..
~ ホームディレクトリ cd ~
先頭の/ ルートディレクトリ cd /etc

..(ドット2つ)は、カレントディレクトリの1つ上の階層を表す記号です。cd ..で上の階層へ、cd ~で自分のホームディレクトリへ移動できます。

また、ls -aを実行すると、どのディレクトリでも...が一覧に表示されます。それだけ、この2つの記号はLinuxにとって基本的な存在ということですね。

./(ドットスラッシュ)がカレントディレクトリかどうか検証してみる

では、./(ドットスラッシュ)が本当にカレントディレクトリと同じかどうか調べてみましょう。

pwdで表示されたディレクトリと./の中身を、lsコマンドで見比べてみます。

ls ./
ls /  (←pwdで出力されたディレクトリを指定)

コマンドを実行すると、どちらも同じ内容が出力されました。

これで、./がカレントディレクトリと同じことがわかります。記号の意味は、こうして自分の手で確かめると記憶に残りやすいですよ。

別のディレクトリでも試したい場合は、cdコマンドで移動してから同じ手順を実行してみてください。カレントディレクトリが変われば、./の指す場所も一緒に変わることが確認できます。

相対パスと絶対パスの違いをおさえよう

./を理解するうえで欠かせないのが、相対パスと絶対パスという2つの考え方です。ここでつまずく初心者の方も多いので、あわせて整理しておきましょう。

相対パスは、カレントディレクトリを基準にして場所を表す書き方です。./file.txtや../dirのように、今いる場所からの道のりで指定します。

一方の絶対パスは、ルートディレクトリを起点にして場所を表す書き方です。/home/user/file.txtのように、必ず/から書き始めます。

2つの違いを表で比べてみます。

比較項目 相対パス 絶対パス
基準の場所 カレントディレクトリ ルートディレクトリ(/)
書き方の例 ./file.txt../dir /home/user/file.txt
特徴 短く書けるが、今いる場所によって指す先が変わる 長くなるが、どこから書いても同じ場所を指す

住所にたとえるなら、絶対パスは都道府県から書いた正式な住所、相対パスは隣の家といった現在地からの案内です。先ほど検証したls ./も、相対パスでカレントディレクトリを指定していたわけですね。

どちらが優れているというものではなく、場面によって使い分けます。作業中のディレクトリ内のファイルなら相対パス、設定ファイルなどで確実に場所を指定したいなら絶対パス、というのが基本の考え方です。

./[ファイル名]でスクリプトを実行する理由

./の使いどころとして最も多いのが、シェルスクリプトの実行です。なぜスクリプトの実行に./を付けるのか、順番に見ていきましょう。

./[ファイル名]はカレントディレクトリのファイルを指す

./[ファイル名]の場合は、カレントディレクトリ配下のファイルを指します。

例えば、./file.txtと指定された場合、これはカレントディレクトリ配下のfile.txtを指します。

./[ファイル名]はスクリプトを指定する際に使うので覚えておきましょう!

実際に、簡単なスクリプトを作って実行するまでの流れを見てみます。

echo 'echo Hello' > test.sh
chmod +x test.sh
./test.sh

1行目では、echoの出力をリダイレクトしてtest.shというファイルを作っています。この>の意味を詳しく知りたい方は、リダイレクト演算子の使い方の解説記事をご覧ください。

2行目のchmod +xで実行権限を付け、3行目の./test.shでスクリプトを実行しています。実行するとHelloと表示される、シンプルなスクリプトです。

もう少し長いスクリプトを書くときは、エディタで編集するのが効率的です。編集方法はviコマンドの使い方の解説記事で紹介しています。

ファイル名だけで実行できないのはなぜ?

ここで、疑問に思った方もいるのではないでしょうか。lsやpwdは名前だけで実行できるのに、なぜ自作のtest.shはファイル名だけではダメなのか、と。

試しに./を付けずにtest.shとだけ入力すると、command not foundというエラーが表示されます。ファイルは目の前にあるのに、見つからないと言われてしまうのです。

その理由は、シェルがコマンドを探す場所にあります。シェルはコマンドが入力されると、PATHという環境変数に登録されたディレクトリの中だけを探します。

自分の環境のPATHに何が登録されているかは、echoコマンドで確認できます。

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

上記は出力の一例で、コロン区切りでディレクトリの一覧が表示されます。シェルはこの一覧を左から順に探し、最初に見つかったコマンドを実行する仕組みです。

よく見ると、この一覧にカレントディレクトリは含まれていません。だからファイル名だけを入力しても、シェルはカレントディレクトリを探してくれないのです。

./test.shと書けば、カレントディレクトリのtest.shという場所が明確になります。PATHに頼らずファイルの場所を直接指定しているため、シェルは迷わず実行できるというわけです。

ちなみに、lsコマンドの本体は/usr/binなど、PATHに登録されたディレクトリに置かれています。コマンドの置き場所を調べる方法は、whichコマンドで絶対パスを表示する方法の記事で解説しています。

カレントディレクトリをPATHに追加してはいけない理由

毎回./を付けるのは面倒だから、PATHにカレントディレクトリを追加すればいいのでは、と考えた方もいるかもしれません。技術的には可能ですが、カレントディレクトリをPATHに追加するのはセキュリティ上おすすめできません。

なぜ危険なのか、具体的なシナリオで考えてみましょう。

たとえば、悪意のあるユーザーが/tmpのような誰でも書き込めるディレクトリに、lsという名前の不正なスクリプトを置いたとします。PATHにカレントディレクトリが含まれていると、/tmpに移動してlsと打った瞬間、本物のlsではなく不正なスクリプトが実行されてしまう恐れがあります。

この手口はパスハイジャックとも呼ばれ、Unix系のOSでは古くから知られている攻撃手法です。カレントディレクトリが最初からPATHに入っていないのは、こうした誤実行を防ぐための設計なのです。

つまり./は、面倒なだけの飾りではありません。今この場所にあるこのファイルを実行する、と明示するための安全装置と考えると納得できるのではないでしょうか。

ドットを使った他の表記と混同しないように注意

Linuxでは、./以外にもドットを使った表記がいくつも登場します。見た目が似ているぶん混同しやすいので、表で整理しておきましょう。

表記 意味
./script.sh カレントディレクトリのscript.shを実行する
. script.sh(ドットの後にスペース) sourceコマンドと同じ。現在のシェルでスクリプトを読み込む
cp file.txt . コピー先としてカレントディレクトリを指定する
.bashrc(ドット始まりのファイル名) 隠しファイル。ls -aで表示できる

特に間違えやすいのが、./script.shと. script.shの違いです。ドットとファイル名の間にスペースがあるかどうかで、まったく別の動きになります。

. script.shはsourceコマンドの省略形で、新しいプロセスを作らずに現在のシェルの中でスクリプトを読み込みます。.bashrcなどの設定ファイルを、再読み込みするときによく使われる書き方です。

また、cpコマンドやmvコマンドでは、.(ドット)をコピー先や移動先として指定できます。cp /etc/hosts .と書けば、hostsファイルをカレントディレクトリへコピーできるので便利ですよ。

ドット始まりのファイル名は、通常のlsでは表示されない隠しファイルになります。.bashrcや.sshなど、設定関連のファイルやディレクトリによく使われる命名です。

./(ドットスラッシュ)でよくある疑問

最後に、./に関して初心者の方からよく聞かれる疑問に答えておきます。エラーの対処法も紹介するので、つまずいたときの参考にしてください。

./script.shを実行するとPermission deniedになるのはなぜ?

./を正しく付けたのに、Permission deniedというエラーが出ることがあります。これはパスの書き方ではなく、実行権限が原因のエラーです。

Linuxでは、ファイルに実行権限が付いていないとスクリプトとして実行できません。chmod +x script.shで実行権限を付けてから、もう一度./script.shを試してみてください。

現在の権限は、ls -l script.shで確認できます。表示のなかにxが含まれていれば、実行権限が付いている状態です。

lsコマンドに./を付けても意味はあるの?

ls ./とlsは、どちらも同じ結果になります。lsは引数を省略するとカレントディレクトリを表示する仕様のため、./を付けても付けなくても動きは変わりません。

このように、コマンドの引数として渡すパスでは./を省略できる場面が多くあります。一方で、スクリプトの実行だけは前述のPATHの仕組みがあるため、./を省略できないと覚えておきましょう。

./を使わずにスクリプトを実行する方法はある?

bash test.shのように、シェルの引数としてファイル名を渡す方法があります。この書き方では、ファイルに実行権限が無くても実行できます。

/home/user/test.shのように、絶対パスで指定して実行することも可能です。./による指定は、カレントディレクトリのファイルを絶対パスより短く指せる書き方、と整理すると分かりやすいですね。

./の後はTabキーで補完できる?

./まで入力してTabキーを押すと、カレントディレクトリにあるファイル名が補完されます。長い名前のスクリプトを実行するときに、とても便利な機能です。

補完を使えばタイプミスも減らせます。./とTabキーはセットで覚えるのがおすすめです。

macOSやWindowsでも./は使えるの?

macOSのターミナルでも、./はLinuxとまったく同じように使えます。macOSも同じUnix系のOSで、bashやzshといった同系統のシェルが動いているためです。

一方、Windowsのコマンドプロンプトは、カレントディレクトリのプログラムをファイル名だけで実行できる仕様です。ただしPowerShellでは、Linuxと同じようにカレントディレクトリのスクリプトへ.\や./を付ける必要があります。

./を実際に手を動かして練習しよう

./の意味が分かったら、あとは実際にコマンドを打って体で覚えるのが一番の近道です。読むだけの学習と比べて、理解の定着がまるで違ってきますよ。

pwdで現在地を確認し、ls ./で中身を見て、簡単なスクリプトを./で実行してみる。この記事で紹介した一連の流れを、ぜひ自分の環境でなぞってみてください。

手元にLinux環境がない方は、無料で仮想マシンを用意する方法があります。手順はVirtualBoxでLinuxをインストールする手順の解説記事にまとめています。

LPICなどの資格学習を兼ねて練習したい方には、LPICのコマンドを実機で勉強する方法の記事も参考になるはずです。環境構築が難しく感じる方は、次に紹介するブラウザで学べるサービスも検討してみてください。

まとめ

今回の記事では、./(ドットスラッシュ)について解説しました。./(ドットスラッシュ)はカレントディレクトリのことです。

スクリプトを実行するときに./を付けるのは、PATHにカレントディレクトリが含まれていないためでしたね。理由とセットで覚えておけば、もう./で迷うことはないはずです。

さらにLinuxのコマンドの学習をしたい人に向けて、InfraAcademyというインフラ学習サービスのご紹介です。学習サイトの選び方から知りたい方は、サーバー学習におすすめのサイトの紹介記事もあわせてどうぞ。

Linuxの実践的な内容を学習したい、コマンドを打ちながらLinuxを学習したい。そのようなご要望にお応えして、Linuxやネットワークが学習できるサイト「InfraAcademy」をリリースしました!

入門から中級まで初心者でもわかりやすく学習を進めることができます。主な講座は次の通りです。

講座 学べる内容
【Linux入門講座1】ディレクトリと相対パス、絶対パス ./の理解に直結するパスの基礎
【Linux入門講座2】ファイルの操作方法 cpやmvなどの基本操作
【Linux入門講座3】ファイルのアクセス権限 chmodと実行権限の仕組み
【Linux入門講座4】ファイルの編集\~vimの使い方をマスターする\~ エディタでのファイル編集
【Linux入門講座5】ユーザーとグループ ユーザー管理の基本
【Linux入門講座6】ネットワーク ネットワーク設定の入門

↓InfraAcademyの講座の一部です。

上記以外にも、DNSサーバーの構築方法や、Dockerの設定方法などさまざまな講座があります。

インフラエンジニアに必要な知識が学習できます。

InfraAcademyで学習を始める

参考:Linuxのコマンド練習用サイトのInfraAcademyを作成しました。【Linuxのコマンドをブラウザで練習しよう】

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る