Lpic公式サイトのLpicLevel1-102の出題範囲についてまとめた

# 説明
LpicLevel1-102を効率的に学習するため、公式サイトより出題範囲と情報をまとめた。
３週間学習してギリギリの合格でした；
![2022-04-05 17_10 Microsoft Lens.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512846/261e35ef-8438-0005-a5c9-59b9cef66d78.jpeg)




**[101の学習に関する内容はこちら](#https://qiita.com/Ryotarosu22/items/333052a8781d4143db60)**

## Topic 105: Shells and Shell Scripting/シェルおよびシェルスクリプト
### 105.1 Customize and use the shell environment/シェル環境のカスタマイズと使用
Weight: 4

* **.**
dotは、現行環境でシェル・スクリプトを実行し、そのあと戻ってくる。通常、cdなどによる環境の変更がコマンド・ファイルにローカルであるように、シェルはコマンド・ファイルを子シェル内で実行する。
ファイル名にスラッシュがある場合、.(dot)は名前付きファイルを探す。スラッシュがない場合には、.(dot)は PATH変数で指定されたディレクトリー内のファイルを検索する
ドットコマンドでスクリプトを起動すれば、新たなシェルは起動せずカレントシェルからこのスクリプトを起動する。
スクリプトで設定した変数をカレントシェルに引き継ぎたい場合などに使用する

* **source**
指定したシェルスクリプトを読み込み、現在のシェルで実行する。主にシェルの設定ファイルを反映させる際に使用。
sourceコマンドはシェルに組み込まれたビルトインコマンドで、bashやtcsh、zshに共通して使用できます。
シェルスクリプトに実行権が無い場合でも実行できるが、実行するシェルスクリプトに読み取り権と、シェルスクリプトが存在するディレクトリに検索権が必要である（ディレクトリに設定されたパーミッション「x」（検索権））。
ビルトインコマンド「.」の処理内容は、sourceと全く同じである

* **/etc/bash.bashrc**
Debian系でbash起動時に読み込まれ、bash起動時に実行させたい処理（エイリアスなど）が設定される
* /etc/profile
Linuxの標準シェルであるbashの環境設定ファイル
ログイン時に読み込まれ、環境変数や利用環境について設定される

* **env**
環境変数を一時的に変更したり、削除したりしてコマンドを実行する。指定した環境変数の値は、envコマンドで実行したコマンドにのみ反映される

|オプション|動作|
|:---:|:---:|
|-i|何も環境変数が設定されていない状態にする|
|-u|環境変数を一時的に削除|
|環境変数名=値|環境変数の値を一時的に指定値に変更|
|無|全ての環境変数を表示|

* **export**
シェル変数を環境変数として設定する

* **set**
bashの組み込みコマンドで、シェル変数だけでなく環境変数も表示する。また、bashはシェル変数とシェル関数を区別しないため、シェル関数も確認できる
シェルのオプション機能はsetコマンドで有効・無効を設定する
オプション無しで定義済みのシェル関数を確認できる。「declare -f」コマンドと同じ
オプションを有効にするには「**-o**」、解除するには「**+o**」

|オプション|動作|
|:---:|:---:|
|allexport|新規作成・変更した変数を自動的に環境変数とする|
|emacs|emacsと同じキーバインドにする|
|ignoreeof|Ctrl+Dを押してもログアウトしない設定にする|
|noclobber<br>(clobber:上書きする)|リダイレクト演算子で既存の<br>ファイルを上書不可にする|
|noglob|パス名展開を無効にする|
|noexec|シェルスクリプトを読み込むが、実行せずに構文エラーのみを確認する|
|-o|シェルのオプションの設定状態を確認する|
|vi|viエディタと同じキーバインドにする|

* **unset**
bashで定義した変数や関数を削除する。bashのビルトインコマンド（シェルの組み込みコマンドです）である

* **~/.bash_profile**
ログイン時に読み込まれ、環境変数などユーザー環境に関わるものが設定される

* **~/.bash_login**
「~/.bash_profile」がない場合にログイン時に読み込まれ、環境変数などユーザー環境に関わるものが設定される

* **~/.profile**
「~/.bash_login」がない場合にログイン時に読み込まれ、環境変数などユーザー環境に関わるものが設定される

* **~/.bashrc**
bash起動時に読み込まれm￥、bash起動時に実行させたい処理（エイリアスなど）が設定される

* **~/.bash_logout**
ログアウト時に読み込まれ、ログアウト時に実行させたい処理が設定される

* **function**
bashの組み込みコマンドで、bash上で独自のシェル関数を作成できる
シェルスクリプトの関数には、いわゆる戻り値というものが存在しない。returnコマンドに指定した値は、関数の終了ステータスとなるだけで、一般的な戻り値としては機能しない。
シェルスクリプトの関数は、戻り値ではなく標準出力で結果を返す。

* **alias**
引数無しで実行すると現在登録されているエイリアス（別名）が確認できる
コマンドが2語以上になる場合は、シングルクォート（'）もしくはダブルクォート（"）で括ること
一時的にエイリアスを無効にする場合は、エイリアスコマンドの前にバックスラッシュ(\or¥)を入力し実行

### 105.2 Customize or write simple scripts/簡単なスクリプトのカスタマイズまたは作成
Weight: 4

* **for**
for文は一定回数の繰り返し処理を行う場合に使用するループ制御文である。もしくはある値の集合に対して、それぞれの要素を処理するループ制御文である。
一般的には処理回数や、処理対象となる集合が明確な場合にはfor文を使用する。その他の場合はwhile文を使用することになる。
for文は、指定された「値のリスト」を「変数名」に1つずつ格納していき、その度にdo～doneの間の「実行文」を処理します。以下は文法；
for 変数 in 値リスト
do
  処理
done

* **while**
while文は「ある条件が成り立っている間のみ繰り返し処理を実行する」といった、不定回の繰り返し処理を行う場合に使用するループ制御文である。一般的に処理回数が明確である場合にはfor文を用いるが、処理回数が開始時点では不明確な場合はこのwhile文を用いる。
while文は始めに指定された条件式の終了ステータスを判定し、結果が真である場合のみループ処理を継続する。ループ毎に条件式を評価し真であれば処理を実行する。これを繰り返し、条件式が偽になった時点でループ処理をを終了する。以下は文法；
while 条件式
do
  処理
done

while 文にはループの継続条件となる条件式を指定する。条件式には test コマンドを使用するのが一般的だが、当然その他のコマンドも使用可能である。while文により条件式に指定したコマンドが実行され、その終了ステータスが「0」、つまり真である場合のみループが継続される。

* **test**
条件式の真偽の判断をする。真の場合は0、偽の場合は1を返す

* **if**
if文とは、与えられた条件式が真のときのみ処理を行い、それ以外の場合は処理をスキップする、などといった場合に使用される条件分岐処理である。条件式には一般的にtestコマンドを用いる。
if文は条件式に指定されたコマンドの終了ステータスを判定し分岐を行う。終了ステータスが「0」の場合は真、その他の場合は偽となる。
以下は文法；
if 条件式 ; then
  処理
fi

* **read**
標準入力から、またはリダイレクションによるテキストファイルなどからデータを読み取り、それを変数に代入する
実行するとキーボードからの入力待ち状態になり、Enterキーが押されるまで入力された値が指定した変数に設定される

* **seq**
単調増加（減少）する連続した数値を作成する。数値の区切り文字はデフォルトで改行
以下の書式がある；
1.seq　開始する数値　終了する数値
2.seq　終了する数値(1から開始)
3.seq　開始する数値 増加する値 終了する数値

* **exec**
指定したコマンドを既存のジョブ(シェルのプロセス)と置き換えて実行する。bashの組み込みコマンド

* **||、&&**
「;」：前のコマンドが終わり次第、次のコマンドが実行する。
「&(アンパサンド)」：;(セミコロン)は前のコマンドの完了を待っていたが、&は待たない。
「&&」：前のコマンドがうまく終了した(終了ステータスが0)なら、次のコマンドを実行。そうでないなら次のコマンドは実行しない。
「||」：&&とは逆で前のコマンドに失敗(終了コード0以外)したら、次のコマンドを実行する。

## Topic 106: User Interfaces and Desktops/ユーザインターフェイスとデスクトップ
### 106.1 Install and configure X11/X11のインストールと設定
Weight: 2

* **/etc/X11/xorg.conf**
Linuxで標準的に使用されているX Window SystemであるX.Orgの設定ファイル

主なセクション
|セクション名|説明|
|:---:|:---:|
|ServerLayout|入出力デバイスについて|
|Files|RGBカラーデータベースの場所やフォントの格納場所について|
|Module|組込モジュールの指定|
|InputDevice|入力デバイスについて|
|Monitor|モニタータイプについて|
|Device|ビデオカードについて|
|Screen|ディスプレイの表示色数や画面サイズなどについて|

* **/etc/X11/xorg.conf.d/**
X.Orgの設定として拡張子.confのファイルを保存するディレクトリ
/etc/X11/xorg.confは、Linuxで標準的に使用されているX Window SystemであるX.Orgの設定ファイル

* **~/.xsession-errors**
GUIログイン時のX Window Systemのエラーが、ユーザのホームディレクトリにあるこのファイルに出力される

* **xhost**
Xサーバへのアクセス許可・不許可をコントロールする
xhostコマンドはホスト単位でXサーバへのアクセスを許可するが、xauthコマンドはユーザ単位でXサーバへのアクセスを制限するため、xhostコマンドはセキュリティ上好ましくない

|オプション|説明|
|:---:|:---:|
|+ホスト名|指定したホストを許可リストに追加（省略可）|
|-ホスト名|指定したホストを許可リストから削除|
|+|全てのアクセスを許可|
|-|許可リストにあるホストのみ接続を許可|

* **xauth**
Xサーバへの接続に使用される資格情報を表示したり、クライアント認証ファイルを編集する
xauthコマンドはユーザ単位でXサーバへのアクセスを制限するが、xhostコマンドとはホスト単位でXサーバへのアクセスを許可するため、xauthコマンドはセキュリティ上好ましい

* **DISPLAY**
Xクライアントに対してXサーバーを識別するためにユーザーのDISPLAY環境変数を設定する。

* **X**
X Window Systemとは、MITで開発されたウィンドウシステムで、現在ほとんどのUNIX系システムで標準的に採用されている。クライアント・サーバモデル、 ネットワーク透過性などの特徴がある。
X、X Window System、X Version 11、 X Window System, Version 11、X11などと呼ぶことが推奨されており、多くの場合、Xと略して呼ぶ。
Xクライアントに対してXサーバーを識別するためにユーザーのDISPLAY環境変数を設定する。

### 106.2 Graphical Desktops/
Weight: 1

* **KDE**
QtというGUIツールキットをベースに開発されたデスクトップ環境。Xfceに比べて多くのメモリやCPUリソースを必要とする
標準のディスプレイマネージャはKDM
標準のウィンドウマネージャはKWin

* **Gnome**
GTK+というGUIツールキットをベースに開発されたデスクトップ環境。Xfceに比べて多くのメモリやCPUリソースを必要とする
標準のディスプレイマネージャはGDM

* **Xfce**
XForms Common Environmentの略で、XFormsツールキットをベースに開発されたメモリやCPUの消費量が少ない軽量のデスクトップ環境
GNOMEやKDEに比べて軽快に動作し、見た目も良く、使いやすい。
の頭文字が名前の由来です

* **X11**
X Window Systemの通称（Xともいう）
X Window SystemはUNIXやLinuxでGUIを実現するために使用される

* **XDMCP**
X Display Manager Control Protocolの略で、XサーバとXクライアント間を制御するプロトコル
このプロトコルを使用してリモートホストのデスクトップ環境にログインできる

* **VNC**
Virtual Network Computingの略で、LinuxやWindows、macOSなど異なるOS間で接続できるリモートデスクトップソフトウェアのこと

* **Spice**
Simple Protocol for Independent Computing Environmentsの略で、オープンソースで開発されている画面転送プロトコル

* **RDP**
Remote Desktop Protocolの略で、Windows標準のリモートデスクトップ機能で使用される通信プロトコル。Windows側でリモートデスクトップでのアクセスを許可する設定を行い、Linux側にRemminaやFreeRDPなどのリモートデスクトップクライアントをインスト－ルすれば、LinuxからWindowsのデスクトップを操作できるようになる


### 106.3 Accessibility/アクセシビリティ
Weight: 1

* **High Contrast/Large Print Desktop Themes.**
ハイコントラスト：視覚障害者のために、ディスプレイに表示されるコントラストを強調して見やすくする機能

* **Screen Reader.**
スクリーンリーダー：視覚障害者のために、スクリーン上の文字を音声に変換して読み上げる機能

* **Braille Display.**
点字ディスプレイ：文字データを点字に変換して表示するする機能

* **Screen Magnifier.**
スクリーン拡大鏡：文字や画像を拡大表示して見やすくする機能画面の一部領域を拡大する機能で、その部分のテキストを読みやすくするもので、眼精疲労を防ぎ、視力の悪い人のためであったり、単に画面が離れて多人数で見るときなどに役立つ

* **On-Screen Keyboard.**
オンスクリーンキーボード：キーボードを使用せずに、マウスを使用してスクリーン上で文字を入力する機能

* **Sticky/Repeat/Slow/Bounce/Toggle/Mouse keys.**
キーボードアクセシビリティについて

|名前|説明|対象ユーザ|
|:---:|:---:|:---:|
|スティッキーkey<br>(粘着性)|修飾キーの後に入力したキーを同時押しとみなす|2つ以上のキーを同時に押せない|
|スローkey|一定時間キーを押下しないと無視|正確にキー入力が難しい|
|バウンスkey<br>（跳ねる）|同じキーの入力は一定時間無視|意図せず何度も同じキーを押してしまう|
|トグルkey<br>（留め釘）|NumLock、CapsLock、ScrollLockキーがオンで１回、オフで２回ピープ音が鳴る|ランプが見えない|
|マウスkey|マウスの代わりにテンキーを使いマウスポインタを操作|マウス操作が難しい|
|リピートkey|一定時間キーが押下されないとキーがリピートしない|キー押下直後に離せないユーザ|

* **Gestures.**

* **Voice recognition.**

## Topic 107: Administrative Tasks/管理業務
### 107.1 Manage user and group accounts and related system files/ユーザアカウント、グループアカウント、および関連するシステムファイルの管理
Weight: 5

* **/etc/passwd**
ユーザのアカウント情報が格納されたファイル
「:」で各情報が区切られる
このファイルは、各ユーザがシステムにログインする際などユーザ情報が必要なときに参照されるファイル。そのため、パーミッションは一般ユーザでも参照できるよう、その他のユーザにも読み取り権限が付与されている。
このファイルの各行の第2フィールドは本来パスワードが記述されるのですが、シャドウパスワードを利用していると、この部分が「x」となっている。この場合、パスワードは「/etc/shadow」ファイルに書かれる。
この「/etc/passwd」ファイルを直接編集する際には、viなど普通のエディタで編集することは避け、他のプロセスから「/etc/passwd」ファイルが変更されないようにロックをかける「vipw」コマンドの利用が推奨される。
しかし、不適切な編集を行うと、ユーザがシステムにログインできなくなるため、ユーザ情報を変更するにはvipwで直接/etc/passwdを編集するのではなく、usermodコマンドなどを使って行うのがより望ましい。

* **/etc/shadow**
暗号化されているパスワード（シャドウパスワード）や、パスワードの有効期限に関する情報が格納される
グループのパスワードが暗号化された場合、シャドウパスワードは「/etc/gshadow」ファイルに格納

* **/etc/group**
プライマリグループ以外のグループに関する情報が記載されるファイル
groupmodで既存のグループアカウントの設定を変更など行い設定した情報がこのファイルファイルに格納される

* **/etc/skel/**
「useradd」コマンドでユーザを新規作成する際、ホームディレクトリが存在しない場合には、ホームディレクトリが作成され、「/etc/skel」ディレクトリ以下のファイルが、雛形（スケルトン）としてホームディレクトリにコピーされる。共通の設定ファイルなどをユーザ作成時に配布する場合などに使用

* **chage**
パスワードの有効期限の詳細な設定やその表示ができる
パスワードの有効期限に関する情報は「/etc/shadow」ファイルに保存される

|オプション|説明|
|:---:|:---:|
|-E|アカウントの有効期限を指定|
|-I|パスワード有効期限切れ後に何日でロックされるかを指定|
|-l|パスワードの有効期限に関する情報を表示|
|-m|パスワードの変更間隔の最短日数を指定|
|-M|パスワードが有効な最長日数を指定|
|-W|パスワード有効期限切れ前に警告を表示する日数を指定|

* **getent**
/etc/nsswitch.confの設定に従って検索を行う

* **groupadd**
グループアカウントを新規作成

* **groupdel**
グループアカウントを削除

* **groupmod**
既存のグループアカウントの設定を変更
設定した情報は「/etc/group」ファイルに格納される

|オプション|説明|
|:---:|:---:|
|-g|GIDを変更|
|-n|グループ名を変更|


* **passwd**
ユーザのパスワードを変更

|オプション|動作|
|:---:|:---:|
|-l|パスワードをロックする|
|-u|パスワードをアンロックする|

アカウントを一時的に使用不可にするに上記オプションの「-l」を使うほか、「/etc/passwd」または「/etc/shadow」ファイルの該当ユーザのパスワードフィールドの1文字目に「!」または「*」を追加する方法もある


* **useradd**
ユーザアカウントを新規作成する。ホームディレクトリが存在しない場合には、ホームディレクトリが作成され、「/etc/skel」ディレクトリ以下のファイルが、雛形（スケルトン）としてホームディレクトリにコピーされ、共通の設定ファイルなどをユーザ作成時に配布する場合などに使用される。
Debian系では、ホームディレクトリは「-m」オプションを使用しないと作成されない
オプションを指定せずにユーザを追加すると、ホームディレクトリやログインシェルなどにはデフォルトの値が使用され、デフォルトの値は、「**/etc/default/useradd**」ファイルに保存される

|オプション|説明|
|:---:|:---:|
|-c|コメントを指定|
|-d|ホームディレクトリを指定|
|-D|アカウントのデフォルト値を表示または設定|
|-g|プライマリグループを指定|
|-G|補助グループを指定|
|-m|ホームディレクトリを作成|
|-p|暗号化済みのパスワードを設定|
|-s|ログインシェルを指定|

* **userdel**
ユーザアカウントを削除

|オプション|動作|
|:---:|:---:|
|-f|-rと併用することで、ユーザがログイン中などで<br>削除できない時に強制的に削除できる|
|-r|アカウントとともにユーザのホームディレクトリも削除する|

* **usermod**
既存のユーザアカウントの設定を変更する

|オプション|説明|
|:---:|:---:|
|-d|ホームディレクトリを指定|
|-g|プライマリグループを指定|
|-G|補助グループを指定|
|-L|パスワードをロックする|
|-p|暗号化済みのパスワードを設定|
|-s|ログインシェルを指定|
|-U|パスワードをアンロックする|

アカウントを一時的に使用不可にするには上記オプションの「-L」を使うほか、「/etc/passwd」または「/etc/shadow」ファイルの該当ユーザのパスワードフィールドの1文字目に「!」または「*」を追加する方法もある

### 107.2 Automate system administration tasks by scheduling jobs/ジョブスケジューリングによるシステム管理業務の自動化
Weight: 4

* **/etc/cron.{d,daily,hourly,monthly,weekly}/、/var/spool/cron/、/etc/crontab**

|対象|設定ファイル・ディレクトリ名|内容|編集方法|ジョブの実行権限|
|:---:|:---:|:---:|:---:|:---:|
|ユーザ|/var/spool/cron/ユーザ名|ユーザ用の設定ファイル|crontabコマンド|コマンド使用ユーザの権限で実行|
|システム|/etc/crontab|システム用の設定ファイルで、主にhourly、daily、weekly、monthlyのディレクトリに置かれたスクリプトを実行|エディタ|設定ファイルで指定したユーザの権限で実行|
|システム|/etc/cron.hourly/|毎時実行するスクリプトを置く|エディタ|設定ファイルで指定したユーザの権限で実行|
|システム|/etc/cron.daily/|毎日実行するスクリプトを置く|エディタ|設定ファイルで指定したユーザの権限で実行|
|システム|/etc/cron.weekly/|毎週実行するスクリプトを置く|エディタ|設定ファイルで指定したユーザの権限で実行|
|システム|/etc/cron.monthly/|毎月実行するスクリプトを置く|エディタ|設定ファイルで指定したユーザの権限で実行|
|システム|/etc/cron.d/|サービス個別のジョブ実行を定義した設定ファイルを置く|エディタ|設定ファイルで指定したユーザの権限で実行|


* **/etc/at.deny**
at、batchのアクセス制御に使用されるファイル
利用を拒否するユーザを記述する

* **/etc/at.allow**
at、batchのアクセス制御に使用されるファイル
利用を許可するユーザを記述する

* **/etc/cron.allow**
cronのアクセス制御に使用されるファイル
各ファイルは以下の順序で評価される;
1. 「/etc/cron.allow」ファイルがあれば、記述のあるユーザのみが利用可能
2. 「/etc/cron.allow」ファイルがなければ、「/etc/cron.deny」を参照し、そこに記述のないユーザが利用可能
3. 両方のファイルがなければ、rootユーザのみが利用可能

* **/etc/cron.deny**
cronのアクセス制御に使用されるファイル
各ファイルは以下の順序で評価される
1. 「/etc/cron.allow」ファイルがあれば、記述のあるユーザのみが利用可能
2. 「/etc/cron.allow」ファイルがなければ、「/etc/cron.deny」を参照し、そこに記述のないユーザが利用可能
3. 両方のファイルがなければ、rootユーザのみが利用可能

* **crontab**
ファイルのcrontabでは、1行ごとに、自動的に実行するコマンドおよびその実行日時を指定
以下はコマンドのcrontab
crontabから実行されたコマンドの出力は、デフォルトではそのcrontabの所有ユーザにメールで送られる

|オプション|説明|
|:---:|:---:|
|無|実行には注意すること|
|-e|crontabファイルを編集|
|-l|crontabファイルを表示|
|-r|crontabファイルを削除|

* **at**
1度だけ実行するジョブを予約する
atのジョブの管理には「at」コマンドを使用

|オプション|説明|
|:---:|:---:|
|-d|指定した予約中のジョブを削除<br>atrmコマンドと同じ|
|-l|予約中のジョブを表示<br>atqコマンドと同じ|

* **atq**
atコマンドで実行予約した登録を表示する
at -lと同じ動作

* **atrm**
atコマンドで実行予約した登録を削除する
at -dと同じ動作

* **systemctl**
全ての有効なtimerユニットを表示するにはsystemctl list-timersを実行

* **systemd-run**
systemdで、一時的なユニットを作成してジョブを実行する
timerユニットを設定するにはtimerユニットと対応するジョブ本体のユニットを作成したりと手間がかかりますが、systemd-runコマンドを使用することでより簡単にジョブをスケジューリングできる
 
### 107.3 Localisation and internationalisation/ローカライゼーションと国際化
Weight: 3

* **/etc/timezone**
値は**tzselect**コマンドで確認できる

* **/etc/localtime**
ファイル
国や地域ごとの標準時間帯（タイムゾーン）の設定で「/usr/share/zoneinfo/」ディレクトリ以下のバイナリファイルと使用する
「/usr/share/zoneinfo/」はバイナリファイルはタイムゾーンを設定する際に使用され、このディレクトリ以下には、国や地域ごとにタイムゾーンの情報がバイナリファイルとして格納されており、タイムゾーンの設定は、それらのバイナリファイルから、システムで使用したいタイムゾーンのものを「/etc/localtime」へコピーまたはシンボリックリンクを作成することで行える

* **/usr/share/zoneinfo/**
ディレクトリ
国や地域ごとの標準時間帯（タイムゾーン）の設定で、このディレクトリ以下のバイナリファイルと「/etc/localtime」ファイルを使用する
「/usr/share/zoneinfo/」はバイナリファイルはタイムゾーンを設定する際に使用され、このディレクトリ以下には、国や地域ごとにタイムゾーンの情報がバイナリファイルとして格納されています。タイムゾーンの設定は、それらのバイナリファイルから、システムで使用したいタイムゾーンのものを「/etc/localtime」へコピーまたはシンボリックリンクを作成することで行える

* **LC_*、LC_ALL、LANG**

|環境変数|説明|
|:---:|:---:|
|LANG|指定値で全カテゴリを上書きする（個別設定も可能）|
|LC_ADDRESS|アドレス・ロケーションの書式|
|LC_ALL|指定値で全カテゴリを上書きする|
|LC_CTYPE|文字の分類・種類の規定|
|LC_MESSAGES|出力メッセージの言語|
|LC_MONETARY|通貨の書式|
|LC_NAME|名前の書式|
|LC_NUMERIC|数値の書式|
|LC_TELEPHONE|電話番号の書式|
|LC_TIME|日付・時刻の書式|

* **TZ**
国や地域ごとの標準時間帯（タイムゾーン）の設定方法の1つで環境変数TZを使用する
値はtzselectコマンドで確認できる

* **/usr/bin/locale**
シングルユーザモードで利用しないもので、RPMやdebなどのパッケージ管理システムによってシステムに管理されないコマンドやプログラムを置くディレクトリ。自作のスクリプトなどをこのディレクトリに置くことが一般的。Linuxディストリビューションをインストールしたばかりのときは、このディレクトリが空であることが多い

* **tzselect**
環境変数「TZ」や「/etc/timezone」ファイルで指定する値を確認できる

* **timedatectl**
systemdの動作するシステムにおいてシステム時刻の表示や設定を行う。dateコマンドのようにシステムクロックを操作するだけではなく、システムクロックとハードウェアクロック（コンピュータに内蔵された時刻）を同時に設定できる
サブコマンドを指定せずにtimedatectlを実行すると、statusサブコマンドと同じで現在の日付時刻が表示される

|サブコマンド|説明|
|:---:|:---:|
|list-timezones|タイムゾーンの一覧表示|
|set-ntp yes or no|NTPによる時刻同期のオンオフ|
|set-time|日付や時刻の設定|
|set-timezone|タイムゾーンの設定|
|status|現在の日時や状態の表示|

* **date**
システムクロックの参照や設定を行う
書式はdate [ **（月日時分西暦.秒）** MMDDhhmm[CC[YY]][.ss]]

* **iconv**
文字コードを変換する

|オプション|説明|
|:---:|:---:|
|-f|変換前の文字コードを指定|
|-l|扱える文字コードを表示|
|-t|返還後の文字コードを指定|

* **UTF-8、ISO-8859、ASCII、Unicode**

主な文字コード
|文字コード|説明|
|:---:|:---:|
|ASCII|7ビットの文字コード<br>128種類の文字を表現|
|ISO-8859|ASCIIを8ビットに拡張したもの<br>256種類の文字を表現|
|EUC-JP|UNIX環境で標準的に利用されていた日本語文字コード|
|Shift_JIS|WindowsやMacで標準的に利用される日本語文字コード|
|Unicode|多言語を扱うために作成された符号化文字集合<br>符号化方式にはUTF-8、16、32などがある|

## Topic 108: Essential System Services/重要なシステムサービス
### 108.1 Maintain system time/システム時刻の保守
Weight: 3

* **/usr/share/zoneinfo/**
タイムゾーンの情報がこのディレクトリの下にバイナリファイルとして納めらる

* **/etc/timezone**
システムで使用するタイムゾーンを指定するテキストファイル

* /etc/localtime
バイナリファイルで、このファイルに「/usr/share/zoneinfo/」ディレクトリに格納されている、国や地域ごとのタイムゾーン情報を持つバイナリファイルをコピーする事でタイムゾーンを設定する

* **/etc/ntp.conf**
指定したNTPサーバに定期的に時刻情報を問い合わせて自身の時刻を修正し、正確なシステムクロックを維持するNTPサーバのデーモンのntpdの設定ファイル

* **/etc/chrony.conf**
ntpdに代わるNTPサーバ/クライアントであるChronyの設定ファイルで、RHEL7やCentOS7以降では標準の時刻同期システムとなっている

|設定項目|説明|
|:---:|:---:|
|driftfile|時刻のずれを記録するファイルを指定|
|peer|時刻を取得するNTPサーバを指定|
|pool|時刻を取得するNTPサーバのプールを指定|
|rtcsync|システムクロックをハードウェアクロック（RTC）にコピーする|
|server|時刻を取得するNTPサーバを指定|

* **date**
システムクロックの確認と設定を行う

* **hwclock**
ハードウェアクロックの確認と設定を行う

|オプション|説明|
|:---:|:---:|
|無|ハードウェアクロックを表示|
|-r|ハードウェアクロックを表示|
|-s or --hctosys|ハードウェアクロックの時刻をシステムクロックに反映|
|-w or --systohc|システムクロックの時刻をハードウェアクロックに反映|

* **timedatectl**
systemdの動作するシステムにおいてシステム時刻の表示や設定を行うコマンド。dateコマンドのようにシステムクロック（Linuxカーネルが持つ時刻）を操作するだけではなく、システムクロックとハードウェアクロック（コンピュータに内蔵された時刻）を同時に設定できる

* **ntpd**
指定したNTPサーバに定期的に時刻情報を問い合わせて自身の時刻を修正し、正確なシステムクロックを維持するデーモン
ntpdの時刻同期状況を確認する

ntpqのオプション
|オプション|動作|
|:---:|:---:|
|-i|対話モードで起動する|
|-p|指定したサーバとの同期状態を一覧表示する|

* **ntpdate**
手動でNTPサーバから正確な時刻を取得し、システムクロックに反映させる
NTPクライアントである

* **chronyc**
chronydの管理を行う
RHEL7やCentOS7以降では標準の時刻同期システムとなっているntpdに代わるNTPサーバ/クライアントはChronyでのデーモンはchronyd

|サブコマンド|説明|
|:---:|:---:|
|activity|オンライン・オフラインのNTPサーバ数を表示|
|sources|時刻のソースを表示|
|sourcestats|時刻のソースの統計情報を表示|
|tracking|トラッキングを表示|

* **pool.ntp.org**
プロジェクトの一つで、複数のNTPサーバをまとめて仮想的なNTPサーバとして運用し負荷分散の技術の一つである「DNSラウンドロビン」方式で時刻を提供する 

### 108.2 System logging/システムのログ
Weight: 4

* **/etc/rsyslog.conf**
rsyslog（reliable-syslog）の設定ファイルで、syslog（ログメッセージを送受信する規格）を改善した次世代のsyslogとして、主要なディストリビューションで採用されている
旧来のsyslogには問題の代表的なものは、TCPのように確認応答がない、暗号化機能を持っていないためログが覗かれる可能性がある、など

|ファシリティ|説明|
|:---:|:---:|
|*|全てのファシリティ|
|auth・authpriv|認証サービス|
|daemon|デーモン|
|kern|カーネル|
|local0〜7|独自使用可|
|lpr|印刷サービス|
|mail|メールサービス|
|syslog|syslogdデーモン|
|user|ユーザアプリケーション|

* **/var/log/**
ログファイルを置くディレクトリ

* **logger**
手動でログメッセージを生成する

* **logrotate**
ログのローテーションを行う
ログローテーション機能は、ログの量が増えログファイルのサイズが大きくなり、ディスク容量の圧迫や検索に時間がかかったり等の問題が発生したときに、ログファイルを自動的に分割・更新を行う

* **/etc/logrotate.conf**
ログローテーションの設定ファイル
実行するには「logrotate」コマンドを使用。通常時は「cron」によって定期的に実行される

* **/etc/logrotate.d/**
各ログファイルの設定は、このディレクトリ以下に各サービスごとにファイルに記述する

* **journalctl**
systemd-journaldのログを表示する
systemd-journaldが書き込むジャーナルファイルはバイナリ形式のため、catコマンドなどで中を表示できない

|オプション|説明|
|:---:|:---:|
|-a(--all)|画面表示できない文字も含め全て表示|
|-b(--boot)|特定のシステム起動時のログを表示|
|-D(--directory)|指定したディレクトリのログを表示|
|-f(--follow)|新規に追加されたログをリアルタイムに表示|
|-k(--dmesg)|カーネルからのメッセージを表示|
|-l(--full)|画面表示可能なすべてのログを表示|
|-n(--lines)|直近のログから指定行数分を表示|
|--no-pager|lessを使用しない|
|-o(--output)|ログの出力形式を指定|
|-r(--reverse)|最新のログから表示|
|--since|指定した日付以降のログを表示|
|-u(--unit)|特定のユニットからのログを表示|
|--until|指定した日付時刻までのログを表示|
|--vacuum-size=|総容量が指定したサイズを下回るまで古いジャーナルを削除|
|--vaccum-time=|指定期間より古いアーカイブジャーナルを削除|
|-x|追加の説明を表示|

* **systemd-cat**
指定したコマンドの実行結果をジャーナルファイルに書き込む

* **/etc/systemd/journald.conf**
sytemd-journaldの設定を行うファイル
sytemd-journaldのデフォルトの設定では、バイナリ形式のログは「/run/log/journal」配下にシステム固有のディレクトリを作成し、その中の「system.journal」というジャーナルファイルに記録されるが、「/run」ディレクトリはメモリ上に作成されたファイルシステム上のディレクトリのため、再起動するとデータが消える。
ログが再起動によってクリアされないようにするには、このファイルでジャーナルファイルの保存先を制御する設定項目「Storage=persistent」を設定する。この設定により、systemd-journaldは「/var/log/journal」ディレクトリを作成し、その配下にログファイルを記録するようになる

* **/var/log/journal/**
永続ファイルであるため、ログローテーションやファイルサイズの最大値指定などをせずに放っておくと、ディスク容量の圧迫につながる。
journalログシステムのデータはデフォルトで/run/log/journalディレクトリに保存されます。/runディレクトリ以下のデータはシステム起動時に都度生成されるため、システムを再起動すると前回起動していた時に保存していたログデータは残りません。
journalログデータの保存先を/var/log/journalに設定することで、幾つかの世代のログを保存することができる
 
### 108.3 Mail Transfer Agent (MTA) basics/メール転送エージェント(MTA)の基本
Weight: 3

* **~/.forward**
ユーザ個別にメールの転送設定を行う。変更は即時反映される

* **sendmail emulation layer commands**

* **newaliases**
/etc/aliasesで、エイリアスを設定しメールを転送させ編集後に、このコマンドを実行して、設定を反映させる

* **mail**
メールの送信や受信メールの確認を行う

* **mailq**
メールキューにメールが溜まっているかを確認する

* **postfix**
設定は簡単で、sendmailと高い互換性を保ちながら処理を高速化しており、sendmailよりセキュリティが向上している

* **sendmail**
昔から利用されているMTA（Message Transfer Agent）で、多くのメール転送方式に対応している。設定が難しい。セキュリティ面の問題がある。処理速度が遅い
引数無しで単独で実行すると、標準入力からメールのデータを受け取り、.（ピリオド）のみの行を受け取った時点でメールの送信を行う

* **exim**
Debian系の標準MTA（Message Transfer Agent）。 設定は簡単だが日本語での情報は少ない。

### 108.4 Manage printers and printing/プリンタと印刷の管理
Weight: 2

* **CUPS configuration files, tools and utilities**
CUPSは、lpdなど従来の印刷システムと互換性を持ったLinuxの新しい印刷サービスで、WEBブラウザからプリンタの設定やジョブの管理を行うことができる
主なポート番号は、63はwhois++プロトコル、80はHTTP、361はSemantixサービス、529はIRC（Internet Relay Chat）、６３１は接続要求を受ける
lp:印刷ジョブを生成し、プリントキューに登録
cancel:プリントキューにある印刷ジョブを削除
lpstat:プリントキューにある印刷ジョブを表示

* **/etc/cups/**
UNIXの印刷サービスCUPSの設定ファイルが置かれるディレクトリ
「/etc/cups/printers.conf」は、CUPSで管理するプリンタの設定ファイルで、プリンタの場所や共有設定など、プリンタに関する設定を行う
「/etc/cups/cupsd.conf」は、UNIXの印刷サービスCUPSのデーモン「cupsd」の設定ファイル。接続要求を受けるポート番号（デフォルトは631)や、接続するクライアントのアクセス制御などの設定を行う

「/etc/cups/ppd」は、プリンタの機種依存情報ファイル（PPD）を格納するディレクトリ
PPD:PostScript Printer Description

* **lpd legacy interface (lpr, lprm, lpq)**
lpd:Linuxでこれまで長年利用されてきた印刷用のデーモンプログラム
lpq:プリントキューにある印刷ジョブを表示
lpr:プリントキューに印刷ジョブを登録し、指定したファイルを印刷する。オプションでプリンタを指定しなければ、デフォルトのプリンタで印刷する。レガシーな印刷システムであるLPDと互換性のある印刷コマンド
lprm:プリントキューにある印刷ジョブを削除

## Topic 109: Networking Fundamentals/ネットワークの基礎
### 109.1 Fundamentals of internet protocols/インターネットプロトコルの基礎
Weight: 4

* **/etc/services**
サービス名とポート番号の対応付を記載

* **IPv4, IPv6**
IPv4ヘッダは送信元アドレス、宛先アドレスは32ビットである。
IPv4ヘッダの基本サイズは20バイト、IPv6ヘッダは40バイトなので2倍のサイズになっていますが、IPv6ではチェックサムフィールドなどいくつかのフィールドを削除して構造を簡単にしている。さらにIPv6ヘッダでは、可変長となるフィールドをオプションにして、転送に必要になる基本ヘッダを固定長にすることで処理効率を上げている。
IPv4のTTL（Time to Live：パケットの生存期間）はルータを1つ通過するごとに1ずつ減算され、0になるとパケットが破棄されてルーティングのループを防ぐ。IPv6のホップリミットもTTLと同じ役割を持っている

IPv6は、現在主流のIPv4に変わる次世代版のインターネットプロトコルで、近年のIPアドレスの枯渇問題に対応して、IPv4では32ビットの長さで表していたIPアドレスをIPv6では128ビットで表すことで、使用できるIPアドレスが約340澗個にまで増えた。IPv6の主な特徴は以下；
・128ビット表記による事実上無限のIPアドレス
・IPアドレスの省略表記が可能
・IPアドレスの自動割り当て機能を標準で実装
・IPsec（暗号化通信）を標準で実装
・IPv4との互換性は無い

* **Subnetting**

* **TCP, UDP, ICMP**
ICMP:pingやtracerouteコマンドは、エラーメッセージや制御メッセージを通知する「ICMP」というプロトコルを使って、ネットワークの疎通確認や経路確認などを行う
 
### 109.2 Persistent network configuration/基本的なネットワーク構成
Weight: 4

* **/etc/hostname**
ホスト名、ネットワーク機能の有効/無効、デフォルトゲートウェイの設定などを記述する
Debian系では「/etc/hostname」にホスト名のみを記述する
「/etc/hostname」にはホスト名のみを記述する

* **/etc/hosts**
IPアドレスとホスト名との対応付け

* **/etc/nsswitch.conf**
名前解決やサービス名解決の際の問い合わせ順序を指定

* **/etc/resolv.conf**
ドメイン名やDNSサーバの指定

* **nmcli**
NetworkManagerを管理するためのCLI

|オブジェクト|コマンド|説明|
|:---:|:---:|:---|
|connection|modify|指定した接続IDの設定ファイルの指定パラメータを書き換える|
|connection|up or down|接続の有効・無効|
|connection|show|接続状況を表示|
|device|connect or disconnect|指定デバイスを接続・切断|
|device|delete|ソフトウェアデバイスの削除|
|device|modify|指定インターフェイスのパラメータを即時変更する|
|device|monitor|指定デバイスの監視|
|device|show|指定デバイスの詳細情報を表示|
|device|status|デバイスの状態を表示|
|device|wifi connect|WiFiに接続するデバイスの作成・有効化|
|device|wifi list|Wi-Fiアクセスポイントん表示|
|device|wifi rescan|Wi-Fiアクセスポイントの再検索|
|general|hostname|ホスト名を指定したホスト名に変更|
|general|status|NetworkManagerの状態を表示|
|networking|connectivity|ネットワークの接続状態を表示|
|networking|on or off|ネットワークの有効・無効|

* **hostnamectl**
systemdが動作するシステムでは、ホスト名や関連する情報の表示、ホスト名の設定を行える

* **ifup**
指定したインタフェースを有効にする

* **ifdown**
指定したインタフェースを無効にする

### 109.3 Basic network troubleshooting/基本的なネットワークの問題解決
Weight: 4

* **ip**
ifconfig、route、arp、netstatなどの旧来のネットワーク関連コマンドを置き換えるために、iproute2ネットワークユーティリティが開発され、これを使うことで、ポリシーベースルーティングやトラフィック制御といった高度なネットワーク設定が可能になる。iproute2ユーティリティでは、ipコマンドでアドレス設定、ルーティング設定などを行う

* **hostname**
ホスト名を一時的に変更する
恒久的に変更するには「/etc/hostname」を使用する
ホスト名の指定を省略すると、現在のホスト名が表示される


* **ss :Socket Statistics**
netstatの後継となるコマンドで、ネットワークのソケットの情報を表示する

|オプション|説明|
|:---:|:---:|
|-a|全てのソケットを表示|
|-n|サービス名の名前解決をしない|
|-t|TCPソケットを表示|
|-u|UDPソケットを表示|

* **ping**
IPv4形式の宛先アドレスに到達可能か確認

* **ping6**
IPv6形式の宛先アドレスに到達可能か確認

* **traceroute**
IPv4形式の宛先アドレスまでの経路を確認
リモートホストまでの通信経路を表示する。宛先ホストに対して、デフォルトではUDPパケットのTTL（Time to Live:ルータを経過の度に1減る）という値を1から1つずつ増やして送信を繰り返す。TTLが0になった時点の機器はICMP Time Exceededを送信元に返すので、この情報を元にパケットが通過した経路が組み立てられ、経路上のどこに問題があるのかを確認することもできる

* **traceroute6**
IPv6形式の宛先アドレスまでの経路を確認

* **tracepath**
IPv4形式の宛先アドレスまでの経路と経路上の最大転送単位（PathMTU）を確認

* **tracepath6**
IPv6形式の宛先アドレスまでの経路と経路上の最大転送単位（PathMTU）を確認

* **netcat**
-zオプションでポートスキャンを行える
NetcatはTCP/UDPを使った通信を手軽に行うことのできる便利なツール
宛先ポート番号が未指定の場合、デフォルトで31337番ポートが指定される

Netcatの書式;
|オプション|説明|
|:---:|:---:|
|-l|指定アドレス・ポート番号で接続の待受をする|
|-p|送信元ポートを指定する|
|-u|デフォルトのTCPではなくUDPで動作させる|

* **ifconfig**
ネットワークインターフェースの情報の表示や設定を行える
インターフェース名やオプションを指定せずに実行すると、有効化されている全てのインターフェースの情報が表示され、インターフェースのMACアドレスやIPアドレス、ブロードキャストアドレス、サブネットマスク、MTU（最大転送単位）などを確認できる
インターフェース名やオプションを指定せずに実行すると、有効化されている全てのインターフェースの情報が表示される
インターフェースのMACアドレスやIPアドレス、ブロードキャストアドレス、サブネットマスク、送受信バイト数などが確認できる

* **netstat**
オプション無しで有効なネットワーク接続や開いているソケットの情報等を表示
また、オプションを併用する事で、ホストの様々なネットワーク情報を表示
「netstat」や「lsof」コマンドでも空きポートは確認できるが、これらで表示できるのはローカルホストの情報で、「nmap」コマンドはリモートホストの情報も確認できる

* **route**
ルーティングテーブルの表示、追加、削除を行う

### 109.4 Configure client side DNS/クライアント側のDNS設定
Weight: 2

* **/etc/hosts**
名前解決に用いられるテキストファイルで、1行に1つのIPアドレスがあり、そのIPアドレスと続くホスト名とを関連づけており、IPアドレスはIPv4、IPv6どちらでも指定できる
現在では名前解決にDNSが広く用いられている為、「/etc/hosts」ファイルは補助的な役割がほとんど


* **/etc/resolv.conf**
名前解決に利用するDNSサーバーや、自身のドメイン名を指定する

* **/etc/nsswitch.conf**
名前解決やサービス名解決の際の問い合わせ順序を指定するファイルで、ユーザー情報、パスワード情報の取得、ホスト名からIPアドレスを取得する際の情報検索先など設定される
GNU Cライブラリが名前解決を行う際、何にどの順番で問い合わせを行うかを指定している
getentコマンドは、それらの情報の問い合わせを行う

* **host**
DNSサーバに直接問い合わせを行う
DNSサーバに問い合わせて名前解決を行うコマンドの中（nslookup、dig）で、出力する情報が最も少ない

* **dig : Domain Information Groper**
DNSサーバへ直接問い合わせて、指定した名前に関するDNSサーバからの応答を表示する
表示するリソースタイプを指定する事もでき、詳細な情報を確認できるため、DNSに関するデバッギングツールとしても使用できる

* **getent : GET ENTries**
データベース（ファイル）の情報の問い合わせを行う
データベース名に「nsswitch.conf」を記述すると指定できるサービス名を問合せする。
データベース名に「passwd」を記述すると、ローカルで管理しているユーザーだけではなく、LDAPサーバで管理しているユーザー情報の一覧も表示する
データベース名に「hosts」を記述すると、ホスト名とIPアドレスの一覧を表示する
データベース名に「services」を記述すると、サービス名とポート番号の一覧を表示する

## Topic 110: Security/セキュリティ
### 110.1 Perform security administration tasks/セキュリティ管理業務の実施
Weight: 3

* **find**
ファイルを検索する
SUID/SGIDが設定されたファイルを検索するには、SUID「4000」の4をビットに直して100、SGID「2000」の2をビットにして010なので、検索対象を110つまり6000を指定する。いずれかが設定されたものを検索する場合は、モードの前に「+」を指定する

* **passwd**

* **fuser : File USER**
システムの特定のリソース(ファイルやソケットなど)を使用中のプロセスを検索し強制終了する

|オプション|説明|
|:---:|:---:|
|-k|プロセスにSIGKILLを送信|
|-m|マウントされたファイルシステムを指定|
|-n|検索する領域を指定|
|-u|検索結果にユーザ名を追加|
|-v|詳細な情報を表示|

* **lsof : LiSt Open Files**
ファイルシステムや特定のポートを使用しているプロセスなど、ローカルホストのシステムのリソースを使用しているプロセスの情報を表示させる
「netstat」や「lsof」コマンドでも空きポートは確認できるが、これらで表示できるのはローカルホストの情報で、「nmap」コマンドはリモートホストの情報も確認できる

* **nmap : Network MAPper**
指定したホストの開いているポートをネットワーク経由で確認（ポートスキャン）する。ホストにログインせずに、外部からアクセス可能なポートを調査できる
「netstat」や「lsof」コマンドでも空きポートは確認できるが、これらで表示できるのはローカルホストの情報で、「nmap」コマンドはリモートホストの情報も確認できる

* **chage : CHange password AGE**
パスワードの有効期限の詳細な設定やその表示ができる
パスワードの有効期限に関する情報は「/etc/shadow」ファイルに保存される

|オプション|説明|
|:---:|:---:|
|無|対話モード|
|-E|アカウントの有効期限を指定|
|-I|パスワード有効期限切れ後に何日でロックされるかを指定|
|-l|パスワードの有効期限に関する情報を表示|
|-m|パスワードの変更間隔の最短日数を指定|
|-M|パスワードが有効な最長日数を指定|
|-W|パスワード有効期限切れ前に警告を表示する日数を指定|
-lオプションのみrootユーザ以外が実行できる

* **netstat**

* **sudo**
一般ユーザで、管理者から実行権限を委譲されたコマンドを実行する
自身に委譲されているコマンドは「sudo -l」で確認できる。sudoコマンドを実行するとパスワードの入力を求められますが、rootのパスワードではなく、ユーザー自身のパスワードを入力する。
権限委譲の設定は「visudo」コマンドで「/etc/sudoers」ファイルを編集することで行う

* **/etc/sudoers**
sudoコマンドで、一般ユーザでも、管理者から実行権限を委譲されたコマンドであれば実行でき、その権限委譲の設定は「visudo」コマンドでこのファイルを編集することで行う

* **su : Switch User**
ログイン中に別のユーザーへ切り替える
suコマンドの特徴；
　・引数に「-」をつけると、切り替わる先のユーザの環境変数を使用する
　・ユーザー名を指定しない場合、rootユーザへ切り替わる
　・ユーザを切り替える時に求められるパスワードは、切り替わる先のユーザのパスワード
　・rootユーザから別のユーザに切り替わる時はパスワードは要求されない

* **usermod**

既存のユーザのアカウント情報を変更する
|オプション|説明|
|:---:|:---:|
|-d|ホームディレクトリを指定|
|-g|プライマリグループを指定|
|-G|補助グループを指定|
|-L|パスワードをロックする|
|-p|暗号化済みのパスワードを設定する|
|-s|ログインシェルを指定|
|-U|パスワードをアンロックする|

* **ulimit**
ユーザやシェルが利用できるリソースを制限する。ユーザーの誤操作やプログラムのバグ、悪意のあるユーザーによるリソースの消費などを回避する為などに使用される

|オプション|説明|
|:---:|:---:|
|-a|リソースの制限値をすべて表示|
|-c|コアファイルのサイズを制限|
|-f|出力ファイルのサイズを制限|
|-u|ユーザが起動できるプロセス数を制限|
|-v|シェルが利用できる仮想メモリを制限|

* **who, w, last**
「w」と「who」コマンドは、「**/var/run/utmp**」ファイルを参照し、現在システムにログインしているユーザーの情報を表示する。「/var/run/utmp」ファイルはログイン中のユーザの情報が格納されているバイナリファイル
「last」コマンドは「/var/log/wtmp」ファイルを参照し、最近ログインしたユーザの一覧を表示するコマンド。「/var/log/wtmp」はユーザのログイン/ログアウト情報が記録されているバイナリファイル


### 110.2 Setup host security/ホストのセキュリティ設定
Weight: 3

* **/etc/nologin**
このファイルが存在すると、rootユーザのみログインが許可される。rootユーザ以外の、一般ユーザによるログインを禁止するときに作成し、一般ユーザアカウントは必要だけれど、ログインはさせたくない場合などに使用する

* **/etc/passwd**

* **/etc/shadow**
現在のシステムで使用されている暗号化されたパスワード（シャドウパスワード）や、パスワードの有効期限に関する情報が格納されている。rootユーザのみが読み書きできる

* **/etc/xinetd.d/**
xinetdの各サービスの個別設定をこのディレクトリ内の設定ファイルで行う
xinetdはスーパーサーバと呼ばれ、登録された利用頻度の低いサービスを監視し、リクエストが来た場合にだけ、該当のサービスを実行する。これにより利用頻度の低いサービスにデーモンとして常駐させる必要が無くなり、メモリやCPU等のリソースの消費を抑えられる
xinetdによるアクセス制御は以下のルールで判定される；
　・only_fromもno_accessも設定されていない場合、サービスへのアクセスは全て許可
　・only_fromだけが設定されている場合、指定されたアクセス元しかサービスへアクセス出来ない
　・no_accessだけが設定されている場合、指定されたアクセス元はサービスへアクセス出来ない
　・only_fromとno_accessが同時に指定された場合、より厳密にマッチするほうに従う

xinetdの設定項目
|項目|説明|
|:---:|:---:|
|bind or interface|サービスを提供するインターフェースのIPアドレス|
|disable|サービスを無効化するかの設定|
|instances|サーバプログラムの最大起動プロセス数|
|log_type|ログの記録先を指定|
|no_access|サービスへのアクセスを拒否する接続元を指定|
|only_from|サービスへのアクセスを許可する接続元を指定|
|server|サーバプログラムへの絶対パス|
|server_args|サーバプログラム起動時に指定する引数|
|socket_type|サービスの接続タイプ|
|user|サーバプログラムを起動するユーザ|
|wait|サーバプログラムへの接続処理を待ち合わせるかの設定|

* **/etc/xinetd.conf**
xinetdの全体的な設定を行うファイル
xinetdによるアクセス制御は以下のルールで判定される；
　・only_fromもno_accessも設定されていない場合、サービスへのアクセスは全て許可
　・only_fromだけが設定されている場合、指定されたアクセス元しかサービスへアクセス出来ない
　・no_accessだけが設定されている場合、指定されたアクセス元はサービスへアクセス出来ない
　・only_fromとno_accessが同時に指定された場合、より厳密にマッチするほうに従う

* **systemd.socket**

* **/etc/inittab**
Linux起動時のデフォルトのランレベルを設定するファイル。GUI環境で起動するにはランレベルを5に設定する。デフォルトのランレベルは以下のようにinitdefautの行で設定する。  
**id:数字:initdefault:**
シングルユーザモードで起動: id:1:initdefault:
マルチユーザモード（CUI環境）で起動: id:3:initdefault:

* **/etc/init.d/**
SysVinitの動作するシステムにおいて各種サービスの起動スクリプトを置くディレクトリ。起動スクリプトは、initによりシステムの起動時・ランレベルの変更時に実行されるもので、主として各種サービスをランレベルに応じ自動的に起動・終了させるために用いられる

* **/etc/hosts.allow、/etc/hosts.deny**
**/etc/hosts.allow**は、スーパーサーバinetdやxinetdはアクセス制御を行う際に使用するTCPラッパー（tcpd)のアクセス制御で許可するホストを記述するファイル
**/etc/hosts.deny**は、スーパーサーバinetdやxinetdはアクセス制御を行う際に使用するTCPラッパー（tcpd)のアクセス制御で拒否するホストを記述するファイル
xinetdが監視しているサービスにアクセスがあると、xinetdはtcpdにその制御を渡し、tcpdは「/etc/hosts.allow」と「/etc/hosts.deny」ファイルを調べ、アクセスを許可するかどうか判断する。許可する場合にのみ、対象のサービスを起動して制御を渡す。
TCPラッパー（tcpd)の制御ファイルは以下の順で評価される；
1.「/etc/hosts.allow」に記載されているホストは許可
2.「/etc/hosts.allow」に記載されていなければ、「/etc/hosts.deny」を参照し、記載されているホストは拒否
3.両方のファイルに記載の無いホストは全て許可

