Linuxコマンドまとめ

## 背景
新しい環境で仕事をすることになり、Linuxを操作する機会が増えたためLinuxコマンドを***備忘録***としてまとめる。
※作成者が利用することを想定しているため、記載粒度にばらつきがあるがご了承いただきたい

## コマンド
### ps auxf
inux上で動いているプロセスを確認するコマンド。(厳密にはpsコマンドが該当コマンド)
必要に応じてオプションは追加が必要だが、上記オプションを覚えていれば大体大丈夫そう
オプションの簡単な説明は以下の通り。
```
a：全ユーザのプロセスの状態を表示
u：プロセスのユーザ名と開始時刻を表示内容に付加
x：制御端末を持たないデーモンなどのプロセスも合わせて表示
f：プロセスの親子関係をツリー状にして表示
※ -f はfull formatで異なる
```

### lsof
プロセスが開いているファイルを表示するコマンド。
使用しそうなオプションの簡単な説明は以下の通り。
```
-P：ポート番号をサービス名に変更しない
-c：プロセス名を指定する
-i：portを指定する
-p：プロセスIDを指定する
-u：ユーザー名を指定する
```

### fuser
ファイルやソケットを使用しているプロセスを特定するコマンド。
使用しそうなオプションの簡単な説明は以下の通り。
```
-a：コマンドラインから渡されたすべてのファイルを表示
-k：指定したファイルにアクセスしているプロセスをkill
-i：プロセスをkillする前に確認する(オプション -k と共に使用)
-l：使用できるすべてのシグナルリストを表示
-m：マウントされたファイルシステムを指定すると、ファイルシステム上のファイルにアクセスしているプロセスを表示
-n：名前空間	file、udp、tcpといった名前空有間を指定します。
-s：コマンド実行時の表示結果を抑制します。
-u：PIDと共にプロセスの所有者名を表示します。
-v：コマンド実行の詳細情報を表示します。
```

### kill
kill コマンドは、実行中のプロセスにシグナル (デフォルトでは SIGTERM シグナル) を送信するコマンド。
このコマンドのデフォルトのアクションは、プロセスの通常停止。
***kill -l***で利用できるオプション(シグナル)一覧を確認可能。
利用するものとして以下が多いと思われる。
| シグナルID | 動作 |
|:-:|:-:|
|9|強制終了|
|15|終了(デフォルトの設定)|
|18|停止しているプロセスの再開|
|19|一時停止|

### sort
テキストファイルの内容を行単位でソートしたい場合に利用するコマンド。
デフォルトでは左側の文字列からソートを行っていくため、ソートしたい値によってオプションを指定する必要がある。
使用しそうなオプションの簡単な説明は以下の通り。
```
-n：データを文字ではなく、数値として並び変える
-r：降順にデータを並び変える
-u：重複を排除して並び変える
-f：大文字と小文字を区別なく並び変える
-b：先頭に挿入されている空白を無視して並び変える
-k：キーを指定して並び変える（下記「-t」と併用）※番号指定
-t：区切りの文字を指定する（上記「-k」と併用）
```
### uniq
指定した入力ファイルの行を読み込み、***連続***する同じ行を削除するコマンド。
※使用する前にソートしておかないと期待している挙動が得られない。
使用しそうなオプションの簡単な説明は以下の通り。
```
-d：重複した行のみを表示
-D：重複するすべての行を表示
-f [項目数]：指定した項目数をスキップ
-i：大文字・小文字を区別しない
-s [文字数]：指定した文字数をスキップ
-u：重複していない行のみを表示
-w [文字数]：指定した文字数のみで重複を確認
```

### awk
awkでは各行ごとに指定した列に対して処理を行う。
この時awkでは行の事を「レコード」、列のことを「フィールド」と呼ぶ。
色々な書き方ができるため、以下に例を示す。

#### 正規表現を利用するパターン
```c
# パターン(正規表現)にマッチした行にアクションを施す
awk '/正規表現/ { アクション }' [ 入力ファイルのパス ]
```

#### BEGIN,END
awkでは「BEGIN」、「END」を使用することで「メイン」を含めた三つのブロック構造を作ることが出来る
※「BEGIN」、「END」は省略可能
```c
# 例1(入力ファイルを読み込む前のアクション⇒メイン処理)
awk 'BEGIN { 入力ファイルを読み込む前のアクション } { メイン処理 }' [ 入力ファイルのパス ]
# 例2(メイン処理⇒入力ファイルを読み込んだ後のアクション)
awk '{ メイン処理 } END { 入力ファイルを読み込んだ後のアクション }' [ 入力ファイルのパス ]
# 例3(入力ファイルを読み込む前のアクション⇒メイン処理⇒入力ファイルを読み込んだ後のアクション)
awk 'BEGIN { 入力ファイルを読み込む前のアクション } { メイン処理 } END { 入力ファイルを読み込んだ後のアクション }' [ 入力ファイルのパス ]
```
以下サイトを参考にしたため、組み込み変数等は以下を参考にする

参考サイト：[初心者のためのawkコマンド](https://tech-blog.rakus.co.jp/entry/20210120/awk)


### find
ファイルやディレクトリを検索するコマンド。
デフォルトでは検索対象がある場合はパスを、なければ存在しないメッセージを返す。
```
-name：ファイル名を指定検索
-iname：文字の大小を区別せず、ファイル名を指定検索
-type f：ファイルのみを対象に検索
-type d：ディレクトリを対象に検索
-type p：名前付きパイプを対象に検索
-empty：ファイル容量が0のファイル/ディレクトリを対象に検索
-size：ファイル容量を指定検索
-path：ファイルパスを指定検索
-ipath：文字の大小を区別せず、ファイルパスを指定検索
-newer：指定したファイルの更新日時後に更新された、ファイル/ディレクトリを検索
-anewer：指定したファイルの更新日時後にアクセスされた、ファイル/ディレクトリを検索
-mtime [日数]：最後にデータが更新された日時を検索
-atime [日数]：指定日数以前にアクセスされた、ファイル/ディレクトリを対象に検索
-mmin [時間]：指定分数に更新された、ファイル/ディレクトリを対象に検索
-amin：指定分数にアクセスされた、ファイル/ディレクトリを対象に検索
-a：複数条件検索
-and：複数条件（AND検索）
-or：複数条件（OR検索）
-not：条件不一致検索
-exec：検索結果に対してコマンドを実行
```

### xarg
前のコマンド(パイプで実行している場合、一つ前の実行内容)の実行結果を標準入力として受け取り、xarg以降に指定したコマンドへ引きわたすコマンド。
イメージは以下の通り
```c
# findの結果をrmの対象として実行する
find . -name "*.log" | xargs rm -fv
```
※xargで実行するコマンドは、1度に値がすべて渡されて実行される。
　行ごとに実行はされないため、実行回数が1回であることは注意
※xargは"Argument list too long"の制限を受けないらしい
　参考：[Argument list too longって怒られた](https://qiita.com/terra_yucco/items/82e3396f7d189d9ae6dd)

### 以降編集中