[随時更新]覚えておきたいUNIXコマンド

UNIXコマンドをチートシート的な感じでまとめてみました。


## PC及びターミナルの環境
```
MacBookPro(13-inch, M1, 2020)
チップ：Apple M1
使用アプリ：ターミナル(Mac標準搭載)
ターミナル環境：Homebrew
シェル：zsh
```
## コマンドライン(CommandLineInterface/CaracterUserInterface/CUI)とは

クリックなどでコンピュータを操作すること(=GraphicalUserInterface/GUI)の代わりに文字命令(コマンド)だけでコンピュータを操作すること。
この記事ではMacOSなどのUNIX系OSやLinuxで主に利用されるUNIXコマンドについてまとめています。

---
## このページの読み方
| 何の略語なのか
コマンドの意味
```shell:言語名
使い方の例
# 解説や補足など
```
---

## pwd
| print working directory または present working directory
現在のディレクトリを表示する。

## cd
| change directory
ディレクトリを移動する。
```shell:shell
cd workspace
# cd 移動先のディレクトリ名(現在いるディレクトリ直下のディレクトリもしくはファイル)
cd ..
# 一つ上のディレクトリへ移動
cd ../..
# 二つ上のディレクトリへ移動
cd ~
# ホームディレクトリへ戻る
```

## ls
| list segments
ファイルやディレクトリの詳細を表示する。
さまざまなオプションが用意されている。
```shell:shell
ls -l
# ファイルやディレクトリの詳細な情報まで表示することができる
ls -a
# デフォルトでは表示されないドットファイル(隠しファイル)も表示できる
ls -la
# -lと-aオプションを組み合わせてディレクトリ下の全てのファイルの詳細を確認する
ls -F
# ファイル名の後ろにファイルの識別子をつける
```

## mkdir
| make directory
ディレクトリを作成する。
```shell:shell
mkdir workspace(ディレクトリ名)
# workspace という名前のディレクトリを作成
```

## rmdir
| remove directory
空のディレクトリを削除する(空でないと削除はできない)。
```shell:shell
rmdir workspace(ディレクトリ名)
# workspaceという名前の空ディレクトリを削除 
```

## mv
| move directory
ファイルやディレクトリを移動する。
```shell:shell
mv hoge.txt(移動させたいファイルやディレクトリ名) workspace(移動先のディレクトリ名)
# hoge.txtという名前のファイルをworkspaceというディレクトリへ移動

mv workspace workspace2/workspace
# workspaceという名前もディレクトリをworlspace2直下へ移動する

```
ファイルやディレクトリ名を変更することもできる。

```shell:shell
mv hoge.txt(変更したいファイルやディレクトリ名) fuga.txt(変更後のファイルやディレクトリ名)
# hoge.txtというファイルの名称を fuga.txtという名称に変更
```

## cp
| copy
ファイルをコピーする。
```shell:shell
cp hoge.txt(コピー元のファイル名)　copyhoge.txt(コピー後に作成したいファイル名)
# 同一名称のファイルが存在すると上書きされてしまうため要注意
```
ディレクトリのコピーをする場合は `-r`オプションを使う。
```shell:shell
cp -r workspace(コピー元のディレクトリ名) workingspace(コピー後のディレクトリ名)
```

## rm
| remove
ファイルを削除する。
さまざまなオプションが用意されている。
```shell:shell
rm hoge.txt(削除したいファイル名)
# hoge.txtというファイルを削除する

rm -r workspace(削除したいディレクトリ名)
# workspaceというディレクトリを削除する
```

:::note alert
絶対に使用禁止!!!
PCが動作しなくなるため絶対に使用してはならないコマンド(禁術)
```shell:shell
rm -rf /
# 全てのファイルを削除するコマンドでありルートディレクトリ以下の全ファイルを強制削除してしまう
```
`rm` 削除コマンド
`-r` 再起的に削除をするオプション
`-f` 強制的に処理実行するオプション
`/` ルートディレクトリへ適用
上記を組み合わせると強制的にPCを動かすために必要な設定関連のファイルまで消してしまい、PCが動かなくなる!!!!!
:::