### 110.3 Securing data with encryption/暗号化によるデータの保護
Weight: 4

* **ssh**
SSH(ポート22)でリモートホストにログインでき、公開鍵認証や通信の暗号化といった点でTELNET(ポート23)よりセキュリティが強固である。外部サーバを管理する場合、通信の内容が平文であるTELNETはできる限り使うべきでない。Linuxで通常使われるSSHのオープンソースはOpenSSH

sshのクライアントであるコマンド
|オプション|説明|
|:---:|:---:|
|-i|秘密鍵のファイルを指定|
|-l|ログインユーザ名の指定|
|-o|ssh_configで設定できるオプションの指定|
|-p|接続先ポート番号の指定|

SSHは暗号化を用いたリモートログイン用のプロトコルを指す
SSHのデーモン「sshd」の設定ファイルは「/etc/ssh/sshd_config」
SSHサーバの公開鍵と秘密鍵はOpenSSHをインストールする際「/etc/ssh」ディレクトリ配下に作成される
SSHクライアントの設定ファイルは「/etc/ssh/ssh_config」で、このファイルでSSH接続時のポート番号（デフォルト22番)や暗号化方式の優先順位などを指定できる
他の通信を自身の作成する暗号化コネクション内に流す機能もあり、この機能はポートフォワーディングによって実現されている。ポートフォワーディングとは、あるポートで受け取った通信を別のポートに転送する処理のこと

