[Linux / shell コマンド] システム開発のお仕事でよく使う Linux コマンド集

# 概要

- 自分が Linux サーバ上でよく使うコマンドをまとめました
- 初心者さんが最初に勉強するコマンドとして考えても、ちょうどよいかも？

# コマンド集

## 1. 基本

```bash
# カレントディレクトリのパスを表示
$ pwd

# カレントディレクトリを移動する
$ cd {移動先のパス}
## 例
$ cd src/

# カレントディレクトリ内のファイル一覧を表示
$ ls

# ディレクトリ内のファイル一覧（隠しファイル含む）と、その詳細情報を表示
$ ls -la
```

## 2. ファイル・フォルダ関係

### 2-1. 表示・作成・編集など

```bash
# 指定したファイルの中身を一気に全て表示
$ cat {対象ファイルのパス}
## 例
$ cat hoge.txt

# 指定したファイルの中身を、先頭から1ページずつ表示
# (大きなファイルのときは、cat だと読み込み時間がかかるので、less の方がいいかも)
$ less {対象ファイルのパス}
## 例
$ less hoge.txt

# 空のファイルを作成、もしくは、対象ファイルの最終更新日時を更新
$ touch {対象ファイル名}
## 例
$ touch sample.txt

# ディレクトリを作成する
$ mkdir {作成したいディレクトリ名}
## 例
$ mkdir src

# ファイルをテキストエディタ vim で編集
$ vim {対象ファイル名}
```

`vim` の使い方はこの記事では説明しませんが、基本的な操作は頑張って覚えましょう( \*¯ ꒳¯*\)✨
`git` を使った開発のとき、結構役立ちます。

### 2-2. コピー・移動・削除

```bash
# コピー
$ cp {コピー元ファイルのパス} {コピー先ファイルのパス}
## 例
$ cp sample.zip copied.zip

# ディレクトリごとコピー（クローン）
$ cp -R {クローンしたいdirectory名} {クローン先のパス}
## 例
$ cp -R src/ hoge/

# ファイル、またはディレクトリの位置を移動
$ mv {元ファイルパス、元ディレクトリパス} {移動先のディレクトリ名}
## 例: sample ディレクトリが、hoge ディレクトリの中に移動する
$ mv sample/ hoge/

# 削除
$ rm {ファイル名}
## 例
$ rm hoge.txt
## 例: src ディレクトリごと、中身も全部削除したいとき
$ rm -r src/
```


### 2-3. 圧縮・解凍

#### 圧縮

```bash
# 圧縮
$ zip archive {zip に入れたいファイル名 (複数可)}
## 例
$ zip archive hoge.txt huga.txt

# ディレクトリごと圧縮
$ zip archive -r {ディレクトリ名}
## 例
$ zip archive -r src/

# ディレクトリごと圧縮する時に、不要ファイルを除外
$ zip archive -r {ディレクトリ名} -x {該当ファイルのパス}

## 例 : ワイルドカード (*) も使える 
$ zip archive -r src/ -x src/**/*.jpg
```

#### 解答

```bash
# 解凍
$ unzip {zipファイル名}
## 例
$ unzip mystery.zip
```

### 2-4. 権限操作

```bash
# ファイルの所有者変更
$ chown {新しい所有者} {対象ファイル名}
## 例
$ chown siruku6 hoge.txt

# ファイルの権限変更
$ chmod {変更後の権限} {対象ファイル名}
## 例
$ chmod 600 authorized_keys

# ファイルのグループ変更
$ chgrp {新しいグループ} {対象ファイル名}
## 例
$ chgrp groupname hoge.txt
```

## 3. shell スクリプトの実行

```bash
$ source {シェルスクリプト名}
$ sh {シェルスクリプト名}
$ . {シェルスクリプト名}

## 例
$ source .venv/bin/activate
$ sh driver.sh
$ . .bashrc
```

## 4. 各種監視コマンド

```bash
# ディスク使用量、使用率の確認 (-h を付けると、人に読みやすい値が表示される)
$ df -h

# ディレクトリごとのディスク使用量確認
# --max-depth 1 を付けることで、直下のディレクトリだけをチェックできる
$ du --max-depth 1 -h

# メモリ使用状況の確認
$ free -h

# CPU や メモリなどの使用状況をリアルタイム監視
$ top
```

watch を使うと、 free などのコマンド実行結果をリアルタイムに継続的に確認できる。

```bash
watch -n 1 -d=permanent free -h
```

以下のような結果をリアルタイムで出力してくれる。

```bash
Every 1.0s: free -h                                     ubuntu: Tue Apr  1 04:26:24 2025

              total        used        free      shared  buff/cache   available
Mem:           23Gi       3.5Gi        12Gi        20Mi       7.1Gi        19Gi
Swap:          15Gi          0B        15Gi
```


## 5. 負荷の高い処理を実行する時のお助けコマンド

### 5-1. コマンドのバックグラウンド実行

処理時間が長いコマンドを実行すると、コマンド実行終了まで、他のコマンドを入力することができなくなります。

それを防ぐために、実行したコマンドをバックグラウンド（見えないところ）で実行させれば、表側のプロンプトはコマンド入力を引き続き受け付けることができるようになります。

```bash
$ nohup {待ち時間の長いコマンド} &

## 例
$ nohup sleep 5 &
```

もうちょい勉強したい人は以下の記事とかを読んでね|･ω･`)ｺｿｯ

https://qiita.com/inosy22/items/341cfc589494b8211844


### 5-2. 優先度を下げてコマンドを実行

これをすることで、OS がフリーズしたり、SSH 接続が切れたりすることを防ぎます。

```bash
# 優先度を下げてコマンドを実行
$ nice -n {ナイス値 (優先度)} {負荷の高いコマンド}
## 例
$ nice -n 10 python heavy_training.py
```

- ナイス値は、
    - `-20 ~ 20` を設定できる
    - 値が低いほど優先度が高く、値が高いほど優先度が低い
    - よって、負荷の高い処理には、大きな値のナイス値を設定してあげると良い


## 6. リモートサーバとのやりとり

`~/.ssh/config` の書き方と、各種設定の意味が分かってから実行するとよい

### 6-1. SSH 接続

```bash
# リモートサーバに接続
$ ssh {ホスト名やホストIPアドレス}
## 例
$ ssh 10.2.8.4
$ ssh remote_server
```

### 6-2. ファイル転送

```bash
# 送出
$ scp {送信したいローカルファイルのパス} {リモートユーザ名}@{リモートのホスト名}:{送信先のパス}
## 例: ローカルマシンのデータをリモートサーバに転送する
$ scp ~/Downloads/hoge.txt ubuntu@host_name:~/hoge.txt
$ scp ~/Downloads/hoge.txt ubuntu@10.2.8.4:~/hoge.txt

# リモートサーバのデータをローカルマシンにダウンロードする例
$ scp ubuntu@host_name:~/hoge.txt ~/Downloads/hoge.txt
```

## 7. 番外編

### 7-1. 偉い権限でコマンドを実行

```bash
$ sudo {command}
```

# おまけ

他にも色々あるけど、、、この記事、自分も使いたいから！！( \*˙︶˙\*)وｸﾞｯ!
とりあえず作成して、少しずつ追記していくよ。


# 参考資料

https://qiita.com/seyself/items/ae47f1c22a7375a736f3

https://qiita.com/Jazuma/items/30e78b61fe7e1661f089