GNU Coreutilities を極める(2: チートシート)

# 概要
[前回](https://qiita.com/p_cub/items/fa8fff82d04dd094087f)は coreutils に含まれるコマンド名一覧を出力してみましたが、
今回は含まれているコマンドがどういった用途で利用されるのかを簡単に説明した
チートシートを作成してみます。

# アルファベット順 coreutils コマンド一覧
あらかじめコマンド名が判明している際はこの索引を利用してください。
リンクをたどると用途別の説明にジャンプします。

## 記号,A-B
<details><summary>記号,A,B</summary>

|コマンド |分類   |
|:-------|:------|
|[|[その他](#その他)|
|arch|[システム情報表示](#システム情報表示)| 
|b2sum|[ダイジェスト作成/確認](#%E3%83%80%E3%82%A4%E3%82%B8%E3%82%A7%E3%82%B9%E3%83%88%E4%BD%9C%E6%88%90%E7%A2%BA%E8%AA%8D)|
|base32|[エンコード/デコード](#%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89)|
|base64|[エンコード/デコード](#%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89)|
|basename|[文字列操作](#文字列操作)|
|basenc|[エンコード/デコード](#%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89)|

</details>

## C

<details><summary>C</summary>

|コマンド |分類   |
|:-------|:------|
|cat|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|chcon|[ファイル属性変更](#ファイル属性変更)|
|chgrp|[ファイル属性変更](#ファイル属性変更)|
|chmod|[ファイル属性変更](#ファイル属性変更)|
|chown|[ファイル属性変更](#ファイル属性変更)|
|chroot|[プロセス実行・評価・管理](#%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E5%AE%9F%E8%A1%8C%E8%A9%95%E4%BE%A1%E7%AE%A1%E7%90%86)|
|cksum|[ダイジェスト作成/確認](#%E3%83%80%E3%82%A4%E3%82%B8%E3%82%A7%E3%82%B9%E3%83%88%E4%BD%9C%E6%88%90%E7%A2%BA%E8%AA%8D)|
|comm|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|cp|[ファイルシステム操作](#ファイルシステム操作)|
|csplit|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|cut|[文字列操作](#文字列操作)|

</details>

## D
<details><summary>D</summary>

|コマンド |分類   |
|:-------|:------|
|date|[システム情報表示](#システム情報表示)|
|dd|[ファイルシステム操作](#ファイルシステム操作)|
|df|[システム情報表示](#システム情報表示)|
|dir|[システム情報表示](#システム情報表示)|
|dircolors|[その他](#その他)|
|dirname|[文字列操作](#文字列操作)|
|du|[システム情報表示](#システム情報表示)|

</details>

## E,F

<details><summary>E,F</summary>

|コマンド |分類   |
|:-------|:------|
|echo|[文字列操作](#文字列操作)|
|env|[プロセス実行・評価・管理](#%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E5%AE%9F%E8%A1%8C%E8%A9%95%E4%BE%A1%E7%AE%A1%E7%90%86)|
|expand|[文字列操作](#文字列操作)|
|expr|[プロセス実行・評価・管理](#%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E5%AE%9F%E8%A1%8C%E8%A9%95%E4%BE%A1%E7%AE%A1%E7%90%86)|
|false|[その他](#その他)|
|factor|[文字列操作](#文字列操作)|
|fmt|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|fold|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|

</details>

## G,H,I

<details><summary>G,H,I</summary>

|コマンド |分類   |
|:-------|:------|
|groups|[ユーザー情報表示](#ユーザー情報表示)|
|head|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|hostid|[システム情報表示](#システム情報表示)|
|id|[ユーザー情報表示](#ユーザー情報表示)|
|install|[ファイルシステム操作](#ファイルシステム操作)|

</details>

## J,L

<details><summary>J,L</summary>

|コマンド |分類   |
|:-------|:------|
|join|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|link|[ファイルシステム操作](#ファイルシステム操作)|
|ln|[ファイルシステム操作](#ファイルシステム操作)|
|logname|[ユーザー情報表示](#ユーザー情報表示)|
|ls|[システム情報表示](#システム情報表示)|

</details>

## M

<details><summary>M</summary>

|コマンド |分類   |
|:-------|:------|
|md5sum|[ダイジェスト作成/確認](#%E3%83%80%E3%82%A4%E3%82%B8%E3%82%A7%E3%82%B9%E3%83%88%E4%BD%9C%E6%88%90%E7%A2%BA%E8%AA%8D)|
|mkdir|[ファイルシステム操作](#ファイルシステム操作)|
|mkfifo|[ファイルシステム操作](#ファイルシステム操作)|
|mknod|[ファイルシステム操作](#ファイルシステム操作)|
|mktemp|[ファイルシステム操作](#ファイルシステム操作)|
|mv|[ファイルシステム操作](#ファイルシステム操作)|
</details>

## N,O

<details><summary>N,O</summary>

|コマンド |分類   |
|:-------|:------|
|nice|[プロセス実行・評価・管理](#%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E5%AE%9F%E8%A1%8C%E8%A9%95%E4%BE%A1%E7%AE%A1%E7%90%86)|
|nl|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|nohup|[プロセス実行・評価・管理](#%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E5%AE%9F%E8%A1%8C%E8%A9%95%E4%BE%A1%E7%AE%A1%E7%90%86)|
|nproc|[システム情報表示](#システム情報表示)|
|numfmt|[文字列操作](#文字列操作)|
|od|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
</details>

## P

<details><summary>P</summary>

|コマンド |分類   |
|:-------|:------|
|paste|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|pathchk|[その他](#その他)|
|pinky|[ユーザー情報表示](#ユーザー情報表示)|
|pr|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|printenv|[システム情報表示](#システム情報表示)|
|printf|[文字列操作](#文字列操作)|
|ptx|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|pwd|[システム情報表示](#システム情報表示)|
</details>

## R

<details><summary>R</summary>

|コマンド |分類   |
|:-------|:------|
|readlink|[ファイルシステム操作](#ファイルシステム操作)|
|realpath|[ファイルシステム操作](#ファイルシステム操作)|
|rm|[ファイルシステム操作](#ファイルシステム操作)|
|rmdir|[ファイルシステム操作](#ファイルシステム操作)|
|runcon|[プロセス実行・評価・管理](#%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E5%AE%9F%E8%A1%8C%E8%A9%95%E4%BE%A1%E7%AE%A1%E7%90%86)|
</details>

## S

<details><summary>S</summary>

|コマンド |分類   |
|:-------|:------|
|seq|[文字列操作](#文字列操作)|
|sha1sum|[ダイジェスト作成/確認](#%E3%83%80%E3%82%A4%E3%82%B8%E3%82%A7%E3%82%B9%E3%83%88%E4%BD%9C%E6%88%90%E7%A2%BA%E8%AA%8D)|
|sha224sum|[ダイジェスト作成/確認](#%E3%83%80%E3%82%A4%E3%82%B8%E3%82%A7%E3%82%B9%E3%83%88%E4%BD%9C%E6%88%90%E7%A2%BA%E8%AA%8D)|
|sha256sum|[ダイジェスト作成/確認](#%E3%83%80%E3%82%A4%E3%82%B8%E3%82%A7%E3%82%B9%E3%83%88%E4%BD%9C%E6%88%90%E7%A2%BA%E8%AA%8D)|
|sha384sum|[ダイジェスト作成/確認](#%E3%83%80%E3%82%A4%E3%82%B8%E3%82%A7%E3%82%B9%E3%83%88%E4%BD%9C%E6%88%90%E7%A2%BA%E8%AA%8D)|
|sha512sum|[ダイジェスト作成/確認](#%E3%83%80%E3%82%A4%E3%82%B8%E3%82%A7%E3%82%B9%E3%83%88%E4%BD%9C%E6%88%90%E7%A2%BA%E8%AA%8D)|
|shred|[ファイルシステム操作](#ファイルシステム操作)|
|shuf|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|sleep|[プロセス実行・評価・管理](#%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E5%AE%9F%E8%A1%8C%E8%A9%95%E4%BE%A1%E7%AE%A1%E7%90%86)|
|sort|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|split|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|stat|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|stdbuf|[プロセス実行・評価・管理](#%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E5%AE%9F%E8%A1%8C%E8%A9%95%E4%BE%A1%E7%AE%A1%E7%90%86)|
|stty|[その他](#その他)|
|sum|[ダイジェスト作成/確認](#%E3%83%80%E3%82%A4%E3%82%B8%E3%82%A7%E3%82%B9%E3%83%88%E4%BD%9C%E6%88%90%E7%A2%BA%E8%AA%8D)|
|sync|[その他](#その他)|
</details>

## T

<details><summary>T</summary>

|コマンド |分類   |
|:-------|:------|
|tac|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|tail|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|tee|[その他](#その他)|
|test|[その他](#その他)|
|timeout|[プロセス実行・評価・管理](#%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E5%AE%9F%E8%A1%8C%E8%A9%95%E4%BE%A1%E7%AE%A1%E7%90%86)|
|touch|[ファイルシステム操作](#ファイルシステム操作)|
|tr|[文字列操作](#文字列操作)|
|true|[その他](#その他)|
|truncate|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|tsort|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|tty|[ユーザー情報表示](#ユーザー情報表示)|
</details>

## U

<details><summary>U</summary>

|コマンド |分類   |
|:-------|:------|
|uname|[システム情報表示](#システム情報表示)|
|unexpand|[文字列操作](#文字列操作)|
|uniq|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|unlink|[ファイルシステム操作](#ファイルシステム操作)|
|users|[システム情報表示](#システム情報表示)|
</details>

## V,W,Y

<details><summary>V,W,Y</summary>

|コマンド |分類   |
|:-------|:------|
|vdir|[システム情報表示](#システム情報表示)|
|wc|[ファイル内容出力・比較・調査](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E5%AE%B9%E5%87%BA%E5%8A%9B%E6%AF%94%E8%BC%83%E8%AA%BF%E6%9F%BB)|
|who|[システム情報表示](#システム情報表示)|
|whoami|[ユーザー情報表示](#ユーザー情報表示)|
|yes|[文字列操作](#文字列操作)|
</details>

# 分野別 coreutils コマンド一覧
## システム情報表示
コマンドが呼び出されたシステムの情報を標準出力に出力するコマンド群。
シェルスクリプト内で環境に応じて処理を変えたい際のチェック対象値として利用されることが多い。

|コマンド |用途   |
|:-------|:------|
|arch|OSが稼働中であるハードウェアのCPU種別を出力。<br>`uname -a`と同一内容を出力。| 
|date|現在時刻(または指定された時刻)であるUNIX時刻(数値)を、<br>指定された書式の文字列で出力|
|df|マウントされているディスクの使用量を表示|
|dir|lsコマンド同様、ディレクトリ内のファイル一覧を出力。<br>MS-DOS由来|
|du|ファイル単位でディスク使用量を出力|
|hostid|読み取り専用データであるマシン固有のホストIDを16進表記で出力。[^hostidDef]|
|ls|指定されたファイルの情報やカレント/指定されたディレクトリに存在するファイルの一覧等を出力|
|nproc|利用可能なCPU数を表示。<br>マルチコア・マルチスレッドCPUが当たり前の現在は論理CPU数が表示される。|
|printenv|全ての環境変数を出力|
|pwd|カレントディレクトリを出力|
|uname|現在ログインしているシステムのアーキテクチャ,OS名,カーネルバージョン等を出力|
|users|自身を含め、このマシンにログインしているユーザー一覧を出力。<br>whoコマンドの方が多機能なので、このコマンドを利用する必要はない。|
|vdir|ディレクトリに含まれているファイル一覧を出力。<br>lsコマンドとの違いは、lsコマンドはファイルもディレクトリも対象となるが、vdir はディレクトリ専用という点だけなので、あえてこのコマンドを利用することに意味はない。|
|who|ログインしているユーザー一覧を出力。<br>usersコマンドとの違いは、オプション指定により様々な付随情報が得られる点であるため、usersコマンドを利用することに意味はない。|

[^hostidDef]: システムによってホストIDの生成方法は異なるが、一般的にはOSインストール時にNICのMACアドレスを利用して生成しているシステムが多い。<br>大昔のシステムの中には、IPアドレスを元にホストIDを生成、しかもIPアドレスの変更でホストIDも上書きされる、という糞なシステムもあったようで・・・

## ユーザー情報表示
コマンドを呼び出したユーザーや特定ユーザーの情報を標準出力に出力するコマンド群。
シェルスクリプト内で環境に応じて処理を変えたい際のチェック対象値として利用されることが多い。

|コマンド |用途   |
|:-------|:------|
|groups|自分(または指定されたユーザー)が所属するグループ一覧を出力|
|id|自分自身(または指定されたアカウント)のユーザーID(UID)を出力|
|logname|ログインしている自分自身のアカウント名を出力。<br>ほぼwhoami コマンドと同一なのだが、logname はログインプロセスの際に```/var/log/wtmp```に記録されたアカウントを参照し、whoami はシェルを実行しているアカウントデータを参照する点が異なる。[^lognameDef]|
|pinky|伝統的なUNIX系OSにはfingerという、アカウント名、ホームディレクトリ、実名、電話番号といったユーザー情報を表示するコマンドが存在するが、pinkyはこの機能の軽量版。[^pinkyDef]|
|tty|自分が今現在接続しているTTYデバイス名を表示|
|whoami|自分自身のアカウント名を出力|

[^lognameDef]: そのため、ログイン処理が不要なWSL上のLinuxでこのコマンドを実行すると何も表示されない、という現象が発生する。

[^pinkyDef]: しかし昨今、個人情報保護を重視する観点で、実名や電話番号を公開する人が激減したことで、このコマンドを実行する意味がほぼなくなりつつある。

## プロセス実行・評価・管理
シェルスクリプトの中で新しいプロセスを開始したり、インタラクティブシェルから現在動いているプロセスの優先順位を上げたり、といったことを行うためのプロセス制御用コマンド群。

|コマンド |用途   |
|:-------|:------|
|chroot|指定されたディレクトリを新規のルートファイルシステムとみなして<br>OSに新規でログインした扱いとし、新規の環境へと移行する。<br>外部に公開するサービスを実行する際やエミュレータ環境の構築/実行等で頻繁に利用されている|
|env|一時的に環境変数を別の値に上書きしてプログラムを実行|
|expr|与えられた式(他のプログラム実行結果や数値比較等)を評価。<br>評価の途中や評価結果が判明するまでの間に様々な副作用が出ることが多い|
|nice|プロセスの実行優先順位を変更|
|nohup|hangup 信号を無視する設定でコマンドを実行|
|runcon|指定されたセキュリティコンテキストでプログラムを実行<br>SELinuxでのみ有効|
|sleep|指定された時間だけ、何もしないで待機|
|stdbuf|デフォルトの標準入力/標準出力/標準エラーではない<br>入力元/出力先を指定してプログラムを実行|
|timeout|実行時間制限を付与して新規のコマンドを実行。<br>指定時間以内にコマンドが終了しなかった場合、プロセスを強制終了させる|

## 文字列操作
与えられた引数を加工対象文字列とみなして、加工後の文字列を標準出力に出力するコマンド群。<br>引数が与えられなかった場合は標準入力からデータを読み込み、改行文字が登場するたびに加工開始、出力していくものが多い。

|コマンド |用途   |
|:-------|:------|
|basename|ファイル名を意味する文字列の、<br>ディレクトリ名部分を除去した文字列を取得。<br>オプション指定を行えば、MS-DOS/Windowsで言うところの「拡張子」に相当するファイル名末尾の文字列を除去することも可能。|
|cut|指定されたルールに従って、行単位の文字列の部分文字列を取得|
|dirname|ファイル名である文字列から、ディレクトリ名部分のみを抽出|
|echo|引数として与えられた文字列をそのまま標準出力に出力。<br>シェルスクリプト内で頻繁に利用される|
|expand|タブを複数スペースに変換して出力|
|factor|与えられた数字を素因数分解して、結果をスペース区切りの数字へと展開|
|numfmt|"1K"→"1024"のように、単位付きの数値を通常の数値へと展開<br>または<br>"1024"→"1K"のように、通常の数値を単位付きの文字列へと変換|
|printf|与えられた引数を指定された書式へと変換して出力|
|seq|指定された開始値(整数)から終了値(整数,この数も含む)まで、<br>スペース区切りで数字を出力していく|
|tr|部分文字列の置換/削除|
|unexpand|複数スペース文字をタブ文字に変換。<br>expandコマンドの逆の処理|
|yes|強制終了されるまで、永遠に標準出力に対して"y\\n"を出力する。<br>実行途中で\[Y/n\]?のようなメッセージと共にキーボード入力をさせるためにストップするプログラムに対し、<br>問答無用でyを入力させるために使用。|

## ファイル属性変更
|コマンド |用途   |
|:-------|:------|
|chcon|SELinux 上で有効な、ファイル用セキュリティコンテキスト設定コマンド|
|chgrp|ファイルの所有グループを変更|
|chmod|ファイルのアクセスモードを変更|
|chown|ファイルの所有者を変更|

## ファイルシステム操作
|コマンド |用途   |
|:-------|:------|
|cp|通常のファイルコピー。マウント済みのファイルシステム同士でしか実行できない。|
|dd|(ハードウェア寄りという意味での)低レベルでファイル形式を変換しながらのコピー。<br>cp コマンドはマウント済みのディスク上に構築されたファイルシステムの中でしか効果がないが、ddコマンドはファイルシステム構築前/マウント前のディスクデバイスに対しても実行可能なので、ディスクを丸ごとバックアップしたいといった用途で使用。|
|install|ファイルのコピーとコピー先でのファイル属性の設定を同時に行う事が可能なコピーコマンド。[^installDef]|
|link|POSIX 準拠OSの link システムコールを利用して<br>(シンボリックリンクではなく)ハードリンクを作成|
|ln|オプションによりシンボリックリンク/ハードリンクどちらの種類のリンクも作成可能なリンクコマンド|
|mkdir|新規ディレクトリの作成|
|mkfifo|新規FIFO(First In First Out,名前付きパイプ)の作成。<br>通常、実行にはroot権限が必要|
|mknod|/dev 配下に新規のブロックデバイスやキャラクターデバイスを作成<br>通常、実行にはroot権限が必要|
|mktemp|テンポラリファイル/テンポラリディレクトリの作成|
|mv|ファイルの移動またはファイル名の変更|
|readlink|シンボリックリンクが指している実体のファイル名を出力|
|realpath|相対パスの文字列を絶対パスへと変換|
|rm|ファイルの削除。<br>オプションが指定されない限り、ディレクトリの削除は不可能。|
|rmdir|ディレクトリの削除|
|shred|機密性の高いデータを、データ復旧が不可能となるレベルまで徹底的に抹消したい際に利用するコマンド。実行速度は超遅い。[^shredDef]|
|touch|既存ファイルのタイムスタンプ更新<br>空の新規ファイルを作成|
|unlink|指定されたファイルがシンボリックリンクである際はリンク解除となるが、通常ファイルである場合は普通のrmコマンドと同一の処理となるので注意が必要。|

[^installDef]: パッケージインストーラーが裏でこのコマンドを利用していることが多い。
[^shredDef]: 通常のrmコマンドは、ファイルシステムの先頭に記録されている「この場所にこのファイルが存在する」というヘッダデータのみを削除しており、実行速度を大幅に上げている。<br>しかし、この処理だと実際のデータはディスクに記録されたままであり、この場所に別データが上書きされない限り、復元ツールを使ってデータ復旧が可能な状態となるため用意されたコマンド。

## ファイル内容出力・比較・調査
指定された既存ファイル名を引数として受け取り、対象ファイルはテキストファイルであるとみなし

- ファイルの内容をそのまま出力
- ファイルの内容を加工して出力
- ファイルの内容を調査して取得した情報のみを出力
- 指定ルールでファイルを分割して複数ファイル化

といった機能を持つコマンド群。
<br>通常、ファイル名引数の代わりに\-(マイナス)が与えられた場合は既存ファイルではなく標準入力からデータを読み込んで結果を出力する。

|コマンド |用途   |
|:-------|:------|
|cat|ファイルの内容を先頭から末尾まで出力|
|comm|両者ソート済みの2ファイルを行単位で比較|
|csplit|指定された文字列パターンルールに基づいて<br>テキストファイルを複数ファイルに分割|
|fmt|テキストファイルの整形。<br>文法的なチェックは一切行わず、<br>１行の最大文字数を代表とする数的データのみで整形する|
|fold|指定された桁数を超えない行はそのまま出力し、<br>指定桁数を超える行は改行を挿入、折り返して出力|
|head|ファイルを先頭から指定行数分だけ出力。<br>巨大なファイルの先頭部分だけを確認したい際などで使用。<br>指定行数のパラメータにマイナスの数を与えると挙動が変わるので注意|
|join|二つのテキストファイルがともにスペース区切りで複数のフィールドが格納されているデータファイルであるとみなし、<br>最初に指定されたファイルの先頭フィールドを共通キーとして2つ目に指定されたファイルの項目を追加して出力|
|nl|行頭に行番号+スペースを付加してファイルを出力|
|od|ファイルの内容を8進文字列でダンプ|
|paste|2つのスペース区切りの複数フィールドテキストファイルをマージ|
|pr|スペース区切りの複数フィールドテキストファイルを印刷用に整形|
|ptx|テキストファイルの内容から単語索引ファイルを生成。<br>基本的には単語同士がスペースで区切られているテキストデータ(主に欧文データ)にしか対応しない。[^ptxDef]|
|shuf|ファイルの内容を、行単位でランダムな順番で全て出力。<br>sortコマンドの逆とも言える。|
|sort|ファイルの内容を行単位ですべて読み込み、<br>文字コードが(デフォルトでは)昇順となるように並べ替えて出力|
|split|指定されたルール(通常はファイルサイズ)に従ってファイル分割|
|stat|指定されたファイル(またはファイルシステム)の状態を表示|
|tac|行単位でファイルの末尾からファイルの先頭に向かって出力。<br>catコマンドの逆の処理であるため、c,a,tの文字列を逆転させたt,a,cがコマンド名の由来となっている|
|tail|指定されたファイルの末尾を、指定された行数分だけ出力。<br>headコマンドの逆の処理。<br>ログファイルのように延々と新規行が追加されていくような性格を持つファイルに対し、特定のオプションを指定したこのコマンドを実行することで、強制終了されるまで新規行が追加されたこことを検知しながら追随して出力していく、という機能も持っている|
|truncate|既存ファイルのファイルサイズを指定した値に設定。<br>現在のファイルサイズが指定値よりも大きい場合は超過分が切り捨てられる。<br>現在のファイルサイズが指定値よりも小さい場合は0が補填されて指定サイズまで拡張される。|
|tsort|用途はsortコマンドと同一。<br>ソート方式が[トポロジカルソート](https://qiita.com/Morifolium/items/6c8f0a188af2f9620db2)であることが違い。[^tsortDef]|
|uniq|ソート済みのテキストファイルで重複行を削除して出力。[^uniqDef]|
|wc|テキストファイル内の行数・単語数・文字数のいずれかを取得して数字として出力|

[^ptxDef]: 従って、文章や文節の解釈を行ったうえで単語単位に切り分け、スペースで区切られたデータを生成、という前処理を行わない限り、日本語をはじめとする漢字文化圏のテキストデータに対するこのコマンドの用途はゼロに等しい。

[^tsortDef]: 詳細を調べていないので実際に速いのか、とか通常のsortコマンドのアルゴリズムといった情報は不明。

[^uniqDef]: ソート前のデータを投入しても重複行は残ったままとなる

## エンコード/デコード
特定範囲のASCIIコードテキストデータしか受け付けないプロトコルやシステムとのデータの送受信が必要となる場合(現在も利用されている具体的なシチュエーションとしては電子メールやHTTP認証等)、
- 自身から相手にバイナリデータを送り付ける前に特定の方式でテキスト化する処理(エンコード)
- 相手から自身がエンコード済みのテキストデータを受け取ったのち、テキストデータを特定の方法でバイナリファイルに復元する処理(デコード)

が必要になってくるが、これらを行うためのコマンド群。<br>現代、ユーザーがシェルからコマンドを打ってエンコード/デコードを行うことはまずないため[^encode]、これらのコマンドの利用頻度もかなり低い。

[^encode]: ユーザーが通常利用するメールソフトやブラウザソフトが必要に応じて自動的に裏プロセスでエンコード/デコード処理を行うため、隠蔽されている。

|コマンド |用途   |
|:-------|:------|
|base32|BASE32方式でエンコード/デコード|
|base64|BASE64方式でエンコード/デコード|
|basenc|オプションで指定した方式を利用してエンコード/デコード|


## ダイジェスト作成/確認
このグループに属するコマンドは、
- ファイル転送時、送受信エラーが発生していないか
- ファイル作成者が公開後、第三者による不正なデータ改ざんが行われていないか

といったデータトラブルの有無をチェックする際に必要となるコマンド群であり、どんなアルゴリズムでチェック用文字列(ダイジェストメッセージ)を生成/確認するか、という違いで何種類もコマンドが存在する。しかし、どのコマンドもやることは全く同じコマンド群である。

ダイジェストメッセージとは、「たとえファイルサイズ+変更日時が同一であっても、1ビットでも内容が異なる場合は全く異なった不可逆文字列を返す」アルゴリズムでファイルを処理して得ることができる文字列のことである。<br>ダイジェストメッセージの作成はデータを公開する側の処理、ダイジェストメッセージの確認は公開されているデータを受け取る側の処理となる。

### 自身のデータを公開する前に行う処理(ダイジェスト作成)
1. 公開したいファイルのダイジェストを生成
1. 公開したいファイル本体、および 1 で作成したダイジェストも公開

### 他者が公開するデータをダウンロードした後に行う処理(ダイジェスト確認)
1. 公開データ本体のダウンロード
1. 1でダウンロードしたファイル向けの(オリジナル)ダイジェストデータを取得
1. 1でダウンロードしたファイルに対してローカルのダイジェストを作成し、2で取得したオリジナルダイジェストと値が同一であることを確認。

この処理でローカルとオリジナルのダイジェスト値が異なることが判明した場合は、ダウンロードが失敗したか、公開者が公開した時点のデータとは中身が異なる、ともすれば改ざんされたデータである、と判断できる。[^digest]

[^digest]: クラッカーはアルゴリズムの抜け穴を付いて「ダイジェストメッセージが同一となる改ざん」を行う可能性があるため、古過ぎる/ビット数が少ないアルゴリズムで作成されたダイジェストメッセージは信頼できない可能性がある。したがって、可能な限り新しいアルゴリズムでビット数の多いコマンドでダイジェストを確認することが望ましい。

|コマンド |用途   |
|:-------|:------|
|b2sum|BLAKE2アルゴリズムでダイジェスト生成/確認。<br>BLAKEアルゴリズムはMD5やSHA1系列を置き換えるべく発表されたアルゴリズムで、SHA-2最終候補とされたアルゴリズムなので、可能であればこれかSHA-2系列を利用するのがよい。<br>2021年にBLAKE3アルゴリズムが発表されたものの、実装はまだ。<br>2012年発表のこのアルゴリズムがほぼ最新だが普及度の点で問題あり。|
|cksum|ファイルのCRCチェックサムと総バイト数を出力。<br>アルゴリズムが古すぎるため、新規で使うべきではない。|
|md5sum|MD5アルゴリズムでダイジェスト作成/確認。<br>アルゴリズムが結構古いため、あまり使うべきではない。|
|sha1sum|SHA1(160-bit)アルゴリズムでダイジェスト作成/確認。<br>アルゴリズムが結構古いため、あまり使うべきではない。|
|sha224sum|SHA224(SHA-2,224-bit)アルゴリズムでダイジェスト作成/確認|
|sha256sum|SHA256(SHA-2,256-bit)アルゴリズムでダイジェスト作成/確認|
|sha384sum|SHA384(SHA-2,384-bit)アルゴリズムでダイジェスト作成/確認|
|sha512sum|SHA512(SHA-2,512-bit)アルゴリズムでダイジェスト作成/確認|
|sum|SysV/BSD互換アルゴリズムでファイルのチェックサム+ファイルサイズを表示。<br>アルゴリズムが古すぎるため、新規で使うべきではない。|

## その他
|コマンド |用途   |
|:-------|:------|
|\[|用途はtest コマンドと同一で、主にシェルスクリプト内で利用。<br>コマンド名である '[' と対を為す必須引数 ']'の間で挟まれた他の引数をテスト条件として評価し、<br>該当していれば0,　該当していない場合は1,エラーが発生した場合は2を返す。[^testStartDef]<br>大昔の/bin/shにとっては必須のコマンドであったが、今時使われているシェルではこのコマンドの機能がシェルの内部機能として実装されていることが多いので、現代では```/usr/bin/[```のようにフルパス記述をしない限り、このコマンドが利用されることはほぼない。|
|dircolors|lsコマンドの結果を、<br>ファイル属性による色分け出力としたい場合、<br>特定の環境変数を設定する必要がある。<br>この環境変数を設定するためのユーティリティ|
|false|何もしないが、OSから見たときの「コマンド実行が失敗した」状態を得られる。<br>trueコマンドの逆。<br>その性格上シェルの内部機能に統合されていることが多く、フルパス指定で呼び出さない限りcoreutilsのバイナリが呼び出されることはない。|
|pathchk|与えられた文字列がPOSIXで規定されているファイル名ルールに合致しているか否かを確認|
|stty|TTYデバイスとの接続条件を表示/変更|
|sync|内部記憶(メモリ)-外部記憶装置(現代だとSSD/HDD等)間の同期用コマンド。<br>本来ならば既にディスクに書き込まれているべきデータが、ディスク装置側の都合で未だディスクに書き込まれず、メモリ上でのみ存在する、という決して望まれない状態を解消するために、強制的にメモリからディスクに同期させるコマンド。[^syncDef]|
|tee|簡単に言えば出力先を分岐させるコマンド。<br>標準入力から受け取ったデータを、全く加工することなく標準出力ともう一つの出力先へ同時に出力。<br>アルファベットのTがコマンド名の由来|
|test|与えられた引数をテスト条件と解釈し、テストが成功した場合は0,失敗した場合は1,エラーが発生した場合は2を返す。<br>テスト対象は、二つの変数の値比較(等しい,等しくない,大小,文字列のパターンマッチ等)、ファイルやディレクトリが存在するか、といった内容となる。<br>大昔の/bin/shにとっては必須のコマンドであったが、今時使われているシェルではこのコマンドの機能がシェルの内部機能として実装されていることが多いので、現代では```/usr/bin/test```のようにフルパス記述をしない限り、このコマンドが利用されることはほぼない。|
|true|何もしないが、OSから見たときの「コマンド実行が成功した」状態を得られる。<br>falseコマンドの逆。<br>その性格上シェルの内部機能に統合されていることが多く、フルパス指定で呼び出さない限りcoreutilsのバイナリが呼び出されることはない。 |
[^testStartDef]: 対となる ']'は、このコマンドの必須オプション扱いであるため、']' コマンドは存在しない。
[^syncDef]: SSDが主流となった状況下にある現在、このコマンドはディスクへの書き込みが超絶遅かった時代の遺物でしかない。ただし、巨大なメモリを搭載し、膨大な量のデータをメモリ上で処理しているデータベースサーバ等では未だに有効とも聞く。

# まとめ

- 現代のシェルに機能を完全に取り込まれ、大昔の /bin/sh 向けに書かれたシェルスクリプトファイルを問題なく動作させるためだけに準備されているコマンド
- 大昔の動作が遅いハードウェア環境向けのコマンド
- 各種ブラウザ、curlやwgetといったソフトウェアによってHTTPプロトコル経由でバイナリファイルを直接取得/送信可能となり、ユーザーがシェル上でコマンドからエンコード/デコードすることはほぼ皆無となった現在はあまり用途がない、エンコード/デコード用コマンド
- JSONやXMLといった構造化されたUnicodeテキスト、またはExcel,PDFといったバイナリ形式でのデータ流通が当たり前となっている現在、古いデータのインポート用途以外ではあまり利用されないスペース区切り/文字数固定テキストデータ形式に対してのみ有効なコマンド

といったコマンドが多数存在するため、正直申し上げるとすべてのコマンドの利用法を完璧に覚える必要はない、とは思います。ですが、

- 本当に古いシステムや、便利なソフトをインストールすることが不可能な最低限インストールされたシステム等をメンテナンスする必要に迫られる
- 先人が書いたシェルスクリプトを読み解く必要に迫られる
- 自作プログラム/スクリプトの命名時に既存のコマンド名との重複は避けたい

といった状況下に置かれる可能性がある人にとって、coreutilsコマンドの知識は「知っておいて損はない」と思います。

次回以降、順次重要な個別コマンドのオプション、実行例などを挙げていきたいと思います。