* **ssh-keygen、ssh-agent、ssh-add**
公開鍵と秘密鍵のペアを作成する。デフォルトでは暗号方式「rsa」の鍵が作成される。ユーザ認証で公開鍵方式を使う場合に、クライアントで公開鍵/秘密鍵のペアを作成する。鍵のデフォルトの保存先は「~/.ssh」ディレクトリで、sshコマンドで接続時に秘密鍵ファイルを指定しないと「~/.ssh」配下の秘密鍵がユーザ認証で使用される

「**ssh-keygen**」コマンドで鍵を作成する際、パスフレーズの入力が求められる。SSHサーバへ公開鍵認証方式で接続する際には秘密鍵へのアクセスが必要となるため、毎回パスフレーズの入力が必要になる。SSH接続時にパスフレーズを聞かれないようにする為には「**ssh-agent**」コマンドを使用する。これはメモリ上に秘密鍵を保管しておく認証エージェントである。最初は認証エージェントに認証鍵が登録されていないので、「**ssh-add**」コマンドを実行し、1度だけパスフレーズを入力して秘密鍵を登録する。これ以降、SSH接続時にパスフレーズの入力が求められなくなる



* **~/.ssh/(~/.ssh/は以降省略)id_rsa and id_rsa.pub、id_dsa and id_dsa.pub、id_ecdsa and id_ecdsa.pub、id_ed25519 and id_ed25519.pub、/etc/ssh/(/etc/ssh/は以降省略)ssh_host_rsa_key and ssh_host_rsa_key.pub、ssh_host_dsa_key and ssh_host_dsa_key.pub、ssh_host_ecdsa_key and ssh_host_ecdsa_key.pub、ssh_host_ed25519_key and ssh_host_ed25519_key.pub**

