Linuxでよく使う基本的なコマンドの逆引きチートシート

これからLinuxを始める知人に見せるために書きました
- 必要そうなのは随時増やします
- 書くと長そうなのは最低限だけ書いて残りをリンク先に丸投げします

ここに書かれたコマンドは全て非管理者権限のシェルで実行されることを想定しています
- 管理者権限が必要なコマンドは頭に`sudo`をつけています（現状はない）
- アクセスするのに管理者権限が必要な場合も`sudo`をつけてください
このページは[Scrapbox](https://scrapbox.io/Mijinko/Linuxでよく使う基本的なコマンドの逆引き一覧)からの移植です

# 全般
## コマンドのヘルプを見る
```
<コマンド> --help
```
または
```
<コマンド> -h
```
- どちらかしか対応していない場合がある

## コマンドのマニュアルを見る
```
man <コマンド>
```
- 全てのコマンドが対応しているわけではない
- 日本語化されていないマニュアルもある

## コマンドオプションについて
- `ls -a`の`-a`のことをオプションという
  - `-`(ハイフン)から始まるのがオプション
- アルファベット1文字のオプションと複数文字のオプションがある
  - 例) `ls -a`と`ls --all`
- ほとんどのオプションは複数同時に使える
  - 例) `ls -a -l`
- 1文字のオプションは連結できる
  - `ls -a -l` -> `ls -al`


# ディレクトリ操作系
## カレントディレクトリを変更する
```
cd <ディレクトリ>
```

### ホームディレクトリをカレントディレクトリにする

```
cd
```
または
```
cd $HOME
```

## カレントディレクトリを確認する
```
pwd
```

## ファイルの一覧を見る
### カレントディレクトリの中を見る場合
```
ls
```
### 特定のディレクトリの中を見たい場合
```
ls <ディレクトリ>
```
### ファイルごとの詳細な情報も見たい場合
```
ls -l
```
または
```
ll
```
- .bashrcなどでエイリアスが有効になっている場合のみ使える

表示される主な情報
- パーミッション
- ファイルタイプ（ディレクトリかどうかもわかる）
- 作成日時
- 更新日時
- ファイルサイズ
- ファイル名・ディレクトリ名
- リンク先（シンボリックリンクの場合）
  - ハードリンクも何か出たっけ？

### 隠しファイルや隠しディレクトリも表示したいとき
```
ls -a
```
または
```
la
```
- .bashrcなどでエイリアスが有効になっている場合のみ使える

### ファイルのみを表示したいとき
```
ls -F | grep -v / | sed s/\*$//g
```