## touch
| touch
ファイルを作成する。
```shell:shell
touch hoge.txt(作成したいファイル名)
```

## ln
| link
ファイルやディレクトリへのリンクを作成する。
```shell:shell
ln -s hoge/hoge.txt .symlink
# -sオプションでシンボリックリンク(ファイルの別名)を作成でき、ハードリンク(ファイルの正式名)を短くした名称で扱うことができる
```

## cat
| concatenate(連結する　の意味)
ファイルの中身を表示する。
```shell:shell
cat hoge.txt(中身を表示したいファイル名)
```

## find
| find
ファイルやディレクトリを検索する。
```shell:shell
find ~ -name hoge(探したいファイルやディレクトリ名)
# -nameオプションで名前を指定、hogeという名前のファイルやディレクトリを検索する
```

## grep
| global regular expression print
テキストファイルを正規表現(regular expression)で検索する。
```shell:shell
grep aaa(検索したい表現) hoge.txt(検索先のファイル名)
# hoge.txtからaaaが含まれる行を検索し、表示する
```

## chmod
| change mode
ファイルやディレクトリに対して所有権などの権限を設定する。
- 権限の区分(設定範囲)

| 1桁目 | 2桁目 | 3桁目 |
|:-:|:-:|:-:|
|所有者権限|グループ権限|その他ユーザ権限|

- 主な権限の種別

| 読み込み権限 | 書き込み権限 | 実行権限 |
|:-:|:-:|:-:|
|r|w|x|

- 権限の範囲

| 数値 | 権限種別 | 内容 |
|:-:|:-:|:-:|
|0|---|なし|
|1|--x|実行可能|
|2|-w-|書き込み可能|
|3|-wx|書き込み・実行可能|
|4|r--|読み込み可能|
|5|r-x|読み込み・実行可能|
|6|rw-|読み込み・書き込み可能|
|7|rwx|読み込み・書き込み・実行可能|

```shell:shell
chmod 750(核桁に権限範囲数字) hoge(ファイル名)
# 所有者に7,グループに5,その他ユーザに0の権限を付与している
```

- 記号指定する場合

| 記号 | 対象者 |
|:-:|:-:|
| a  | 全ユーザ  |
| u  | 所有者  |
| g  | グループ  |
| o  | その他ユーザ  |

| 記号 | 付加・除去 |
|:-:|:-:|
| +  | 付加  |
| -  | 除去  |
| =  | 全クリア  |

| 記号 | 主な権限の種別 |
|:-:|:-:|
| r  | 読み  |
| w  | 書き  |
| x  | 実行  |

```shell:shell
chmod a+w(対象者 付加・除去 権限種別) hoge(ファイル名)
# a(全ユーザ)に+(付加)w(書き込み権限)を与えている
```

## echo
| echo(打ち込んだ文字を表示させる「こだま＝エコー」 という由来)
ファイルに文字を追加(文字をそのまま表示)することができる

```shell:shell
echo aiueo(追加したい文字列) >> hoge.txt(追加したいファイル名)
# hoge.txtにaiueoという文字列を追加
# >>は「リダイレクト」を表し、「>」は上書き、「>>」は内容追加ができる
```

## wget
| get
`get` から派生したダブルゲットというコマンド
指定したURLのファイルをダウンロードできる
```shell:shell
wget https://raw.githubusercontent.com/svenfuchs/rails-i18n/master/rails/locale/ja.yml -P config locales/
# wget ダウンロード先のURL
```

## exit
| exit
ターミナル(コマンドライン)を終了する

## さいごに
プログラミング未経験者が学習を始めて半年の間でよく使ったと実感したコマンドをまとめました。
今後実務でよく使うようになったコマンドも随時追加していきます。

## 参考にしたページ
[よく使うかもしれないUNIXコマンド Mac](https://qiita.com/ntkgcj/items/46d78c4d92768e77a1ea)
[ターミナルのコマンドチートシート](https://qiita.com/you8/items/c500fbe7cedbdc9cd04b)
[chmod コマンド](https://qiita.com/ntkgcj/items/6450e25c5564ccaa1b95)