ssh-keygenコマンドの-tオプションで生成できる暗号方式と鍵のデフォルトのファイル名
|暗号化方式|鍵|SSHクライアント|SSHサーバ|
|:---:|:---:|:---:|:---:|
|dsa|秘密|id_dsa|ssh_host_dsa_key|
|dsa|公開|id_dsa.pub|ssh_host_dsa_key.pub|
|ecdsa|秘密|id_ecdsa|ssh_host_ecdsa_key|
|ecdsa|公開|id_ecdsa.pub|ssh_host_ecdsa_key.pub|
|ed25519|秘密|id_ed25519|ssh_host_ed25519_key|
|ed25519|公開|id_ed25519.pub|ssh_host_ed25519_key.pub|
|rsa|秘密|id_rsa|ssh_host_rsa_key|
|rsa|公開|id_rsa.pub|ssh_host_rsa_key.pub|

* **~/.ssh/authorized_keys**
ユーザ認証で公開鍵方式を使う場合、「ssh-keygen」コマンドで公開鍵/秘密鍵のペアを作成し、そのうち公開鍵「~/.ssh/id_rsa.pub」（デフォルト）をサーバの認証鍵リスト「~/.ssh/authorized_keys」に登録しておく

* **ssh_known_hosts**
クライアント側の認証鍵リストで、サーバの公開鍵を登録する

