【初心者向け】Macでターミナルを使いこなそう！コマンド一覧

# はじめに
こんにちは、エンジニア2年目の嶋田です。
まずは、この記事を開いていただきありがとうございます！

先日、先輩がファイル権限を変える際に自分が知らないコマンドを使っていてもう一度ちゃんと調べて自分も使えるようになりたいと思ったのでコマンドをまとめようと思いました。

# 概要
この記事では、Macでターミナルを使いたいけど、どのコマンドをどう使えばいいかわからない初心者のために、使える基本的なコマンドを解説します。ターミナルは便利なツールで、コマンドを知っていれば作業効率が格段にアップします。この一覧をぜひ利用してください！コマンドは略で決まっているものも多いので何の略なのかも紹介して、覚えやすく感じていただけたら嬉しいです。

## ターミナルの基本
### ターミナルとは
ターミナルとはMacOSに標準装備されているツールです。Windowではほとんど同じ機能に「コマンドプロンプト」があります。簡単に言うと、さまざまな操作をコマンド（命令）するためのツールです。
細かい点では、ファイルやディレクトリの区切り文字や、オプションの指定方法などが異なる場合がありますが、Unixの一種であるMacOSと、Linuxのターミナルで使うことができるコマンドには共通のコマンドがたくさんあります。

### ディレクトリとは
ディレクトリ・・・フォルダのこと。
カレントディレクトリ・・・現在いるディレクトリのこと。
ホームディレクトリ・・・ターミナルを起動したときのデフォルトのディレクトリのこと。

## ファイルとディレクトリの操作
このセクションではファイルとディレクトリの基本的な操作コマンドを紹介します。

### `ls`コマンド（listの略）
`ls`コマンドはカレントディレクトリ内のファイルとディレクトリを一覧表示します。
詳細情報を表示するオプションも利用可能です。

| コマンド   　　　　　　　　| 使用例      　　　　　　　　　　　　　　　　　　   | 説明                            |
|------------|----------------|--------------------------------------|
| `ls`       | `ls`           | カレントディレクトリのファイルとディレクトリを一覧表示します。  |
| `ls -l`    | `ls -l`        | ファイルやディレクトリの詳細情報も表示し、権限や所有者などを確認できます。  |
| `ls -a`    | `ls -a`        | 隠しファイルも含め、すべてのファイルとディレクトリを表示します。  |
| `ls -la`   | `ls -la`       | 隠しファイルを含む、すべてのファイルとディレクトリの詳細情報を表示します。  |


### `cd`コマンド(change directoryの略）
`cd`コマンドは指定したディレクトリに移動します。ディレクトリ名の代わりに`~`を使用するとホームディレクトリに移動できます。`cd ..`コマンドはカレントディレクトリの親ディレクトリに移動します。

| コマンド   　　　　　　　　| 使用例      　　　　　　　　　　　　　　　　　　   | 説明                            |
|------------|----------------|--------------------------------------|
| `cd`       | `cd ディレクトリ名` | 指定したディレクトリに移動します。  |
| `cd ~/`    | `cd ~/`        | ホームディレクトリに移動します。  |
| `cd ..`    | `cd ..`        | カレントディレクトリの親ディレクトリに移動します。  |


これらのコマンドを使いこなすことで、ターミナルでのファイルとディレクトリの操作が容易になります！

## ターミナルでの作業
このセクションでは、ターミナルを使ってファイルとディレクトリを操作するための基本的なコマンドを紹介します。
`pwd`はprint working directoryの略、`mkdir`はmake directoryの略、`mv`はmoveの略、`cp`はcopyの略、`rm`はremoveの略です。

