運用・保守 インフラエンジニアの時によく使ってたLinuxコマンド

# 概要
Linuxのコマンドって多種多様にあるけど、
どういうのを知ってたら良いのかという情報があんまり無いなと思ったので、
インフラエンジニアで運用と保守を経験してよく使うコマンドと、どういう時に使ってたかを書いて行こうと思います。


## 注意

* Linuxのディストリビューション（種類）はRHEL、CentOSです。他のディストリビューションだとパスが違ったり使えないコマンドだったりするのでご留意ください。多分そんなに多く無いはず。。
* オプションとかは基本書いてないので、内容読んで興味あれば調べてみてください。需要あれば実行例もあげますが。。

## 運用・保守でよく使ってたLinuxコマンド

```ruby:
tar
```
指定したパスにあるファイル、ディレクトリを拡張子 *.tar.gz* で一つにまとめられます。
あとは解凍も出来ます。zipみたいなもんです。Linuxサーバで取得した情報をひとまとめにしてローカルに持ってくるというような使い方をしてました。
オプションが多くて若干覚えるのが面倒ですが、使い所は多かったです。



```ruby:
find
```
開発の勉強してる今でも使ってるコマンドです。対象のパスから、指定した文字列のファイル名があるかどうかを探すのに使ってます。Linuxサーバは基本CUI画面なので、あのファイルどこにあったっけって探す時に便利です。
使い方は`find "検索したいパス" -name "ファイル名"`

例えば、
```ruby:
find ./ -name test
```
のように使えば、カレントディレクトリ（今いる場所）配下にtestというファイルがあるかを検索し、あればフルパスで出力してくれます。


```ruby:
grep
```
これも開発やってる時に使ったりしてます。grepコマンドの後に指定した文字を抽出してくれます。
運用時代は
`ls -l /tmp/ | grep test`
のように入力して「tmp配下のファイル一覧からtestだけを表示させる」という感じで他のコマンドと併せて使ってましたが、最近は
`grep "文字列" -rl "検索対象のパス"`
という風に使ってて、「検索対象のパスの中で文字列の記述があるか」を検索する為に使ったりしてます。
脆弱性のある記述が発見されて、それが使われているかどうか探す時に便利でした。


```ruby:
service
```
サービスコマンド。インストールしてるサービスのステータス確認、起動停止に使えます。
サイトが見れなくなった時なんかに`service nginx status`って打ってnginxが起動しているかどうか確認したりしてました。

```ruby:
systemctl
```
これもインストールしてるサービスのステータス確認、起動停止に使えます。centosが6の時はserviceコマンドでしたが、centos7から本コマンドになりました。何が面倒ってこっちは`systemctl status nginx`という具合にサービス名書く場所が変わってるんですね。ややっこしい

```ruby:
mv
```
ファイルの移動、ファイル名の変更に使えるコマンドです。

```ruby:
df
```
ファイルシステムの容量が確認できます。
ざっくりいうと、どこの階層配下にどの容量までのファイルなどが格納出来るか確認できます。
例えば、↓が実行して一部抜粋したものですが、

```s:
$ df -h
Filesystem                                               Size   Used  Avail Capacity iused               ifree %iused  Mounted on
/dev/disk2s2                                            1.9Gi  1.7Gi  183Mi    91%     432          4294966847    0%   /Volumes/Docker
```

SizeとUsedを見れば、/Volumes/Dockerには1.9G割り振られていて、既に1.7G使用していることがわかります。この/Volumes/Dockerに今0.2G以上の物を格納使用とするとエラーになります。
保守時代は一時保存したバックアップファイルを削除するって運用がされておらずパンパンになってアラート上がったことがありました。ちなみに実行例は「-h」オプションをつけてます。つけることで表示されるサイズの単位を良い感じにしてくれる便利オプション。

```ruby:
uptime
```
サーバが何日動いてるか、何人がサーバにログインしてるか等を表示してくれます。
運用やってた時にLinuxの挙動がおかしくなったら、このコマンド打って497日問題（ざっくりいうと、起動させてから停止させずに497日越えると内部のタイマーがおかしくなる。再起動したら直るよ）を疑って確認してました。

```ruby:
diff
```
ファイルの比較が出来ます。設定変えるときにバックアップとっておいて、修正したものと比較するって使い方をしてました。

```ruby:
top
```
*色んな*サーバに関する情報が出ます。
サーバ情報を表示するコマンドって種類多くて覚えるの面倒！って人はこれだけ覚えておけば色んな情報みれます。uptimeの情報もこれで見れます。確か5秒更新で情報が更新されます。

```ruby:
w
```
uptimeの上位互換的な。uptimeの情報に加え、誰がサーバにログインしてるかも確認できます。
誰もサーバいじって無いよな？って確認で使ってました。

```ruby:
free
```
メモリの利用状況が確認できます。
メモリが逼迫してくると動きが悪くなります。運用時の問い合わせで、web開くの遅い！ってクレームが来た時に使ってました。これも「-h」つけると容量の単位を良い感じに調整して表示してくれます。

```ruby:
history
```
これまで実行したコマンドが表示されます。
さっき何打ったっけ？って時に確認で使ってます。

```ruby:
tail
```
出力されるデータを最下行から数えて10行表示します。オプションつければ10以上表示も出来ます。
他のコマンドと組み合わせて使います。下から何行目だけ表示させたいって時に有用です。

```ruby:
head
```
tailの逆で、頭行から数えて10行表示します。

```ruby:
touch
```
新規に空ファイルを作成するコマンドです。
あと、ファイルの更新日時を変更することも出来ます。本来の用途的にはこっちっぽいですが、空ファイル作る目的でよく使ってました。


```ruby:
id
```
現在のユーザID等の情報を表示します。
保守やってた時は、どの権限で作業してるかをログに残すために必ず打ってました。

```ruby:
uname
```
システム情報を表示します。これもid同様作業前に必ず実行してました。
あんまり有用性わからないですけど。。

```ruby:
ps
```
プロセス情報を表示します。
killしたいプロセスのIDを確認させるのに使用してました。

```ruby:
kill
```
主にプロセスを終了させるのに使います。killにはプロセスIDが必要なので、psで確認した後に使ってました。

```ruby:
ping
```
サーバの疎通確認で使います。
pingを使って疎通出来ないサーバは通信（接続）出来ないってことになります。（実際はpingに応答を返さない設定も出来るので一概には言えないですが。確かAWSで設定をデフォルトでサーバ作ればping疎通出来ないようにしてたはず。）
再起動したサーバにping飛ばし続けて、疎通出来るようになったらログイン出来ると判断してssh接続する判断に使ってました。

## 終わりに
以上、運用・保守でよく使ってたコマンドです。
他にも色々使ってますが、知名度とか使う意味がよくわからなそうなものにフォーカスしました。
間違いなどあったら修正するので連絡ください。