* **gpg**
ファイルの暗号化や復号を行える暗号化プログラムのGnuPGという暗号化プログラムを使用して、ファイルの暗号化や復号を行う
復号する際にはgpgコマンドのオプションは不要

|オプション|説明|
|:---:|:---:|
|-e|暗号化データを受け取る側の公開鍵を使用してファイルを暗号化|
|--export|公開鍵をエクスポート|
|--gen-key|公開鍵暗号方式の鍵ペアを生成|
|--import|公開鍵をインポート|
|--list-keys|公開鍵を一覧表示|
|-o|出力ファイル名を指定|
|-r|公開鍵の持ち主のメールアドレスを指定|
|--sign|ファイルに署名|
|--verify|ファイルの署名を検証|

* **gpg-agent**
GnuPG（GPG）という暗号化プログラムにおいて秘密鍵を管理し、パスフレーズによる認証状態を一定期間キャッシュするデーモンプログラム。SSHにおけるssh-agentと同様

* **~/.gnupg/**
gpgコマンドはGnuPGという暗号化プログラムを使用して、ファイルの暗号化や復号を行う
「--gen-key」オプションを使用すると、「~/.gnupg/」ディレクトリの下に、公開鍵暗号方式の秘密鍵と公開鍵のキーペアなどが作成される
 
## Future Change Considerations
### Future changes to the objective will/may include:

Remove ifup/ifdown and legacy net-tools command
Remove TCP wrappers










## その他


* **#!**
「シバン」または「シェバング」（shebang）と呼ばれ、スクリプトファイルの1行目に、そのファイルがどのようなインタープリタ（シェル）で実行されるかを記述する。「#!」が記述された行のことを「シバン（シェバング）行」という。

* **/etc/bashrc**
RedHat系でbash起動時に読み込まれ、bash起動時に実行させたい処理（エイリアスなど）が設定される

