ファイル操作の基本コマンド


Linuxではあらゆる種類の情報をファイルとして扱うため、
ファイルの操作に慣れておくことはLinuxを使う上でとても重要です。
そこで、今回はファイル操作における基本的なコマンドと、その使い方を紹介していきます。

## ファイルの操作


### 1.ファイルの新規作成

**touch <作成したいファイル名>**

``` bash
$ touch hoge
# hogeという名前のファイルが新規作成される
```

また、スペース区切りで複数のファイルを指定することにより、
複数のファイルが作成される。
このように複数のファイルを一度に指定する方法は、これから紹介する
以下のコマンドでも同じように使用できる

- rm : 複数のファイルが削除される
- cat : 複数のファイルが連結して表示される

**touch <作成したいファイル名1> <作成したいファイル名2> <作成したいファイル名3>**

``` bash
$ touch hoge1 hoge2 hoge3
# 3つのファイルが1回のコマンド実行で作成される。
```

---

### 2.ファイルの削除

**rm <削除するファイルパス>**

``` bash
$ rm hoge
# newfileが削除される
```

なお、rmコマンドを実行してしまうと確認なしにファイルが削除されてしまう。
そのため、削除する前に確認をはさむ場合は-iオプションを付ける。

``` bash
$ rm -i hoge
rm: 通常ファイル 'hoge' を削除しますか？
# 削除する場合は'y'を、しない場合は'n'を入力する
```

---

### 3.ファイルの上書き

**cp <上書き元ファイルパス> <上書きしたいファイルパス>**

``` bash
$ cp hoge1 hoge2
# hoge2がhoge1で上書きされる。
```

こちらもrmコマンド同様に上書き前に確認をはさむ場合は-iオプションを付ける。

``` bash
$ cp -i hoge1 hoge2
rm: 'hoge2'を上書きしますか？
# 上書きする場合は'y'を、しない場合は'n'を入力する
```

---

### 4.ファイルの中身確認

**cat <中身を確認するファイル>**

``` bash
$ cat hoge
これはテストです。
# hogeに挿入されている内容が表示される。
```

なお、1でも紹介したとおり、catコマンドでは複数のファイルを指定すると、
ファイルの中身が連結されて表示される。
(これはcatがconcatenate(連結する)の略であることから。)

また、catコマンドではオプションを付けることによって表示形式を
変更することができる

|オプション|説明|
|--------|----|
|-n|行数を表示する|
|-E|行末に$をつけて表示する|
|-b|空白行以外の行を行数とセットで表示|

**※注意**
catコマンドはファイルの文字コードの取り決めに従って、
数値を文字に置き換えたものを表示している。
そのため、「文字コード以外の数値が含まれているようなファイル」を表示しようとすると
数値を無理やり文字に置き換えようとするため、文字化けが発生する。
これは後で紹介するlessコマンドも同様である。

``` bash
$ cat /bin/pwd
# 画像はコマンドの実行結果を一部抜粋したものである。
# ご覧のように文字化けが発生しているのが分かる。
```

<img width="900px" alt="スクリーンショット 2020-02-16 10.18.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346267/dced9fa4-4ae4-134b-6e3c-bc8d7fa04de3.png">

catコマンドでもファイルの中身を見ることはできるが、
1画面内に収まりきらないファイルの内容を表示する場合は
lessコマンドを使うことをおすすめする。

lessコマンドは長いファイルを1画面ごとに表示し、スクロールバーを
動かさなくても、キーボードだけでファイルを移動して表示することができる。
また、qを押すまではファイル閲覧専用モードなので、ファイルの閲覧だけに
特化しているのもおすすめする理由。

**less <ファイルパス>**

以下がファイルを移動する際に使うキーの一覧である。

|キー|実行結果|
|--------|----|
|f、スペースキー|1画面下に移動する|
|b|1画面上に移動する|
|j|1行下に移動する|
|k|1行上に移動する|

---

### 5.ディレクトリの作成

**mkdir <ディレクトリ>**

``` bash
$ mkdir hogedir
# hogedirというディレクトリが作成される
```