| コマンド   　　　　　　　　| 使用例      　　　　　　　　　　　　　　　　　　   | 説明                            |
|------------|----------------|--------------------------------------|
| `pwd`          | `pwd`                       | カレントディレクトリのパスを表示します。               |
| `touch`        | `touch ファイル名`           | 中身が空のファイルを作成します。                        |
| `mkdir`        | `mkdir ディレクトリ名`       | 新しい空のディレクトリを作成します。                   |
| `mv`           | `mv ソースターゲット`        | ファイルを移動したり、ファイル名を変更します。         |
| `cp`           | `cp ソースターゲット`        | ファイルをコピーします。                               |
| `rm`           | `rm ファイル名`              | ファイルを削除します。                                 |
| `rm -r`              | `rm -r ディレクトリ名`        | ディレクトリを再帰的に削除します。                   |
| `rm -f`           | `rm -f ファイル名`            | ファイルを警告なしに削除します。                       |
| `rm -rf`         | `rm -rf ディレクトリ名`        | ディレクトリを警告なしに再帰的に削除します。         |

これらのコマンドは、ターミナルでのファイルとディレクトリの操作に欠かせないものです。各コマンドの使用法をマスターすることで、効率的な作業が可能になります。
しかし、`rm`コマンドは取り返しのつかないファイルの削除になります。(MacのFinderから削除されたファイルは、通常であればゴミ箱に保存されますが`rm`コマンドで削除されたファイルはゴミ箱に移動せずそのまま消えてしまうのです。)気をつけて使いましょう！

※削除したファイルを開いているプロセスが存在している場合のみコマンド使用で復元が有効らしいです…
もし、「やっちまった…」となったら<a href="https://4ddig.tenorshare.com/jp/mac-recovery-solutions/recover-files-by-rm-command-on-mac.html">こちらの記事</a>を参考にしてみてください。


## ターミナルでのファイル検索・ファイル内容の表示と検索
このセクションでは、ターミナルでファイル検索やファイル内容の表示・検索を行うためのコマンドを紹介します。これらのコマンドを使用することで、特定のファイルを探し出し、ファイルの中身を調べることができます。

### `find`コマンド
`find`コマンドはファイルを検索するコマンドです。デフォルトで指定したファイル以下をすべて検索してくれます。
ファイルの読み込み権限がない場合は末尾にpermission deniedと表示されるので、これが出力された場合にはsudoをつけて実行しましょう。

| コマンド   　　　　　　　　| 使用例      　　　　　　　　　　　　　　　　　　   | 説明                            |
|------------|----------------|--------------------------------------|
| `find`         | `find ディレクトリ -name "文字列"` | ディレクトリ以下から指定した文字列にマッチするファイルを検索します。  |
|                | `find ディレクトリ -type d`        | ディレクトリを探し出します。                       |
|                | `find ディレクトリ -type f`        | ファイルを探し出します。                           |

ファイル検索では、`find`コマンドを使用して指定のディレクトリ内から条件に合致するファイルを探し出します。文字列の検索やディレクトリ/ファイルの種別による検索が行えます。

### `cat`コマンド(concatenate and print filesの略)
`cat`コマンドはファイルの中身を表示します。

| コマンド   　　　　　　　　| 使用例      　　　　　　　　　　　　　　　　　　   | 説明                            |
|------------|----------------|--------------------------------------|
| `cat`          | `cat ファイル名`                   | ファイルの中身を表示します。                     |
| `cat -n`           | `cat -n ファイル名`                | ファイルの中身を行番号と一緒に表示します。       |

### `grep`コマンド(global regular expression printの略)
`grep`コマンドはファイル内から指定の文字列を検索します。検索条件には大小文字の区別をするかどうかなど、さまざまなオプションが使用できます。

| コマンド   　　　　　　　　| 使用例      　　　　　　　　　　　　　　　　　　   | 説明                            |
|------------|----------------|--------------------------------------|
| `grep`         | `grep "検索文字列" ファイル名`    | ファイル内から指定した文字列に一致する行を検索します。  |
|  `grep -i`            | `grep -i "検索文字列" ファイル名` | 大文字小文字を区別せずに検索します。             |
|  `grep -l`            | `grep -l "検索文字列" ファイル名` | 検索した文字列が含まれているファイル名のみを表示します。  |
|  `grep -n`           | `grep -n "検索文字列" ファイル名` | 検索した文字列が書かれている行番号を表示します。  |