* **/etc/X11/xdm**

このディレクトリにある主なファイル
|ファイル名|説明|
|:---:|:---:|
|xdm-config|XDMの設定ファイル|
|Xaccess|ホストからXDMへアクセス許可の設定|
|Xresources|XDMログイン画面のデザイン設定|
|Xsession|XDMのログイン後に実行されるスクリプト|
|Xsetpu_0|XDMログイン画面表示前に実行されるスクリプト|

* **batch**
システムの負荷の少ないタイミングで指定した時間に1回だけコマンドを自動実行
batchコマンドで設定されたジョブの管理は、atコマンドを使用して行う
「batch」コマンドを入力すると、プロンプトが「at>」に変わり、実行したいコマンドを入力して、最後にCtrl+Dで終了する。これは「at」コマンドの入力と同じだが、時間指定ではなく、負荷が下がった時点で実行される点が異なる

* **case文**
case文は、値とパターンを照合し、パターンに一致するとそのパターンに指定されている実行文を処理する。条件分岐にはif文も使用できるが、比較する条件が多い場合はcase文が便利
パターンは任意の数の指定が可能です。上から順番に値との照合を行い、一番最初に一致したパターンに対応する処理を実行し、case文を終了する。一致パターンが無い場合は、処理は実行されない。
case文の書式は以下の通り；
case　値　in
1)　実行文１　;;
2)　実行文２　;;
3)　実行文３　;;
esac