深いディレクトリを一気に作成したい場合は-pオプションを付ける

``` bash
$ mkdir -p test/sample/hogedir
```

---

### 6.ディレクトリの削除

ディレクトリの中身が空であるかどうかによって、指定するコマンドが変わってくる。

#### ディレクトリが空ではない場合

対象となるディレクトリ配下にファイルやディレクトリが存在する場合は
rmコマンドに-rオプションを付けて削除する。

**rm -r <削除対象ディレクトリパス>**

``` bash
$ ls hogedir
dir1 dir2 file1.txt
# 削除対象のディレクトリが空ではないことを確認する
$ rm -r hogedir
# ディレクトリに配置されたファイルも含めて、ディレクトリが削除される
```

#### ディレクトリが空の場合

rmdirはディレクトリ内にファイル、ディレクトリが配置されていない場合に
使えるコマンドである。
ただし、rmdirは.(ドット)から始まる隠しファイルが含まれていると
実行してもエラーとなる。
そのため、実行前は通常ファイルだけでなく、隠しファイルも含めて
ディレクトリが空であることを確認する。

**rmdir <削除するディレクトリパス>**

``` bash
$ ls -a hogedir
# 隠しファイルも含めてディレクトリが空であることを確認する。
$ rmdir hogedir
# 空ディレクトリが削除される
```

---

### 7.ファイル名変更

**mv <変更前のファイルパス> <変更後のファイルパス>**

2つの引数がどちらともファイルであり、変更後のファイルが存在しない場合は
ファイル名の変更が行われる。
変更後のファイルがすでに存在した場合は、
cpコマンド同様にファイルの上書きが行われる。

``` bash
$ mv hoge1 hoge2
# hoge1の名前がhoge2に変わる
```

また、ディレクトリでも同じような方法で名前を変更できる。

**mv <変更前のディレクトリパス> <変更後のディレクトリパス>**

こちらも変更後のディレクトリが存在しない場合に
ディレクトリ名の変更が行われる。
変更後のディレクトリがすでに存在した場合は
8.のような実行結果となる。

---

### 8.ディレクトリへの移動

ここでは7.で紹介したmvコマンドを用いる

**mv <移動するファイルパス(スペース区切りで複数指定可)> <移動先ディレクトリパス>**

このように最後に指定する引数がファイルではなく、ディレクトリである場合には
名前変更ではなく、ディレクトリへの移動が行われる。

``` bash
$ mv hoge1 hoge2 hoge3 hogedir
# 3つのファイルがhogedirリに移動する
```

また、ファイルに限らずディレクトリをディレクトリ配下に移動することも
同じ方法でできる。

**mv <移動するディレクトリパス(スペース区切りで複数指定可)> <移動先ディレクトリパス>**

``` bash
$ mv hogedir1 hogedir2
# hogedir2配下にhogedir1が移動する。
```

## 参考書籍

[新しいLinuxの教科書](https://www.amazon.co.jp/%E6%96%B0%E3%81%97%E3%81%84Linux%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E4%B8%89%E5%AE%85-%E8%8B%B1%E6%98%8E/dp/4797380942/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E6%96%B0%E3%81%97%E3%81%84Linux&qid=1581934969&sr=8-1)
[入門者のLinux](https://www.amazon.co.jp/%E5%85%A5%E9%96%80%E8%80%85%E3%81%AELinux-%E7%B4%A0%E6%9C%B4%E3%81%AA%E7%96%91%E5%95%8F%E3%82%92%E8%A7%A3%E6%B6%88%E3%81%97%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6-%E3%83%96%E3%83%AB%E3%83%BC%E3%83%90%E3%83%83%E3%82%AF%E3%82%B9-%E5%A5%88%E4%BD%90%E5%8E%9F-%E9%A1%95%E9%83%8E/dp/4062579898/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1Y34EY7W6ONAV&keywords=%E5%85%A5%E9%96%80%E8%80%85%E3%81%AElinux&qid=1581934995&sprefix=%E5%85%A5%E9%96%80%2Caps%2C171&sr=8-1)