100日後にエンジニアになるキミ - 13日目 - サーバー - コマンドついて2

## コマンドの種類

昨日の続きで、コマンドをもう少しやっていきます。

**chown**

ファイル所有者やグループ所有者を設定するコマンドです。

`chown オプション ユーザー:グループ ファイル`

まずは所有者を確認しておきます。
確認は
`ls -l`
などで行うことができます。

```
$ls -l 
-rw-r--r-- 1 ss ss 0 May 12 06:46 aaa.txt
```

この場合ユーザー所有権はss
グループ所有権はss
となります。

所有権を変更するには

```
$chown root:root aaa.txt
$ls -l 
-rw-r--r-- 1 root root 0 May 12 06:46 aaa.txt
```

Linuxは一つのコンピュータを複数人で使うことが前提に作られているため
ファイルやディレクトリに所有者や権限が設定でき
勝手には弄れないようにコントロールできます。

ユーザー一人一人のファイルごとの権限を設定していると手間なので
グループというユーザーまとめを作り、一括で管理できるようになっています。

この辺りの設定はインフラエンジニアが担務することが多いですが
アプリケーションエンジニアもファイルを配置する際には
所有権やアクセス権限を設定しなければならないため
覚えておく必要があります。

chで始まるコマンドは
changeの略であるので変更を行うコマンドが多いです。
ぜひ覚えておきましょう。


**chmod**

ファイルやディレクトリの権限を設定するコマンドです。

`chmod オプション アクセス権 ファイル名`

Linuxなどではファイルやディレクトリには
権限(パーミッション)が設定できます。

パーミッションを確認するには
`ls -l`
などで確認できます。

```
$ls -l
-rw-r--r--  1 user group      9  2月 2 00:00 aaa.txt
drwxr-xr-x  6 user group  20020  2月 2 00:00 bbb.csv
```

この`drwxr-xr-x`の部分がパーミッションです。
最初の１文字目はファイル種別を表しています。

| 種別 | 意味 |
|:--|:--|
| - | ファイル |
| d | ディレクトリ |
| l | シンボリックリンク |

2-4文字目はファイルの所有者に対する権限
5-7文字目はファイルの所有グループに対する権限
8-10文字目はその他に対する権限
を表しています

権限の意味は

| 数字 | モード | 権限 |
|--:|:--|:--|
| 4 | r | 読み取り |
| 2 | w | 書き込み |
| 1 | x | 実行 |

となっており、上記の例で行くと

`-rw-r--r--`
「ファイル種別」が「ファイル」
「所有者」に「読み取り」と「書き込み」の権限
「所有グループ」に「読み取り」の権限
「その他」に「読み取り」の権限

`drwxr-xr-x`
「ファイル種別」が「ディレクトリ」
「所有者」に「読み取り」と「書き込み」と「実行」の権限
「所有グループ」に「読み取り」と「実行」の権限
「その他」に「読み取り」と「実行」の権限

このアクセス権限を変えるには
`chmod`コマンドを使用しそれぞれの権限を数値で指定します。

`chmod 権限の数値`

```
$ chmod 764 aaa.txt
$ ls -l
-rwxrw-r--  1 user group      9  2月 2 00:00 aaa.txt
```

数字の合計値を「所有者」「所有グループ」「その他」の順で
入力することでパーミッションを変更することができます。

| 数字 | 権限 |
|--:|:--|
| 7 | 読み取り + 書き込み + 実行 |
| 6 | 読み取り + 書き込み |
| 5 | 読み取り + 実行 |
| 4 | 読み取り |
| 3 | 書き込み + 実行 |
| 2 | 書き込み |
| 1 | 実行 |

また権限を
アルファベットで指定することもできます。

`chmod 変更指定 ファイル名`

変更指定の書き方は 
`対象ユーザー 変更方法 変更内容`
を繋げて書きます。

変更指定のアルファベットは次の通りです。

対象ユーザー

| 対象ユーザー | 意味 |
|:--|:--|
| u | ユーザー |
| g | グループ |
| o | その他 |
| a | すべて |

変更方法

| 変更方法 | 意味 |
|:--|:--|
| = | 指定した権限にする |
| + | 指定した権限を付与する |
| - | 指定した権限を除去する |

変更内容

| 変更内容 | 権限 |
|:--|:--|
| r | 読み取り権限 |
| w | 書き込み権限 |
| x | 実行権限 |