* **CIDR**
サイダーと呼び、IPアドレスのクラスの概念を使わずに、任意の長さのサブネットマスクを利用する

* **chsh**
ユーザのログインシェルを変更する。これにより、ユーザがログインして最初に実行されるコマンドが決まる。 一般ユーザは自分のアカウントのログインシェルのみを変更でき、スーパーユーザは全てのアカウントのログインシェルを変更できる

* **cron**
定期的に自動でジョブを実行する
cronには、ユーザ用と管理者が設定するシステム用の2種類の設定ファイル（crontabファイル）がある
デーモン名はcrond。crondは1分ごとに起動され、crontabファイルなどを調べて設定されたジョブを実行する

* **declare -f**
定義済みのシェル関数を確認
オプション無しのsetコマンドでも確認できる

* **DHCP**
動的IPアドレスを割り振るネットワークプロトコル

* **eval : EVALuate**
指定した文字列を評価後に連結して、現在のシェルに実行させる。主にシェルスクリプトや環境設定用のファイルで使用する。シェルに組み込まれたビルトインコマンド

* **groups**
ユーザの所属するグループの名前を確認

* **gpasswd**
「/etc/group」を管理するコマンドで、グループのパスワードやメンバーを設定する

* **id**
ユーザのUID（ユーザID）や、所属するグループのGID（グループID）を確認する