ファイル内容の表示と検索には、`cat`コマンドと`grep`コマンドを使用します。
これらのコマンドを使いこなすことで、ファイルの検索や内容の確認がスムーズに行えます。

## プロセス管理
このセクションでは、ターミナルを使用してプロセスを管理するためのコマンドを紹介します。

### `ps`コマンド
`ps`コマンドはプロセスの表示ができるコマンドです。

| コマンド   　　　　　　　　| 使用例      　　　　　　　　　　　　　　　　　　   | 説明                            |
|------------|----------------|--------------------------------------|
| `ps`       | `ps`             | 現在のセッション内で実行中のプロセスの一覧を表示します。  |
| `ps aux`   | `ps aux`         | すべてのプロセスを詳細に表示します。                        |
| `ps -u ユーザー名` | `ps -u user` | 指定したユーザーに関連するプロセスを表示します。         |

### `kill`コマンド
`kill`コマンドとはプロセスを終了させるコマンドです。

| コマンド   　　　　　　　　| 使用例      　　　　　　　　　　　　　　　　　　   | 説明                            |
|------------|----------------|--------------------------------------|
| `kill`   | `kill プロセスID`           | 指定したプロセスを終了させます。      |
|          | `kill -9 プロセスID`        | 強制的に指定したプロセスを終了させます。 |

プロセス管理では、`ps`コマンドを使用して実行中のプロセスの一覧を表示し、`kill`コマンドを使用してプロセスを終了できます。`kill`コマンドには強制終了のオプションもあり、慎重に使用することが重要です。システムの安定性を保つために正しいプロセスを終了させることが求められます。

## ファイルの監視
このセクションでは、ファイルの監視に関連するコマンドを紹介します。

### `tail`コマンド
`tail`コマンドは、ファイルの末尾から内容を表示し、リアルタイムでファイルの更新を監視できる便利なコマンドです。

| コマンド   　　　　　　　　| 使用例      　　　　　　　　　　　　　　　　　　   | 説明                            |
|------------|----------------|--------------------------------------|
| `tail`     | `tail ファイル名`            | 指定したファイルの末尾を表示します。  |
| `tail -f`  | `tail -f ファイル名`         | ファイルの内容をリアルタイムで監視し、新しい行が追加されるたびに表示を更新します。  |
| `tail -n`  | `tail -n 数値 ファイル名`   | 指定した数値の行数だけ表示します。  |

## ファイルの所有権と権限管理
このセクションでは、ファイルの所有権と権限を管理するためのコマンドを説明します。

### `chown`コマンド
`chown`コマンドを使用すると、ファイルやディレクトリの所有者を変更できます。権限の管理において重要な役割を果たします。

| コマンド   　　　　　　　　| 使用例      　　　　　　　　　　　　　　　　　　   | 説明                            |
|------------|----------------|--------------------------------------|
| `chown`    | `chown 新しい所有者 ファイル名` | 指定したファイルの所有者を変更します。  |

#### 使用例
```shell
chown testuser /usr/local/var/test.html  #/usr/test.htmlのファイルの所有権をtestuserに変更する
chown -r testuser /usr/local/var  #/usr/local/var以下のファイルの所有権をすべてtestuserに変更する
```

### `chmod`コマンド
`chmod`コマンドは、ファイルやディレクトリの権限を変更するために使用されます。ファイルの読み取り、書き込み、実行権限を制御できます。

| コマンド   　　　　　　　　| 使用例      　　　　　　　　　　　　　　　　　　   | 説明                            |
|------------|----------------|--------------------------------------|
| `chmod`    | `chmod パーミッション ファイル名`      | 指定したファイルの権限を変更します。  |
|            | `chmod パーミッション ディレクトリ名`  | 指定したディレクトリの権限を変更します。  |