### ディレクトリのみを表示したいとき
```
ls -F | grep / | sed s/\\/$//g
```
- 参考：[Linux: LSコマンドでファイルのみ・ディレクトリのみを表示する方法 - Qiita](https://qiita.com/frozencatpisces/items/9e09f55ede49ef0c64dd)

## ファイルを移動する
```
mv <移動前> <移動先>
```

```sh:例
mv foo.sh ./bar/
```
- foo.shをbarディレクトリの中に移動する

### ファイル名を変更するのにも使える
```
mv <変更前> <変更後>
```
```sh:例
mv foo.sh bar.sh
```
- foo.shのファイル名をbar.shに変更する

## ファイルをコピーする
```
cp <コピー前の場所> <コピー後の場所>
```
### ディレクトリを丸ごとコピーする場合
```
cp -r <コピー前の場所> <コピー後の場所>
```

## ファイルを削除する
```
rm <削除するファイル>
```

<br>

`-f`を付けないとファイルを削除するときに本当に削除していいか訊かれることがある
```
rm -f <削除するファイル>
```
### ディレクトリごと削除する場合
```
rm -rf <削除するディレクトリ>
```
- `-f`を付けないとディレクトリの中のファイルごとにいちいち質問されて面倒
- つけ忘れて実行してしまった場合は`Ctrl-c`で中断して初めからやり直そう

## ファイルの圧縮・解凍
- 方法が多岐に渡るため省略
  - [【メモ】Linux圧縮/解凍コマンド - Qiita](https://qiita.com/t-kubo0325/items/158e02aa6b8e62b76242)
  - [Linux ファイルの圧縮、解凍方法 - Qiita](https://qiita.com/supersaiakujin/items/c6b54e9add21d375161f)

## リンクの作成
### シンボリックリンク（Windowsで言うショートカット）を作成する
```
ln -s <ファイル名> <リンク名>
```
- `-s`がないとハードリンクになってしまうので注意


# 権限（パーミッション）編集系
## 権限の基礎知識
- これを知らないことには何も始まらない
### 権限を設定できる__対象__は3つ
- `u`: 所有者
- `g`: 所有グループ
- `o`: それ以外
  - `a`: 上記3つすべて
### 権限の種類も3つ
- `r`: 読み取り権限
- `w`: 書き込み権限
- `x`: 実行権限
  - あくまでファイル自身を直接実行する場合
  - シェルスクリプトをshコマンドの引数に渡して実行する場合などでは必要ない

## 権限を確認する
```
ls -l
```

- 「ファイルごとの詳細な情報も見たい場合」と全く同じコマンド
- 読み方は以下を参照
  - [パーミッションの確認 | Linuxの権限確認と変更(chmod)（超初心者向け） - Qiita](https://qiita.com/shisama/items/5f4c4fa768642aad9e06#パーミッションの確認)

## 任意の権限を許可する
```
chmod <対象>+<種類> <ファイル>
```
```sh:例
chmod o+w foo.txt
```
- `foo.txt`を誰でも書き込みできるようにする

## 任意の権限を剥奪する
```
chmod <対象>-<種類> <ファイル>
```
```sh:例
chmod a-x foo.sh
```
- `foo.sh`を(root以外)誰も実行できないようにする

## ディレクトリとその中のファイル全てを一括で変更する
```
chmod -R <パーミッション> <ファイル>
```
- 大文字の`R`なので注意
### 参考
- [Linuxの権限確認と変更(chmod)（超初心者向け） - Qiita](https://qiita.com/shisama/items/5f4c4fa768642aad9e06)

## 所有者を変更する
```
chown <所有者のユーザー名> <ファイル>
```
## 所有グループを変更する
```
chown <所有者のユーザー名>:<所有グループ名> <ファイル>
```
- 所有者を省略してコロン(`:`)から右だけを書いてもいい
## ディレクトリとその中のファイル全てを一括で変更する
```
chown -R <所有者のユーザー名> <ファイル>
```
```
chown -R :<所有グループ名> <ファイル>
```
```
chown -R <所有者のユーザー名>:<所有グループ名> <ファイル>
```
- 大文字の`R`なので注意


# ソフトウェア（パッケージ）の管理
- ディストリビューションによって違う

## RedHat系（CentOSなど）
`yum`コマンドを使う
- [yumコマンド一覧 - Qiita](https://qiita.com/kazu56/items/3eeab8884f62be1cf3e6)

## Debian系（UbuntuやRaspberry Pi OSなど）
`apt`コマンドを使う
- [aptコマンドチートシート - Qiita](https://qiita.com/SUZUKI_Masaya/items/1fd9489e631c78e5b007)


# ファイルを編集する系
## ファイルの中身を確認する
```
cat <ファイル>
```

<br>

ファイルが長い場合は
```
cat <ファイル> | less
```

## テキスト形式のファイルを編集する
```
vim <ファイル>
```
- 基本はこれだけ覚えておけばよさそう
  - iキー: 挿入モードに入る
    - 普通のテキストエディタと同じような操作ができるようになる
    - Escキーで戻る
  - `:w`: 上書き保存
  - `:wq`: 上書き保存してから閉じる
  - `:q`: 閉じる（通常）
  - `:q!`: 変更を保存せずに閉じる
- もっとちゃんと活用したい人は以下のページを参照
  - [今更ながらvimチートシート - Qiita](https://qiita.com/hkuno/items/4557f3f8d6b27d2884f2)


```
nano <ファイル>
```
- 使い方は画面を見て

ほかにもありそうだけど筆者が使ったことがあるのがこれだけ

## 空のファイルを作成する
```
touch <ファイル名>
```
- 何も書き込まれていないファイルが作成される


# 標準出力関連
- 標準出力とはコンソール上に表示される文字のこと
## 標準出力をファイルに書き出す
```
<標準出力を出すコマンド> > <保存するファイル名>
```
```sh:例
ls --help > ls.txt
```
- lsコマンドのヘルプが`ls.txt`に保存される

## 長い出力をスクロールして見れるようにする
```
<標準出力を出すコマンド> | less
```

## 検索して合致した行だけを出力する
```
<標準出力を出すコマンド> | grep <検索文字列>
```

## 行数を出す
```
<標準出力を出すコマンド> | wc -l
```


# その他
## シェルスクリプトの実行
```
sh <スクリプトファイル>
```

## コマンドが格納されている場所を確認する
```
which <コマンド>
```
- 使用中のユーザーでしか使えないコマンドなのかを確認するのにも使える

## 蒸気機関車を走らせる
```
sl
```
- あらかじめslコマンドをインストールしておかないと使えない

## 書きたいけどまだ書いてないコマンド
- `ps`
- `kill`
- `service`
- `systemctl`
- `top`
- `df`
- ユーザー作成・編集・削除