|オプション|説明|
|:---:|:---:|
|-u|UIDを表示|
|-g|ユーザのプライマリーのGIDを表示|
|-G|所属する全てのGIDを表示|
|無|コマンドを実行したユーザの情報が表示|

* **locale**
ロケール情報を表示する

|オプション|説明|
|:---:|:---:|
|無|現在のロケールの設定を表示|
|-a|現在のシステムで使用できるロケールを表示|

* **nmtui**
NetworkManagerを管理するための、curses（カーシス: UNIX向け端末制御ライブラリ）ベースのテキストユーザインタフェース（TUI）

* **run-parts**
引数に指定されたディレクトリ内にあるスクリプトを全て実行する

* **startx**
CUI環境（ランレベル3）で実行すると、X Window System（GUI環境）が起動する
startxコマンドの実体はスクリプトで、X Window Systemの環境を整えるのに必要なコマンドの実行、設定ファイルのパスが書かれている

* **tzconfig**
「/etc/localtime」と「/etc/timezone」ファイルをまとめて設定できるDebian系のコマンド
現行のDebianでは、非推奨で、「dpkg-reconfigure tzdata」が推奨

* **Wayland**
X Window Systemに代わる新しい仕組みとして開発されており、コンポジタと呼ばれるウィンドウマネージャがディスプレイサーバとして各アプリケーションのバッファの画像を合成し、直接カーネルに描画を要求する。コンポジタとクライアントの間にXサーバを介さないため、処理がシンプルで効率的

* **whois**
whoisサーバのデータベースに問い合わせを行い、ドメインの登録者や管理者、所属団体等の情報を得る

* **xeyes**
目玉のグラフィックがマウスカーソルを追うプログラムを起動する

* **ファイル条件式**

|条件式|動作|
|:---:|:---:|
|-d|パスが存在しディレクトリであれば真|
|-e|パスが存在すれば真|
|-f|パスが存在しファイルであれば真|
|-L|パスが存在しシンボリックリンクであれば真|
|-r|パスが存在し読込可能であれば真|
|-w|パスが存在し書込可能であれば真|
|-x|パスが存在し実行可能であれば真|

* **数値比較の条件式**

|条件式|動作|
|:---|:---:|
|-eq|等しければ真実、「=」|
|-ge|以上であれば真、「>=」|
|-gt|大きければ真、「>」|
|-le|以下であれば真、「=<」|
|-lt|未満であれば真、「<」|
|-ne|等しくなければ真、「≠」|

* **文字比較の条件式**

|条件式|動作|
|:---|:---:|
|=|等しければ真|
|==|等しければ真|
|!=|等しくなければ真|

* **ファイル比較条件式**

|条件式|動作|
|:---:|:---:|
|-nt|更新日付が新しければ真|
|-ot|更新日付が古ければ真|

* **環境変数一覧**

|環境変数|説明|
|:---:|:---:|
|DISPLAYMANAGER||
|HISTFILE|コマンド履歴保存ファイルのパス|
|HISTSIZE|現在のシェルでのコマンド履歴の保存数|
|HISTFILESIZE|コマンド履歴保存ファイルへの履歴保存数|
|HOSTNAME|ホスト名|
|HOME|ログインしているユーザのホームディレクトリ|
|LANG|ロケール|
|PATH|コマンドやプログラムを検索するディレクトリのリスト|
|PWD|カレントディレクトリのパス|
|SHELL|現在のシェルの起動パス|
|USER|ログインしているユーザ|

* **シェルの特殊変数**

|変数|動作|
|:---:|:---:|
|$?|直前の実行コマンドのexit値|
|$数字|シェルスクリプトに渡された引数<br>「$0」はシェルスクリプト名|
|$$|現在のシェルのPID|
|$#|実行時に指定された引数の数|