2.3 レッスン 1
はじめに
Certificate: |
Linux Essentials |
---|---|
Version: |
1.6 |
Topic: |
2 Linuxでのやりかたを見つける |
Objective: |
2.3 ディレクトリの利用とファイルの一覧 |
Lesson: |
1 of 2 |
ファイルとディレクトリ
他のオペレーティングシステムのファイルシステムと同様に、Linuxファイルシステムには、 ファイル と ディレクトリ が含まれます。ファイルには、人間が読めるテキスト、実行可能プログラム、コンピュータが使用するバイナリデータなどが含まれています。ディレクトリは、ファイルシステムを組織化するために使用します。ディレクトリには、ファイルや別のディレクトリを含めることができます。
$ tree Documents ├── Mission-Statement.txt └── Reports └── report2018.txt 1 directory, 2 files
この例では、Documents
は、1つのファイル( Mission-Statement.txt
)と1つの サブディレクトリ ( Reports
)を含むディレクトリです。また、 Reports
ディレクトリには、 report2018.txt
という名前のファイルが1つのみ含まれています。 Documents
ディレクトリは Reports
ディレクトリの 親 であると言います。
Tip
|
お使いのシステムで |
ファイルとディレクトリの名前
Linuxのファイル名とディレクトリ名には、アルファベットの小文字と大文字、数字、スペース、特殊文字を含めることができます(訳注: 多くのディストリビューションでは日本語(全角文字)も使用可能です)。ただし、Linuxシェルでは特別な意味を持つ特殊文字がいくつもあるので、ファイルやディレクトリに名前を付けるときにスペースや特殊文字を使用しないことがお勧めです。たとえば、スペースを正しく入力するには、 エスケープ文字 \
が必要になります。
$ cd Mission\ Statements
ファイル名 report2018.txt
を見てみましょう。ファイル名として、ピリオド( .
)の後に サフィックス (suffix/接尾辞)を含めることがよくあります。 Windowsとは異なり、Linuxではこのサフィックスに特別な意味はありません。単に、人間が理解しやすい名前とするだけです。この例の .txt
は、これがプレーンテキストファイルであることを示していますが、技術的にはあらゆる種類のデータを含めることができます。
ファイルシステムの探検
現在の位置を知る
BashなどのLinuxシェルはテキストベースですから、ファイルシステム内を移動するときは、現在の場所を知る必要があります。 コマンドプロンプト にこの情報が含まれています:
user@hostname ~/Documents/Reports $
user
や hostname
などの情報については、後のセクションで説明します。プロンプトから、現在の場所が Reports
ディレクトリであることがわかります。また、 pwd
コマンドは、 作業ディレクトリ を表示(Print Working Directory)します:
user@hostname ~/Documents/Reports $ pwd /home/user/Documents/Reports
ディレクトリの親子関係はスラッシュ( /
)で示されます。 Reports
は Documents
の、 Documents
は user
の、 user
は home
の、それぞれサブディレクトリです。 home
には親ディレクトリがないようですが、そうではありません。 home
の親は root (ルート)と呼ばれ、最初のスラッシュ( /
)で示されます。ルートディレクトリについては、後のセクションで説明します。
pwd
コマンドの出力は、コマンドプロンプトに表示されているパスとは少し異なることに気づきましたか。コマンドプロンプトには、 /home/user
の代わりにチルダ( ~
)が表示されています。チルダは、ユーザーのホームディレクトリを表す特殊文字です。これについては、次のレッスンで詳しく説明します。
ディレクトリの内容をリスト表示する
現在のディレクトリの内容は、 ls
コマンドでリスト表示されます:
user@hostname ~/Documents/Reports $ ls report2018.txt
ls
コマンドは、親ディレクトリに関する情報を表示しないことに注意しましょう。同様に、デフォルトでは ls
は、サブディレクトリの内容に関する情報を表示しません。 ls
は現在のディレクトリにあるものを “一覧” するのみです。
現在のディレクトリを変更する
Linuxにおけるファイルシステムのナビゲーションは、主に cd
コマンド(Change Directory)で、現在のディレクトリを変更します。前述の pwd
コマンドを使用すると、現在のディレクトリが /home/user/Documents/Reports
であることがわかります。移動先のパスを入力して、現在のディレクトリを変更できます。
user@hostname ~ $ cd /home/user/Documents user@hostname ~/Documents $ pwd /home/user/Documents user@hostname ~/Documents $ ls Mission-Statement.txt Reports
変更後の位置からは、 Mission-Statement.txt
と、サブディレクトリ Reports
が “見え” ますが、サブディレクトリの内容は見えません。次のように、元の Reports
ディレクトリに戻ることができます:
user@hostname ~/Documents $ cd Reports user@hostname ~/Documents/Reports $ pwd /home/user/Documents/Reports user@hostname ~/Documents/Reports $ ls report2018.txt
開始点に戻りました。
絶対パスと相対パス
pwd
コマンドは、常に 絶対パス を出力します。つまりパスには、ファイルシステムの最上部( /
)から最下部( Reports
)までのパスのすべての要素が含まれます。絶対パスは常に /
で始まります。
/ └── home └── user └── Documents └── Reports
絶対パスには、ファイルシステムの任意の場所から Reports
にアクセスするために必要なすべての情報が含まれています。欠点は、入力するのが面倒なことです。
2番目の例(cd Reports
)は、入力がはるかに簡単でした。これは、 相対パス の例です。相対パスは短いですが、現在の場所に居る場合にのみ意味があります。例えてみましょう: 私があなたの家に居るとします。あなたは、友達が隣の家に居ると教えてくれます。今居る場所からの相対位置なので、私はそれがどこなのか分かります。しかし、私があなたの家を知らなければ、友達の家がどこなのか分かりません。完全な番地が必要です。
特別な相対パス
Linuxシェルでは、ナビゲート時にパス入力を短くする方法があります。その特別なパスを見るには、 ls
コマンドに -a
フラグを指定します。このフラグは ls
コマンドの動作を変更して、隠しファイルと隠しディレクトリを含む すべての ファイルとディレクトリをリスト表示します:
user@hostname ~/Documents/Reports $ ls -a . .. report2018.txt
Note
|
|
このコマンドでは、2つの結果が追加されています。これらが特別なパスです。この2つは新しいファイルやディレクトリを表すのではなく、すでに知っているディレクトリを表現しています。
.
-
現在の位置 を示します(この場合では
Reports
)。 ..
-
親ディレクトリ を示します(この場合では
Documents
)
現在の位置を示す特別な相対パスを使用することは、通常ありません。./report2018.txt
と入力するよりも、 report2018.txt
と入力する方が、簡単で理解しやすからです。しかし、 .
を使用する場面については、後のセクションで学習します。ここでは、親ディレクトリを示す相対パスに注目しましょう。
user@hostname ~/Documents/Reports $ cd .. user@hostname ~/Documents $ pwd /home/user/Documents
この例では、絶対パスではなく ..
を使うと、cd
コマンドがずっと簡単になっています。このパターンを組み合わせることで、ファイルツリーの上への移動がすばやく行えます。
user@hostname ~/Documents $ cd ../.. $ pwd /home
演習
-
以下のパスが、 絶対パス か 相対パス かを答えましょう:
/home/user/Downloads
../Reports
/var
docs
/
-
次のファイル構造を観察しましょう。注:
tree
コマンドに-F
オプションを指定すると、ディレクトリ名の末尾にスラッシュ(/
)が表示されます。ルート(/
)ディレクトリでtree
コマンドを実行するには、権限の昇格が必要です。以下は出力例であり、完全なディレクトリ構造を示すものではありません。これを使用して、次の質問に答えてください$ sudo tree -F / / ├── etc/ │ ├── network/ │ │ └── interfaces │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d/ │ └── udev.conf └── home/ ├── lost+found/ └── user/ └── Documents/ 12 directories, 5 files
このファイル構造を見ながら、以下の質問に答えましょう。
ユーザーが、次のコマンドを入力しました:
$ cd /etc/udev $ ls -a
ls -a
コマンドは何を出力しますか? -
以下の各問について、可能な限り短いコマンドを答えましょう:
-
現在の位置は root(
/
)です。home
ディレクトリにあるlost+found
に移動するコマンドを答えましょう。(例)$ cd home/lost+found
-
現在の位置は root(
/
)です。/etc/network/
というディレクトリに移動するコマンドを答えましょう。 -
現在の位置は
/home/user/Documents/
です。/etc/
というディレクトリに移動するコマンドを答えましょう。 -
現在の位置は
/etc/systemd/system/
です。/home/user/
というディレクトリに移動するコマンドを答えましょう。
-
-
次のコマンドについて考察しましょう:
$ pwd /etc/udev/rules.d $ cd ../../systemd/user $ cd .. $ pwd
最後の
pwd
コマンドの出力は何になりますか?
発展演習
-
ユーザーが次のコマンドを入力したとしましょう:
$ mkdir "this is a test" $ ls this is a test
このディレクトリに移動するための
cd
コマンドはどうなりますか? -
前問と同じことを再度行います。ただし、
cd this
を入力した後に、タブキーを押してみましょう。今度は、プロンプトに何が表示されますか?これは、補完(autocompletion)の一例です。これは、時間を節約するだけでなく、スペルミスを避けるためにも役立つツールです。
-
名前に文字
\
を含むディレクトリを作りましょう。その名前をls
コマンドで確認して、さらに削除しましょう。
まとめ
このレッスンでは、次のような事柄を学習しました:
-
Linuxファイルシステムの基本
-
親
ディレクトリと、サブディレクトリ
の違い -
絶対パス
と相対パス
の違い -
特別な相対パス
.
と..
-
cd
でファイルシステムを探検する -
pwd
で現在の位置を表示する -
ls -a
で すべての ファイルやディレクトリをリストする
このレッスンでは、以下のコマンドを取り上げました:
cd
-
現在のディレクトリを変更する
pwd
-
現在のディレクトリのパスを表示する
ls
-
ディレクトリの内容をリストする、また、ファイルの属性を表示する
mkdir
-
新しいディレクトリを作成する
tree
-
ディレクトリツリーの階層構造を表示する
演習の解答
-
以下のパスが、絶対パス か 相対パス かを答えましょう:
/home/user/Downloads
絶対
../Reports
相対
/var
絶対
docs
相対
/
絶対
-
次のファイル構造を観察しましょう。注:
tree
コマンドに-F
オプションを指定すると、ディレクトリ名の末尾にスラッシュ(/
)が表示されます。ルート(/
)ディレクトリでtree
コマンドを実行するには、権限の昇格が必要です。以下は出力例であり、完全なディレクトリ構造を示すものではありません。これを使用して、次の質問に答えてください$ sudo tree -F / / ├── etc/ │ ├── network/ │ │ └── interfaces │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d/ │ └── udev.conf └── home/ ├── lost+found/ └── user/ └── Documents/ 12 directories, 5 files
ユーザーが、次のコマンドを入力しました:
$ cd /etc/udev $ ls -a
ls -a
コマンドは何を出力しますか?. .. rules.d udev.conf
-
以下の各問について、可能な限り短いコマンドを答えましょう:
-
現在の位置は root(
/
)です。home
ディレクトリにあるlost+found
に移動するコマンドを答えましょう。(例)$ cd home/lost+found
-
現在の位置は root(
/
)です。/etc/network/
というディレクトリに移動するコマンドを答えましょう。$ cd etc/network
-
現在の位置は
/home/user/Documents/
です。/etc/
というディレクトリに移動するコマンドを答えましょう。$ cd /etc
-
現在の位置は
/etc/systemd/system/
です。/home/user/
というディレクトリに移動するコマンドを答えましょう。$ cd /home/user
-
-
次のコマンドについて考察しましょう:
$ pwd /etc/udev/rules.d $ cd ../../systemd/user $ cd .. $ pwd
最後の
pwd
コマンドの出力は何になりますか?/etc/systemd
発展演習の解答
-
ユーザーが次のコマンドを入力したとしましょう:
$ mkdir "this is a test" $ ls this is a test
このディレクトリに移動するための
cd
コマンドはどうなりますか?$ cd this\ is\ a\ test
-
前問と同じことを再度行います。ただし、
cd this
を入力した後に、タブキーを押してみましょう。今度は、プロンプトに何が表示されますか?$ cd this\ is\ a\ test
これは、補完(autocompletion)の一例です。これは、時間を節約するだけでなく、スペルミスを避けるためにも役立つツールです。
-
名前に文字
\
を含むディレクトリを作りましょう。その名前をls
コマンドで確認して、さらに削除しましょう。もう一つのバックスラッシュでバックスラッシュをエスケープする(
\\
)か、ディレクトリ名全体をシングルクオートないしダブルクオートで囲みます:$ mkdir my\\dir $ ls 'my\dir' $ rmdir 'my\dir'