#### 使い方
```shell
chmod u+x test  #testファイルにユーザーの実行の権限を与える
chmod u-r /usr/local/test  #/usr/local/testファイルのユーザーの読み込み権限を取り去る
chmod -R g+w /usr/local  #/usr/local以下の全てのファイルに対してグループの書き込み権限を与える
chmod -R 755 test  #testディレクトリ以下のすべてのファイルとディレクトリにユーザーrwx/グループrx/その他rxの権限を与える
```

#### 権限の見方

| 表示      　　　　    | 意味                                                      |
|--------------|--------------------------------------------------------------|
| -rw-r--r--   | 読み出し可能なファイル。所有者だけが書き込み可能。          |
| -rwx------   | 実行可能なファイル。所有者以外のアクセスはすべて不可。        |
| -rwxrwxrwx   | すべてのユーザーが，すべての操作を行える。                    |
| -rwxrwxr-x   | 所有者とグループ・ユーザーのみ書き込み可能。                  |
| -rwsrwxr-x   | ファイルを実行する際，所有者の権限で実行する。               |
| -rwxrwsr-x   | ファイルを実行する際，グループの権限で実行する。             |
| -rwTrw-rw-   | すべてのユーザーがファイルの変更はできるが，削除やファイル名の変更は所有者のみが行えるファイル。 |
| drwxr-xr-x   | ディレクトリ。他のユーザーは書き込み不可。                   |
| drwx------    | プライベートなディレクトリ。                                    |
| drwxrwxrwt   | すべてのユーザーがディレクトリ内のファイルを作成・変更できるが，削除やファイル名変更は所有者のみが行えるディレクトリ。 |
| lrwxrwxrwx   | シンボリック・リンク。パーミッションはリンク先のものを引き継ぐ。 |

| 記号 | 意味                                   |
|------|----------------------------------------|
| r    | 読み出し可能。マイナス(-)の場合は読み出し不可。 |
| w    | 書き込み可能。マイナス(-)の場合は書き込み不可。 |
| x    | 実行可能。マイナス(-)の場合は実行不可。   |
| t    | ディレクトリへのスティッキ・ビット。所有者のみがディレクトリ内のファイル名の変更，削除を行える。 |
| T    | ファイルへのスティッキ・ビット。所有者のみがファイル名の変更，削除を行える。 |
| s    | セットID。その他のユーザーがファイルを実行する際，所有者またはグループの権限で実行する。 |

| 権限 | 数字 |
|------|------|
| rwx  | 7    |
| rw-  | 6    |
| r-x  | 5    |
| -wx  | 3    |
| r--  | 4    |
| -w-  | 2    |
| --x  | 1    |
| ---  | 0    |


## システム情報の表示
このセクションでは、システム情報の表示に使用されるコマンドを紹介します。

### `uname`コマンド
`uname`コマンドは、システムの情報を表示するために使用されます。カーネルのバージョンやネットワークノードの情報などを取得できます。

| コマンド　　　　　| 使用例   　　　　　　　   | 説明                　　　               |
|------------|----------------|--------------------------------------|
| `uname -a` | `uname -a`    | システムの詳細な情報を表示します。 |
| `uname -n` | `uname -n`    | ホスト名を表示します。     |
| `uname -m` | `uname -m`    | パソコンの種類を出力します。  |
| `uname -r` | `uname -r`    | OSのリリース番号を出力します。 |
| `uname -s` | `uname -s`    | OSの名称を出力します。     |
| `uname -v` | `uname -v`    | OSのバージョンを出力します。 |

# さいごに
最後までお付き合いいただきありがとうございました。
私自身もまだまだ勉強中なので何か間違いがあったらコメントで教えてください！
そして、もっともっとコマンドはあるのでよく使うコマンドやこういう時はこれが使えるよ等ありましたら、そちらも教えていただけると非常に嬉しいです。