```
$chmod go+w aaa.txt
```

Linuxでは権限がないと実行したり
書き換えたりすることができない様にすることができます。

アプリケーション用のファイルなどは
アプリケーション実行用のユーザーの権限を設定することになります。

事故を防ぐために一般ユーザーとは権限を分けて設定しておくのが
一般的であるため、アプリケーションを配置する際に
権限設定を施す必要があります。

ここら辺も押さえておきましょう。

**df**

ディスクの空き容量を確認するコマンドです。

`df オプション`

Linux上ではCLIしか使えないことが多く
ディスク容量が一杯になるとファイルの書き込みができなくなり
アプリケーションが停止してしまいます。

```
$df -h
Filesystem      Size   Used  Avail Capacity iused               ifree %iused  Mounted on
/dev/disk1s1   466Gi  329Gi  131Gi    72% 1366028 9223372036853409779    0%   /
```

Availの部分が利用可能領域です。

-hオプションでわかりやすい単位にして表示できます。

**ps**

実行プロセスの確認をするコマンドです。

`ps オプション`

プロセスとは、Linux内の一つ一つの処理のことで
アプリケーションを動かしたりすると増えていきます。

```
$ps -l
  UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN     S             ADDR TTY           TIME CMD
  501  4856  4855     4006   0  31  0  4438864   1284 -      S                   0 ttys000    0:00.01 -bash
  501 30597  4856     4006   0  31  0  6478724  85156 -      S+                  0 ttys000    2:32.84 /opt/anaconda3/b
  501  4864  4863     4006   0  31  0  4447056    832 -      S+                  0 ttys001    0:00.01 -bash
  501 86467 86466     4006   0  31  0  4465488   1552 -      S                   0 ttys002    0:00.08 -bash
```

オプション

| a | 自分以外のユーザー名についても表示する |
|:--|:--|
| u | ユーザー名と開始時刻を表示する |
| x | 制御端末のないプロセスについても表示する |
| w | 出力1行あたりの幅を広げる |
| h | ヘッダを出力しない |
| r | 実行中のプロセスだけを表示する |
| l | 詳細を表示する |
| f | プロセスの親子関係をツリー形式にして表示 |
| 端末番号 | txxで指定をする。xxに端末番号を指定する |
| プロセスＩＤ | 表示するプロセスＩＤ |

**kill**

プロセスを停止させるコマンドです。

`kill プロセス番号（PID）`

実行されているプロセス番号を知るには
先に`ps`コマンドを用いて実行中のプロセスを確認する必要があります。

```
$ps -a | grep ana
30597 ttys000    2:32.91 /opt/anaconda3/bin/python /opt/anaconda3/bin/jupyter-notebook
92187 ttys002    0:00.00 grep ana
```

この場合`30597`が実行されているアプリケーションのプロセス番号です。

これを止めるには

```
$kill 30497
```

プロセス番号を加えて実行し、実行後に最後`ps`コマンドの結果を見て確認をします。


**su**

ユーザーを切り替えるコマンドです。

Linuxには全ての権限をもつ「スーパーユーザー（rootユーザー）」と
一般ユーザーなどがあります。

通常は作成された一般ユーザーでサーバーに入りますが
ソフトウェアのインストールなどを行う際に
rootユーザーに変更しなければならない場合があります。

ユーザー変更するには

`su オプション ユーザー名`

ルートユーザーに切り替えるには
`su`コマンドの実行後にrootユーザーのパスワードを入力します。

```
$su
パスワード
root@localhost$
```

ユーザーを切り替えると
画面上にはユーザー名が表示されます。

スーパーユーザーを抜けるには`exit`コマンドで
元のユーザーに戻ることができます。


**shutdown**

Linuxをシャットダウンさせるためのコマンドです。

`shutdown オプション`

rootユーザーでないと利用できません。


-hオプションで停止させます。

```
$shutdown -h now
```

再起動させるには-rオプションを用います。

```
$shutdown -r now
```

再起動は

```
$reboot
```

でも行うことができます。

## まとめ

今回はLinuxのOS周りに関わる部分のコマンドを学習しました。
アプリケーションエンジニアでもある程度は触れる必要があるので
コマンド群に慣れておきましょう。

君がエンジニアになるまであと87日

## 作者の情報
乙pyのHP：
http://www.otupy.net/

Youtube：
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter：
https://twitter.com/otupython