# 17.6.2. ディレクトリの操作
**Source**: https://hwb.ecc.u-tokyo.ac.jp/hwb2023/applications/shell/fs/ope-dir/
**Parent**: https://hwb.ecc.u-tokyo.ac.jp/hwb2023/literacy/email/
ここでは、ディレクトリの操作や内部の一覧表示の方法について説明します。
- カレントディレクトリの変更(`cd` コマンド)
- ディレクトリやファイルの一覧表示(`ls` コマンド)
- 空のディレクトリの作成と削除(`mkdir`, `rmdir` コマンド)
これらの操作は、Finder では[11.5. フォルダの作成と活用](https://hwb.ecc.u-tokyo.ac.jp/hwb2023/literacy/filesystem/folder)
と対応します。
> **成功時は無言** —
> これまで `ls`や`cal`など表示を目的とするするコマンドは、実行したら応答がありました。
> 一方、このページやこれ以降で紹介するファイル等を操作するコマンドは、エラーがなければ特にメッセージがありません。
> 動作結果を確認したい場合は、`ls` などを別途使う必要があります。
## カレントディレクトリの変更 [#](#cd)
カレントディレクトリを変更するには、`cd` を利用します。
`cd` の後に引数として、変更後にカレントディレクトリにしたいディレクトリの名前を指定します。引数を何も指定しないと、カレントディレクトリは自分のホームディレクトリに戻ります。
cd ディレクトリのパス
このコマンドによってカレントディレクトリを変更することを単に「移動する」と呼ぶこともあります。
例として、まず `/usr/bin` に移動し、その後親ディレクトリの `/usr` に移動し、最後にホームディレクトリに戻ってみます。
cd /usr/bin
pwd
```
/usr/bin
```
cd /usr
pwd
```
/usr
```
cd ~
pwd
```
/home01/0000000000
```
なお、場合によっては移動先のディレクトリが存在してもカレントディレクトリの移動ができない場合があります。それにはパーミッションが関係しています。パーミッションについては、[17.6.4. パーミッションと実行ファイル](https://hwb.ecc.u-tokyo.ac.jp/hwb2023/applications/shell/fs/permission)
で説明します。
教育用計算機システムのコマンドラインにおいて、`/home/hwb/exercise/` にカレントディレクトリを変更してみましょう。ここのディレクトリには、ファイルやディレクトリ操作の練習のためのファイルやディレクトリが作成されています。\
次のうち、`/home/hwb/exercise` ディレクトリに置かれて**いない**ディレクトリはどれでしょう。
- taro
- ichiro
- hanako
`ls` コマンドを使って表示させてもいいですし、存在しないディレクトリに `cd` しようとするとエラーが表示されることを使ってもわかります。
## 一覧表示 [#](#ls)
あるディレクトリの中にあるファイルやディレクトリの一覧を表示するには、`ls` コマンドを使います。
ls パス
`ls` コマンドは、パス指定を省略した場合はカレントディレクトリが指定されたと解釈します。
相対パス名または絶対パス名([17.6.1. パスの表記](https://hwb.ecc.u-tokyo.ac.jp/hwb2023/applications/shell/fs/dir)
参照)を指定して、他のディレクトリにあるファイルの一覧を表示することもできます。
ls Sites
```
images index.html
```
ls ~/home01/0000000000/Sites
```
images index.html
```
### 隠しファイルを含めて表示 [#](#hidden)
`-a` オプションの指定で、名前が `.`(ピリオド)で始まるファイルの一覧を表示することができます。
名前がピリオドで始まるファイルは、慣行として、隠しファイルと扱われ通常は (GUIでも) 表示されません。
ls -a Sites
```
. .DS_Store .localized index.html
.. ._images images
```
上に表示されている `.` や `..` は相対パス名の説明に登場したのと同じ、`ls` で表示したディレクトリ自身と、その親ディレクトリです。この二つのディレクトリ名は全てのディレクトリで表示されます (ただしルートディレクトリの `..` はルートディレクトリ自身です)。これらは、慣習で表示されているもので、木構造の子ではありません。
### 種類を区別して表示 [#](#type)
ここまでの一覧表示の仕方では、普通のファイルとディレクトリの区別がつきません。そこで、`-F` オプションを指定することによってファイルの種類を区別して表示させることができます。ディレクトリ名には後ろに /(スラッシュ)がつき、実行ファイルには \*(アスタリスク)がつきます。
ls -F Sites
```
images/ index.html
```
ls -F /opt/local/bin/ptex
```
/opt/local/bin/ptex*
```
`F` は大文字であることに注意してください。UNIXのコマンドでは大文字と小文字は区別されます。
### 詳細情報を表示 [#](#detail)
ファイルの詳細情報を表示するには、**-l オプション**を指定します。
ls -l Sites
```
total 15
drwxr-xr-x@ 2 0000000000 student 1024 1 14 2004 images
-rw-r--r-- 1 0000000000 student 6161 8 29 2003 index.html
```
各行の意味について詳しくは後の[17.6.4. パーミッションと実行ファイル](https://hwb.ecc.u-tokyo.ac.jp/hwb2023/applications/shell/fs/permission)
で説明します。
### カラー表示 [#](#color)
`-G` オプションを使うと、結果をカラー表示させることができます。
### 同時に複数のオプションの指定 [#](#combination)
以上説明したオプションは、いくつかまたはすべてを同時に指定することができます。
ls -laF ~/Sites
```
total 37
drwxr-xr-x@ 3 0000000000 student 1024 4 21 2005 ./
drwx------ 23 0000000000 student 3072 3 6 11:52 ../
-rw-r--r-- 1 0000000000 student 6148 4 21 2005 .DS_Store
-rw-r--r-- 1 0000000000 student 82 1 14 2004 ._images
-rwxr-xr-x 1 0000000000 student 0 9 9 2003 .localized*
drwxr-xr-x@ 2 0000000000 student 1024 1 14 2004 images/
-rw-r--r-- 1 0000000000 student 6161 8 29 2003 index.html
```
教育用計算機システムにおいて、`/home/hwb/exercise/taro/` の直下にあるディレクトリの個数はいくつでしょう。
- 0
- 1
- 2
`ls -F /home/hwb/exercise/taro/` で 末尾に`/`がついたものの数です。
## 空のディレクトリ作成 [#](#mkdir)
ここでは、新しいディレクトリの作成と、中身が**空の**ディレクトリの削除方法について説明します。複製、移動や、中身の入ったディレクトリの削除方法については、別ページ[17.6.3. ファイルの操作](https://hwb.ecc.u-tokyo.ac.jp/hwb2023/applications/shell/fs/ope-file)
で説明します。
新しい空のディレクトリの作成を作成するには、`mkdir` コマンドを利用します。以下に、カレントディレクトリの下に hoge ディレクトリを作る例を示します。
ls
```
hwb
```
mkdir hoge
ls
```
hoge hwb
```
`mkdir` コマンドに `-p` オプションをつけると、2階層以上のディレクトリを一度に作ることができます。
mkdir piyo/fuga
```
mkdir: piyo: No such file or directory
```
通常 (`-p` オプションなしでは)、1階層のみディレクトリを作ることができますそのため。
piyo ディレクトリがない状態で上記のコマンドを実行すると「fuga ディレクトリを作る前提のpiyo ディレクトリがない」というエラーメッセージが出ます。
mkdir -p piyo/fuga
ls piyo
```
fuga
```
`-p` オプションをつけて実行すると、piyo ディレクトリと、その下にさらに fuga ディレクトリが作成されました。
## 空のディレクトリ削除 [#](#rmdir)
中身が空のディレクトリを削除するには `rmdir` コマンドを使います。
ls -F
```
hoge/ hwb piyo/
```
rmdir hoge
消えました。
ls -F
```
hwb piyo/
```
rmdir piyo
```
rmdir: piyo: Directory not empty
```
上の例にある piyo ディレクトリは、中に fuga というディレクトリを持っていますので、rmdir コマンドでは削除できません。