【覚えておきたい】使用頻度の高いLinuxコマンド

## はじめに

よく使うLinuxコマンドをまとめました。

## 対象読者

- Linuxコマンドがわからない
- サーバーで作業することがある

## 目次

- [はじめに](#はじめに)
- [対象読者](#対象読者)
- [目次](#目次)
- [基本操作](#基本操作)
    - [cd（change directory）](#cdchange-directory)
    - [ls（list segments）](#lslist-segments)
    - [pwd（print working directory）](#pwdprint-working-directory)
- [ファイル操作](#ファイル操作)
    - [touch](#touch)
    - [mkdir（make directory）](#mkdirmake-directory)
    - [cat（catenate）](#catcatenate)
    - [less](#less)
    - [zless](#zless)
    - [mv](#mv)
    - [rm](#rm)
    - [cp](#cp)
    - [scp](#scp)
    - [vi](#vi)
- [検索](#検索)
    - [grep（global regular expression print）](#grepglobal-regular-expression-print)
        - [パイプラインを使用した例](#パイプラインを使用した例)
    - [find](#find)
- [パフォーマンス](#パフォーマンス)
    - [ps](#ps)
    - [job](#job)
    - [kill](#kill)
    - [df](#df)
- [アクセス権](#アクセス権)
    - [chmod(change mode)](#chmodchange-mode)
    - [chown](#chown)
- [知っていれば便利だけど都度確認すれば良さそうなコマンド](#知っていれば便利だけど都度確認すれば良さそうなコマンド)
    - [ln](#ln)
    - [nohup](#nohup)
- [いざというときに使用したい便利コマンド](#いざというときに使用したい便利コマンド)
    - [sudo](#sudo)
    - [history](#history)
    - [--helpオプション](#--helpオプション)
    - [man](#man)
- [おわりに](#おわりに)
- [参考文献](#参考文献)

## 基本操作

### cd（change directory）

- ディレクトリを移動したい時に使用する

```
cd [ディレクトリパス]
```

### ls（list segments）

- ディレクトリ内のファイルを一覧表示する

```
ls [ディレクトリ・ファイルパス]
```

- オプションもたくさんあるので利用する状況に応じて使うことができる。

| オプション | 内容 | 例 |
|:-:|:-:|:-:|
| -a | 隠しファイルを含めてすべて表示する  | ls -a  |
| -l  | ファイル一覧表示に加え詳細表示もする  | ls -l  |
| -r  | 逆順で表示する  | ls -lr  |
| -t  | 更新時間順に並び替える  | ls -lt  |


https://eng-entrance.com/linux_command_ls

### pwd（print working directory）

- 今いるディレクトリを確認する

```
pwd
```

## ファイル操作

### touch

- タイムスタンプを変更する
- ファイルを作成する(よく使用するのはこっち)

```
touch [ファイルパス]
```

### mkdir（make directory）

- フォルダを作成する

```
mkdir [ディレクトリ名]
```

- `-m` オプションを使用するとフォルダ作成時に権限を設定できる。

```
mkdir -m 777 hoge
```

### cat（catenate）

- ファイルの中身を表示する。
- `-n` オプションをつけると行番号も表示される。

```
cat [ファイルパス]
```

### less

- ファイルの内容を閲覧する
- `-N` オプションで行番号を表示することができる

```
less [オプション] [ファイルパス]
```

| コマンド | 内容 |
|:-:|:-:|
| スペースキー, f  | 一画面下にスクロール |
| b  | 一画面上にスクロール  |
| j  | 一行下にスクロール  |
| k  | 一行上にスクロール  |
| g  | 行頭に移動  |
| G  | 行末へ移動  |
| q  | lessコマンドを閉じる  |

| コマンド | 内容 |
|:-:|:-:|
| /<文字列>  | 上から下に向かって検索  |
| ?<文字列>  | 下から上に向かって検索 |
| n  | 次の検索結果に移動 |
| N  | 前の検索結果に移動  |

### zless

- 圧縮されたファイル（`.gz`）を解凍しないで閲覧することができる。
- 操作は `less`コマンドと同じ。

### mv

- ファイルの移動
- ファイル名の変更

```
mv [オプション]　[移動元] [移動先]
```

### rm

- ファイルを削除する。
- `-r` オプションをつけることでディレクトリも削除できる。
- `-f` オプションをつけることで強制的に削除する(メッセージなども出ない)

```
rm [ファイルパス]
```

### cp

- ファイルのコピー
- `-r` オプションをつけることでディレクトリのコピーもできる

```
cp [オプション] [コピー元] [コピー先]
```

### scp

- ファイルのコピー
- `-r` オプションをつけることでディレクトリのコピーもできる
- SSHプロトコルを使用するので通信は暗号化される

```
scp [オプション] [コピー元] [コピー先]
```

### vi

- テキストエディタ。Linux内ではじめからはいっているためサーバー内で作業するときにたまに使用する。

```
vi [ファイルパス]
```

https://eng-entrance.com/linux-command-vi

## 検索

### grep（global regular expression print）

- ファイル内の特定の文字列を検索する
- パイプライン(`|`) を使用して他コマンドと組み合わせて使用することが多い。

```
grep [オプション] [検索文字列] /var
```

### パイプラインを使用した例

- パイプラインを使用するとコマンドをつなげることができる
- 以下の例だと `hoge` という文字列が入ったディレクトリ・ファイルに絞って表示することができる

```
ls -l | grep hoge
```

| オプション | 内容 | 例 |
|:-:|:-:|:-:|
| -i  |  大文字と小文字を区別せずに検索する | grep -i hoge output  |
| -e  | 正規表現を使用して検索する  | grep -e "^[0-9].*" output  |
| -n  | 検索結果に行番号を表示する  | grep -n hoge output  |
| -r  | ディレクトリ内の全ファイルを検索する  | grep -r hoge ./*  |


### find

- ファイルの検索をする

```
find [検索開始ディレクトリ] [検索条件] <アクション>
```

| 検索条件 | 内容 |
|:-:|:-:|
| -name  | ファイル名を指定  |
| -iname  | ファイル名の大文字小文字を区別しない  |
| -type f | 通常のファイル  |
| -type d  | ディレクトリ  |
| -type l  | シンボリックリンク  |


## パフォーマンス

### ps

- プロセスを表示するコマンド

```
ps [オプション]
```

| 1 | 2 |
|:-:|:-:|
| e  | 実行しているコマンド名, 環境変数の表示 |
| f  | ツリー構造で表示 |
| a  | すべてのユーザーのプロセス  |
| u  | CPUやメモリなどの詳細表示  |
| x  | 実行しているプロセス  |
| aux  | a,u,x をすべて合わせたオプション。よく使用する。  |

### job

- ジョブを表示する

```
jobs
```

### kill

- プロセスやジョブを停止する
- `-9` オプションを使用すると強制終了することができる

```
kill [オプション] [プロセスID]
kill [オプション] %[ジョブID]
```

### df

- ディスクの空き容量をみることができる
- `-h` オプションで読みやすくなる

```
df -h
```

## アクセス権

### chmod(change mode)

- 権限（パーミッション）を設定するときに使用するコマンド（`Permission denied` とかでたときは設定していないことが原因の場合があります）
- `-R` オプションでディレクトを指定しディレクトリ内のファイルの権限を設定することもできる

```
chmod [オプション] [パーミッション] [ファイル名]
```

#### パーミッション

以下のような権限設定がされているとする。
これは左から ***オーナー(自分) `rw`、グループに `r`、その他のユーザーに `r` というパーミッション*** が割り当てられている。
数値でいうと `644` というものが当てられている。

```
-rw-r--r--
```

| パーミッション | 数値 |内容 |
|:-:|:-:|:-:|
| r  | 4 |read / 読み込み |
| w  | 3 | write / 書き込み |
| x  | 1 | execution / 実行  |


https://wa3.i-3-i.info/word11204.html

### chown

- オーナーとグループを設定することができる
- `-R` オプションでディレクトを指定しディレクトリ内のファイルの権限を設定することもできる。

```
chwon [オプション] [ユーザー:グループ] ファイル
```

## 知っていれば便利だけど都度確認すれば良さそうなコマンド

### ln

- リンクを作成する
- オプションで `-s` をつけるとシンボリックリンクを作成する

```
ln [オプション] [ファイル名] [リンク名]
```

### nohup

- ログアウトをしても処理を続ける
- `&` を併用することが多い(バックグラウンドジョブとして実行してくれるため)

```
nohup [コマンド] &
```

## いざというときに使用したい便利コマンド


### sudo

- スーパーユーザー（root）権限でコマンドを叩くことができる


```
sudo [オプション] [コマンド]
```


### history

- コマンド履歴を表示する


```
history
```

### --helpオプション

- 指定したコマンドの使用方法を表示することができる

```
[コマンド] --help
```

### man

- 指定したコマンドのマニュアルを表示する

```
man [オプション] [コマンド]
```

## おわりに

よく使用するコマンドを覚えておくと作業効率があがると思います！
参考になりましたら幸いです！

## 参考文献

- [lsコマンドの使い方と覚えたい15のオプション【Linuxコマンド集】](https://eng-entrance.com/linux_command_ls)
- [viコマンドについて詳しくまとめました 【Linuxコマンド集】](https://eng-entrance.com/linux-command-vi)
- [grepコマンドの詳細まとめました【Linuxコマンド集】](https://eng-entrance.com/linux-command-grep)
- [「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 【chmod】](https://wa3.i-3-i.info/word11204.html)