システムサービスの管理

# タイムゾーン
地域ごとに区分された標準時間帯のこと。タイムゾーン毎にUTC（Coordinated Universal Time: 協定世界時）からの時差や、夏時間の実施期間などが決められている。
Linuxの内部では、UTC 1970年1月1日午前0時0分0秒からの経過秒数である**エポック（epoch）時間**で時間を管理しており、設定されたタイムゾーンにしたがってエポック時間から変換して、日付時刻を扱う。**UNIX時間（Unix Timestamp**）とも呼ばれます。

タイムゾーンの情報は、`/usr/share/zoneinfo`ディレクトリ以下のバイナリファイルに格納されている。このファイルを`/etc/localtime`にコピーすることで、システムで利用することが出来るようになる。**環境変数TZ**でも設定することは可能

~~~ md
#タイムゾーンを日本に設定する場合
$ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

#タイムゾーンを日本に設定する場合(シンボリックリンクでも可能)
ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

#環境変数TZで設定する場合
$ export TZ="Asia/Tokyo"
~~~

`/etc/localtime`にはシステムクロックの時刻からローカルタイムへ変換するための**時差情報**が格納されている。

::: note info
全ユーザーで利用するには`/etc/timezone`ファイルに設定することで反映される
:::

#### 環境変数TZ
タイムゾーンを指定することが可能。設定する値はtzselectコマンドで選択及び表示することが出来る。

::: note info
**dateコマンドの[-u],[--utc],[--universal]オプションでも指定することが可能**
:::



### tzselectコマンド
タイムゾーンの設定を確認するコマンド。対話式で設定することが出来る。


### tzconfigコマンド
`/etc/localtime`と`/etc/timezone`を値をまとめて変更できるDebian系のコマンド。

::: note warn
最近のディストリビューションでは利用できない
その場合は、**dpkg-reconfigure tzdata**コマンドを使用する
:::


# 時刻
時刻の表示には2種類存在する

+ UTC(Coordinated Universal Time:協定世界時)
原子時計を基に定められた世界共通の標準時で、天体観測を基にしたGMT(グリニッジ標準時)とほぼ同じ

+ ローカルタイム(地域標準時)
国や地域に共通の地域標準時。日本の場合はJST(Japan Standard Time:日本標準時)になる。時差は9時間あり、JSTがUTCより9時間進んでいる。

さらに、システムの内蔵時計には2種類のものが存在する

+ **ハードウェアクロック**
ハードウェアとして内蔵された時計。コンピューター内に取り付けられた電池で動作するため、電源がオフの状態でも動作する。

+ **システムクロック(system clock)**
Linuxカーネル内に存在する時計。Linux起動時にハードウェアクロックを参照して設定されるが、その後は別々に動き続ける。そのため、起動してからの時間経過につれ差が生じてくる


![キャプチャ12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/a0345105-e547-a109-30dd-6f468a60552c.png)



### dateコマンド
**書式：date [MMDDhhmm[[CC][YY][.ss]]**
システムクロックを参照して現在の日時を表示するコマンド。rootユーザー権限でシステムクロックを変更することも可能
引数を[+]で始めると、指定した書式で表示することが出来る

| 時刻設定 | 内容 |
|:-:|:-:|
| MM  | 月  |
| DD  | 日  |
| hh  | 時  |
| mm  | 分  |
| CC  | 西暦の上2桁  |
| YY  | 西暦の下2桁  |
| ss  | 秒  |

| 書式 | 説明 |
|:-:|:-:|
| %Y  | 年  |
| %m  | 月(01~12)  |
| %d  | 日(01~31)  |
| %H  | 時(00~23)  |
| %M  | 分(00~59)  |
| %a  | 曜日  |
| %b  | 月名  |

~~~ md
#「年/月/日(曜日)」の書式で表示する場合
$ date "+%Y/%m/%d (%a)"

#自動的なバックアップファイルを作成し、ファイル名にバックアップ日時が入る
$ tar czf /backup/`date "+%Y%m%d"`.tar.gz /home 
~~~

### hwclockコマンド
**書式：hwclock [オプション]**
ハードウェアクロックの参照や設定を行うコマンド

| オプション | 説明 |
|:-:|:-:|
| -r  | ハードウェアクロックを表示する  |
| -w(--sysohc)  | システムクロックの時刻をハードウェアクロックに設定する  |
| -s(--hctosys)  | ハードウェアクロックの時刻をシステムクロックに設定する  |


### timedatectlコマンド
**書式：timedatectl [サブコマンド]**
systemdを採用したディストリビューションの日付と時刻。タイムゾーンを管理するコマンド。コマンドのみを実行すると、現在の日時、タイムゾーン、NTPを利用しているかどうか表示する

| サブコマンド | 説明 |
|:-:|:-:|
| status  | 現在の状態を表示する(デフォルト)  |
| set-time 時刻  |  時刻を設定する(HH:MM:SS) |
| set-time 日付  | 日付を設定する(YYYY-MM-DD)  |
| set-time 日付 時刻  | 日付と時刻を設定する(YYYY-MM-DD HH:MM:SS)  |
| set-timezone　タイムゾーン  | タイムゾーンを設定する  |
| list-timezone  | タイムゾーンを一覧表示する  |
| set-ntp yes(パイプ)no  | NTPを使うかどうか  |

::: note info
timedatectlコマンドは**システムクロックとハードウェアクロックを同時に設定する**。NTPサービスが有効になっている場合はエラーになる
:::

~~~ md
# timedatectl status
      Local time: 日 2023-08-27 12:02:02 JST
  Universal time: 日 2023-08-27 03:02:02 UTC
        RTC time: 日 2023-08-27 03:02:02
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
~~~

## NTP(Network Time Protocol)
ネットワーク経由でクロックを同期するプロトコル。ハードウェアクロック、システムクロックと違い正確な時刻をNTPサーバ(タイムサーバ)から取得し設定することが出来る。
階層構造になっていて、最上位には原子時刻、GPSなどの極めて正確な時刻情報の提供元がある。その直下にあるサーバを「Stratum1」,「Stratum2」と下に増えていく。最下層はstratum16まで階層化されている

![キャプチャ13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/d73005ca-b5bb-8898-cb0a-3c591ce7e91f.png)

### NTPサーバ
stratum0を時刻減とするstratum1のこと
NTPサーバは自前で運用することもでき、`/etc/ntp.conf`で設定を行う。

| コンフィグレーションコマンド | 説明 |
|:-:|:-:|
| driftfile  | ntpdデーモンが計測した、NTPサーバの参照時刻からのインターバルタイマーの発振周波数のずれ(drift)をPPM(parts-per-million:0.0001%)単位で記録するファイルの名前を指定する  |
| resttrict  | ACL(Access Control list)の指定。アドレス(最初のフィールド)がdefaultと書かれている行がデフォルトのエントリで、restrict行の最初のエントリとなる。defaultの右に禁止フラッグを指定する。フラッグを指定しない場合は全てのアクセスを許可する  |
| server  | リモートサーバのIPアドレスかDNS名、あるいは参照クロックのアドレスを指定する  |

:::note info
**stratum0とは？**
NTPのリファレンスクロックのことで、原子時計(セシウムクロック)、原子時計を持つ人工衛星からのGPS受信機、標準電波の受信機が該当する
:::


NTPサーバーを提供するサービス（NTPサービス）は複数あり、なかでも、`pool.ntp.org`は有名。複数のNTPサーバーで強固なネットワークを構築しているため、信頼性が高い。

#### iburst
NTPサーバとの初期の同期にかかる時間を短縮するオプション。serverコマンドのオプションとして指定する。
iburstを指定しない通常の場合は、64秒間隔でポーリングするが、指定すると初期の同期時に2秒間隔で8個のパケットを送信して同期をとる。そのため、通常より早く同期を取ることが可能になる。


### NTPクライアント(ntp client)
時刻情報を受信するコンピュータのこと。自ホストのシステムクロックと、ネットワーク上のNTPサーバの参照クロック（reference clock）の時間差を監視し補正する。
NTPサーバとの時刻同期にrootユーザー権限が必要。



### ntpdateコマンド
**書式：ntpdate [オプション] NTPサーバ名**
指定したNTPサーバから現在時刻を取得するコマンド。NTPサーバの指定はIPアドレスではなく、ホスト名を指定することが推奨されている。

| オプション | 説明 |
|:-:|:-:|
| -q  | 時刻が正しいかどうか問い合わせのみを行う  |

~~~ md
#pool.ntp.orgから時刻を取得する
# ntpdate pool.ntp.org
~~~



### ntpqコマンド
**書式：ntpq [オプション] 接続先サーバ**
ntpd の時刻同期状況を照会するコマンド。

| オプション | 説明 |
|:-:|:-:|
| -p  | serverに指定したサーバとの同期状態を一覧表示する。対話モードのpeersと一緒  |
| -i  | 対話モードで起動する(デフォルト)  |


| 表示項目 | 説明 |
|:-:|:-:|
| remote  | serverに指定したNTPサーバのホスト。先頭に＊がついているものが時刻同期先、「＋」は時刻同期可能なサーバ、「-」は参照しないことが決定したサーバを意味する  |
| refid  | remoteのサーバの時刻参照先アドレス。同期開始時は「.INIT.」を表示し、stratum1のサーバでは「.GPS.」などを表示する  |
| st  | remoteのサーバのstratum  |
| t  | ntpパケットの交換方法。uはユニキャストを表す  |
| when  | 前回ntpパケットを好感してからの経過時間（秒）  |
| poll  | 時刻問い合わせの間隔（秒）。同期が安定すると間隔が自動で長くなっていく。**最大1024秒（約17分**）ごとに時刻問い合わせを行うようになり、システムへの負荷が少なくなるようになっていく  |
| reach  | 過去8回の時刻問い合わせ結果を8進数で表示。  |
| delay  | ntpパケットの往復に要した遅延時間（ミリ秒）  |
| offset  | remoteのサーバーとの時刻のズレ（ミリ秒）  |
| jitter  | 同期した時刻とのズレ具合（ミリ秒）  |



## Chrony（クローニー）
ntpd/ntpdateの代替えとなるNTPサーバ/クライアントソフトウェア。
機能およびパフォーマンスを改善したデーモンプロセス**chronyd**とクライアントコマンドchronycから構成されている。
chronydはntpdに比べて、ネットワークの混雑が続いたり通信が不安定な状態でも良好に動作し、高い精度で時刻を同期できる。必要な時だけCPUを使用し、メモリ使用量も少なく、RHEL7やCentOS7以降では標準の時刻同期システムとなっている。
設定ファイルは`/etc/chrony.conf`

| 設定項目 | 説明 |
|:-:|:-:|
| server  | 時刻を取得するNTサーバを指定。サーバ/クライアントの関係  |
| peer  | 時刻を取得するNTPサーバを指定。同じstratum同士  |
| pool  | 時刻を取得するNTPサーバのプール(複数アドレスを集約した名前)を指定  |
| driftfile  | 自身の時刻のずれ具合を記録するファイルを指定  |
| rtcsync  | システムクロックをハードウェアクロック(RTC)にコピーする  |
| makestep  | 参照クロックとの時間差の閾値と、ステップ方式による時刻補正の回数を指定する  |

### chronycコマンド
**書式：chronyc [サブコマンド]**
chronydの管理を行うコマンド。

| サブコマンド | 説明 |
|:-:|:-:|
| activity  | NTPサーバのオンライン/オフライン数を表示する  |
| sources  | 時刻ソースの情報を表示する  |
| sourcestats  | 時刻ソースの統計情報を表示する  |
| tracking  | トラッキングを確認する  |
| quit  | 対話状態を終了する  |

~~~ md
[root@localhost ~]# chronyc tracking
Reference ID    : E1FE1EBE (time.cloudflare.com)
Stratum         : 4
Ref time (UTC)  : Mon Sep 04 22:38:51 2023
System time     : 0.000159072 seconds slow of NTP time
Last offset     : -0.000174037 seconds
RMS offset      : 0.000459791 seconds
Frequency       : 0.668 ppm fast
Residual freq   : -0.018 ppm
Skew            : 0.923 ppm
Root delay      : 0.136974722 seconds
Root dispersion : 0.002087610 seconds
Update interval : 257.9 seconds
Leap status     : Normal

[root@localhost ~]# chronyc sources
210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^? tama.paina.net                0   9     0     -     +0ns[   +0ns] +/-    0ns
^* time.cloudflare.com           3   9   377   371  -1213us[-1387us] +/-   72ms
^? ipv4.ntp3.rbauman.com         0   9     0     -     +0ns[   +0ns] +/-    0ns
^? 122x215x240x52.ap122.ftt>     0   9     0     -     +0ns[   +0ns] +/-    0ns
~~~



# システムログ
「システムロギング」とも呼ばれる。コンピューターの動作状況の記録をログと呼ぶ。
あらゆるシステムログを収集する「**journald（systemd-journald**）」というシステムサービスがあり、各サービスで起きた出来事はすべてjournaldが収集し、journalファイルに記録される。

journalファイルにはさまざまな内容が混ざっており確認が困難なため、昔から使われてきたシステムログ記録用のシステムサービス**syslogデーモン**を使用し、journalファイルから必要な情報を仕分け、適切なログファイルに出力してくれる。


![d7293cc0-5bd4-4b3f-94c0-3a2583b1fc43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/e6454c98-7c18-05cd-94ff-e0791abf583f.png)

Linuxではsyslogを使っているが、他にも**rsyslog（reliable-syslog）やsyslog-ng（syslog next-generation**）が使われている。

## rsyslog（reliable-syslog）
syslog（ログメッセージを送受信する規格）の問題点を克服した次世代のsyslogとして、主要なディストリビューションで採用されている。
`/etc/rsyslog.conf`ファイルおよび`/etc/rsyslog.d`ディレクトリ以下のファイルで設定を行う。
各種機能をプラグインモジュールによって拡張することが出来る

| プラグインモジュール | 説明 |
|:-:|:-:|
| imuxsock  | UNIXソケットによるローカルキングサポート(loggerコマンドなど)  |
| imjournal  | systemdのジャーナルサポート  |
| imklog  | カーネルログのサポート  |
| immark  | マークを出力(--MARK--)  |
| imudp  | UDPでメッセージを受信  |
| imtcp  | TCPでメッセージを受信  |

`/etc/rsyslog.conf`ファイル内の設定は以下の書式で行える
**書式：ファシリティ.プライオリティ 出力先**

指定したファシリティが出力するメッセージのうち、指定のプライオリティ以上のものが、出力先に出力される。低いレベルを指定するほど、出力されるログの量も多くなる。
設定変更した場合、`rsyslog.service`の再起動もしくは設定ファイルの再読み込みが必要になる

~~~ md
#プライオリティがnotice以上のものは/var/log/secureに保存
$ authpriv.notive /var/log/secure
~~~


### ファシリティ(facility)
メッセージの生成元を表し、カーネルや実行中のプロセスのこと。大まかに言えば「システムログの分類」。[*]を使うと全てのファシリティを選択することできる

| ファシリティ | 説明 |
|:-:|:-:|
| auth,authpriv  | 認証システム(loginなど)による出力  |
| cron  | cronによる出力  |
| daemon  | 各種デーモンによる出力  |
| kern  | カーネルによる出力  |
| lpr  | 印刷システムによる出力  |
| mail  | メールサービス関連による出力  |
| user  | ユーザーアプリケーションによる出力  |
| local0~local7 | ローカルシステムの設定  |

### プライオリティ(priority)
**メッセージの重要度**を表し、低く設定すればするほどログとして出力される情報量も多くなる。[*]を使うと全てのプライオリティを選択できる。
以下の表は優先度の高い順に並んでいる

| 重要度 | 説明 |
|:-:|:-:|
| emerg  | 緊急事態  |
| alert  | 早急に対処が必要な事態  |
| crit  | システムの処理は継続できるものの深刻な事態  |
| err  | 一般的なエラー  |
| warning  | 一般的な警告  |
| notice  | 一般的な通知  |
| info  | 一般的な情報  |
| debug  | デバッグ情報  |
| none  | ログを記録しない。指定されたファシリティのログを除外する役割を持つ  |


### 出力先
ログファイルやユーザーの端末、他のホストなどに選択することが出来る。この部分をアクションフィールドと呼ぶ。
ファイルであれば絶対パス、外部のsyslogサーバであれば「@サーバアドレス」とする。

| アクションフィールド | 説明 |
|:-:|:-:|
| /var/log/messages  | ログファイルに出力  |
| /dev/tty1  | コンソール(tty1)に出力  |
| @sv.example.com  | ホストsv.example.comにUDPで出力  |
| @@sv.example.com  | ホストsv.example.comにTCPで出力  |
| violet  | ユーザーvioletの端末に出力  |
| *  | ログイン中のすべてのユーザーの端末に出力  |


~~~ md
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog
~~~



### loggerコマンド
**書式：logger [-p ファシリティ.プライオリティ][-t タグ] メッセージ**
ログメッセージを生成するコマンド。`syslog.conf`の設定をチェックする場合に利用出来る。

| オプション | 説明 |
|:-:|:-:|
| -f  | 指定したファイルの内容を送信する  |
| -p  | ファシリティ、プライオリティを指定する。デフォルトはuser.notice  |

~~~md
#cronからのログ（重要度はerr）に「sample」というタグを付けをつけ「テストメッセージ」を送る
# logger -p cron.err -t sample "テストメッセージ"
~~~


## systemd-journald
systemdの動作するシステムでデーモンを動作させ、ログの一元管理を行う。systemdから起動したプロセスの標準出力やsyslogへのログメッセージをバイナリ形式で記録する。
syslogの規格にも対応していて、同じファシリティ(ログの送信元)やプライオリティ(監視レベル)が指定できる。

デフォルトの設定では、バイナリ形式のログは`/run/log/journal`配下にシステム固有のディレクトリを作成し、その中の`systemd.journal`ジャーナルファイルに記録する。`/run`ディレクトリはメモリ上に作成されたファイルシステム上のディレクトリのため、再起動するとデータが消える。

再起動によって消えないようにするには、`/etc/systemd/journald.conf`でジャーナルファイルの保存先を成業する設定項目「Storage=persistent」を設定する。


### systemd-catコマンド
**書式：systemd-cat コマンド**
systemdを採用したシステムで、コマンドの実行結果をジャーナルに書き込むことが出来るコマンド。

### journalctlコマンド
**書式：journalctl [オプション] 検索文字列**
systemdを採用したシステムで、systemdのログ(ジャーナル)を閲覧できるコマンド。`/var/log/jounal`(不揮発性ストレージを使用：デフォルト)や`/var/run/log/jounal`(揮発性ストレージを使用)ディレクトリ内にあるバイナリファイルに保存され、一定量越えると古い物から消去される。
デフォルトではページャーによる表示を行うため、ページ単位での表示や文字列の検索が可能。

| オプション | 説明 |
|:-:|:-:|
| -a(--all)  | 画面表示されない文字も含めて、省略せずすべて表示する  |
| -b(--boot)  | ブート時のメッセージを表示する  |
| -D(--directory) | 指定されたディレクトリのログを表示  |
| -e (--pager-end) | ジャーナルの末尾(最新)を表示する  |
| -f(--follow)  | ログの末尾を表示し続ける  |
| -k (--dmesg) | カーネルからのメッセージを表示  |
| -l (--full) | 画面表示可能なすべてのログを表示する。行数未指定時のデフォルトは10行  |
| -n (--lines) | 直近のログから指定行数分を表示。行数未指定時のデフォルトは10行  |
| -o (--output) | ログの出力形式を指定  |
| -p(--priority) プライオリティ  | 指定したプライオリティより高いメッセージを表示する  |
| -r (--reverse) | ログを新しい順に表示する(デフォルトは古い物から)  |
| -u(--Unit)  | 指定したUnitのログを出力する  |
| -x  | 説明文付きで表示する  |
| --full  | エスケープ文字を除いてプレーンテキストで出力する  |
| --since  | 指定した日付時刻以降のログを表示  |
| --until  | 指定した日付時刻以前のログを表示  |
| --no-pager  | 1ページごとに表示せず、全てのログを出力する  |

::: note info
バイナリファイルはlessコマンドなどで閲覧不可。設定によってはジャーナルは永続的に保存されず、システムの再起動によって消える。
設定ファイル`/etc/systemd/jounald.comf`で「Storage=persistent」となっていれば永続的に保存される。
:::

| 検索キー | 説明 |
|:-:|:-:|
| _PID=  | プロセス番号の指定  |
| _UID=  | ユーザーIDの指定  |
| _SYSTEMD_UNIT=  | Unit名の指定  |



## ログの調査
ログを調べることにより、システムの利用状況やソフトウェアの動作に異常がないかどうかを確認できる。また、問題の徴候を発見できることもある。
Debian,Ubuntuでは、`/var/log/syslog`が使用される
~~~ md
#ログファイルを継続して監視する
$ tail -f /var/log/messages

#特定のメッセージだけを調べる
$ grep eth0 /var/log/messages
~~~

| ログファイル | 説明 |
|:-:|:-:|
| /var/log/secure  | 認証などセキュリティ関連のログが保存される。  |
| /var/run/utmp  | ログイン中のユーザー情報が格納されている。who,wコマンドはこのファイルを参照している。  |
| /var/log/wtmp  | lastコマンドが参照しているファイル。最近ログインしたユーザの一覧を表示する。ユーザのログイン/ログアウト情報が記録されているバイナリファイル  |
| /var/log/lastlog  | lastlogコマンドが参照しているファイル  |


### whoコマンド
ログイン中のユーザーを調べるコマンド

### wコマンド
ログイン中のユーザーに加え、システム情報も表示されるコマンド。

### lastコマンド
最近ログインしたユーザーの一覧を表示するコマンド

### lastlogコマンド
ユーザー毎に最近のログイン一覧を表示するコマンド。一度もログインしたことがないユーザーは「＊＊Never logged in＊＊」と表示される。

## ローテーション機能
古くなったログを切り分けて、ログファイルが肥大化するのを防ぐことが出来る。
**logrotateユーティリティ**が提供し、cronを利用して定期的に実行される。`/etc/logrotate.conf`ファイルで設定を行う。

### logrotateコマンド
**書式：logrotate [オプション] 設定ファイル**
ログ名、間隔、回数を設定ファイルで指定してローテーションすることが出来るコマンド。`/etc/cron.daily/logrotate`スクリプトにより1日1回実行される。


# メール管理
電子メールを取り扱うソフトウェアはいくつか存在する。

+ **MTA(Message Tranfer Agent)**
外部からのネットワーク経由でのメール転送依頼や、サーバ内部でのメール転送依頼を受け取り、メールキューに格納する。

+ **MDA(Mail Delivery Agent)**
宛先ユーザ名を確認し、当該ユーザのメールスプールへ配送する。

+ **MUA(Mail User Agent)**：メールクライアントソフトウェア


![キャプチャ4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/803f6e19-7e63-4d03-7c32-d41e531cf9ae.png)


| 名称 | 特徴 |
|:-:|:-:|
| sendmail  | 古くから使われるMTAで、様々なメール転送方式に対応している。1つのプログラムですべての処理を実行できる反面、設定は難解で専用のツールを使う必要がある。また、セキュリティ面での問題がたびたび発生したり、処理速度が遅いなどの問題もある。送信待ちの設定ファイルは`/var/spool/mqueue/`  |
| postfix  | sendmailとの高い互換性を保ちながら、処理を高速化している。設定が容易でsendmailよりもセキュリティが向上しているため、最近の一部のLinuxディストリビューションで標準のMTAになっている  |
| exim  | Debian系の標準MTA。設定は容易だが、日本語の情報ば比較的少ない。設定ファイルの内容はバージョンによって異なる  |

~~~ md
#SysVinit採用システムでの起動
# /etc/init.d/postfix start

#systemd採用システムでの起動
# systemctl start postfix.service
~~~

## 主要なメールサーバ

### SMTP（Simple Mail Transfer Protocol）:ポート番号25
**メールを送信するために利用する通信プロトコル**.。これがないとメールの送受信を行うことができない
送信元のメールサーバーから受信側のサーバーへメール転送する
オープンリレー設定はしないようにする

::: note info
**・オープンリレーとは？？**
MTA間でメールの転送を行うことをリレー（中継）といい、リレー対象を制限せず、誰からのメール送信、転送依頼でも受け付ける設定になっているMTA（SMTPサーバ）の事。誰でも利用できるため、悪質な迷惑メール（スパム）送信に使用されてしまう恐れがある
:::

### IMAP（Internet Message Access Protocol）:ポート番号143
電子メールを受信する際に利用する通信プロトコル。**メールサーバと接続しメールを閲覧する**。メールサーバ上に保管されているので、職場以外のPCや自宅PC、スマホなどから同じ電子メールが閲覧できるバージョンが存在し、今はIMAP4



### POP3(Post Office Protocol version 3):ポート番号110
利用者のPC上で動作するメールソフトが、メールサーバから自身のメール取り出す処理において使用するメール受信用プロトコル



## mailコマンド
**書式：mail [-s 題名] 宛先メールアドレスまたはユーザー名**
メールの送受信に使用されるコマンド。引数なしで実行すると、メールボックスに届いているメールを確認することが出来る。
ユーザー名のみを指定すると、ローカルシステムのユーザー宛にメールを送ることが出来る。[-s]オプションはタイトル(Subject)を指定する。

~~~ md
$ mail -s samplemail student
〈本文入力〉
#入力終了時は「.」を入力する
~~~

### sendmailコマンド
古くからあるMTAのsendmailでメール送信やMTAの制御のために使用されているコマンド。数無しで単独で実行すると、標準入力からメールのデータを受け取り、.（ピリオド）のみの行を受け取った時点でメールの送信をする。

::: note info
MTAとしてPostfixやeximが動作しているシステムでも使用することができる。
:::


### newaliasesコマンド
**メールアドレスの(別名)エイリアスを設定を有効**にするコマンド。`/etc/aliases`ファイルを設定することで、rootユーザー宛に届いたメールを他のユーザーでも受け取ることが出来るようになり、rootユーザーにはメールが届かなくなる。編集後コマンドを実行させることで、設定を反映させることができる。

### ~/.forwardファイル
**一般ユーザが自分宛のメールを、別のメールアドレスに転送したい時**に設定するファイル。
各ユーザーのホームディレクトリに.forwardファイルを用意し、その中に転送先のメールアドレスを記述する。ユーザー各自で設定できるため、管理者の設定は不要。

### mailqコマンド
送信待ちのメールが蓄えられるメールキューの内容を表示するコマンド。

::: note info
宛先がDNSで検索できなかったメールなども保存される
:::


# プリンタ管理

## CUPS(Common Unix Printing System)
多くのディストリビューションで採用されている印刷サブシステムのこと。
`/etc/cups/printers.conf`ファイルにプリンタに関する設定を記述する。設定ファイルは`/etc/cups/cupsd.conf`で、UNIXの印刷サービスCUPSのデーモン**cupsd**の設定を行う。接続要求を受けるポート番号（デフォルトは631)や、接続するクライアントのアクセス制御などの設定を行う。
~~~md
http://localhost:631
~~~


+ **IPP(Intenet Printer Protocol)の採用**
ネットワーク上のプリンタをサポートするプロトコルで、インターネットを経由した印刷も可能

+ PPD(PostScript Printer Description)ファイルのサポート
AdobeのPPD形式のファイル(テキストファイル)でデバイスドライブの設定が可能。プリンタの機種依存情報が記述され、中間形式(PDF、Postscript)からの変換ルールを提供する。
`/etc/cups/ppd`ディレクトリ以下にファイルは格納される。

+ Webベースで設定可能
webブラウザから設定できるツールが組み込まれている

+ プリンタクラスのサポート
複数のプリンタを1台のプリンタに見せかける機能をサポートしている

~~~ md
#SysVinit採用システムでの起動
# /etc/init.d/cups start

#systemd採用システムでの起動
# systemctl start cups.service
~~~


![キャプチャ11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/2c7eb6fb-f874-4ed5-a17c-94ae110cdefc.png)


CUPSには、標準的なコマンドとレガシーなコマンドがある。レガシーなコマンドはLPD(Line Printer Daemon protocol)と互換性がある。

| 標準的なコマンド | 説明 |
|:-:|:-:|
| lp  | 印刷ジョブを生成し、プリントキューに登録  |
| cansel  | プリントキューにある印刷ジョブを削除  |
| lpstat  | プリントキューにある印刷ジョブを表示  |

| レガシーなコマンド | 説明 |
|:-:|:-:|
| lpr  | 印刷ジョブを生成し、プリントキューに登録  |
| lprm  | プリントキューにある印刷ジョブを削除  |
| lpq  | プリントキューにある印刷ジョブを表示  |


### lprコマンド
**書式：lpr [オプション] ファイル名**
ファイルを印刷するときのコマンド。指定されたファイルや標準入力をプリントキューに送る。

| オプション | 説明 |
|:-:|:-:|
| -#部数  | 印刷部数を指定する  |
| -Pプリンタ名  | 印刷を行うプリンタを指定する  |

~~~ md
#/etc/passwdファイルを5部印刷する
$ lpr -#5 /etc/passwd

#dmesgコマンドの出力を印刷する
$ dmesg | lpr
~~~

### lpadminコマンド
**作成書式：lpadmin -p プリンタ名 [オプション]**
**設定書式：lpadmin -d プリンタ名**
**削除書式：lpadmin -x プリンタ名**

CUPSでのプリンタの登録や削除を行うことが出来るコマンド。


| オプション | 説明 |
|:-:|:-:|
| -p  | 作成するプリンタ名を指定する  |
| -E  | プリンタジョブを受け付け、プリンタへの出力を開始状態にする。  |
| -v  | デバイスURIを指定する  |
| -m  | modelディレクトリ`/usr/share/cups/model`の下のPPDファイル名を指定する  |
| -P  | PPDファイル名を指定する  |

### lpqコマンド
**書式：lpq [オプション] ユーザー名 ジョブ番号**
プリントキューの内容を表示するコマンド。オプション指定せずに実行すると、デフォルトに設定されているプリンタのプリントキューを表示する。

| オプション | 説明 |
|:-:|:-:|
| -Pプリンタ名  | プリンタを指定する  |
| -a  | 全てのプリントキューのジョブを表示する  |


| ファイル内表示 | 説明 |
|:-:|:-:|
| Rank | 印刷ジョブの状態を表す。「active」は印刷中で、印刷待ちは何番目にあるか表示される  |
| Owner  | 印刷を指示したユーザー  |
| Job  | 印刷ジョブ番号  |
| File  | 印刷対象のファイル  |
| Total Size  | プリントキュー内でのファイルサイズ  |


### lpstatコマンド
**書式：lpstat [オプション]**
SystemV系でプリントキューを表示するコマンド。

| オプション | 説明 |
|:-:|:-:|
| -a  | プリントキューがacceptになっているか否かを表示  |
| -p  | プリントキューがenableのなっているか否かを表示  |
| -t  | プリンタの状態をキューの状態を含めてすべて表示  |

### lpcコマンド
**書式：lpc [コマンド]**
コマンドの指定なしに実行すると、プロンプトが表示されて対話的なコマンドが実行できる。


### lprmコマンド
**書式：lprm [オプション] ジョブ番号**
プリントキューにある印刷要求を削除するコマンド。一般ユーザーは自分の発行した印刷要求のみ、rootユーザーは全ての印刷要求を削除可能。

| オプション | 説明 |
|:-:|:-:|
| -Pプリンタ名  | プリンタを指定する  |
| -  | 自分の全印刷ジョブを削除する  |

### cupsdisableコマンド
指定したプリンタを停止状態にするコマンド。

| オプション | 説明 |
|:-:|:-:|
| -c  | プリントキューの全てのジョブをキャンセル  |
| -r  | 停止の理由を示すメッセージを指定。キューの状態の中にメッセージが表示される  |

### cupsrejectコマンド
指定したプリンタへのジョブを受け付けないようにするコマンド

| オプション | 説明 |
|:-:|:-:|
| -c  | プリントキューの全てのジョブをキャンセル  |
| -r  | キューの状態の中にメッセージが表示される  |

## GhostScript
PostScript言語のインタープリター。プリンタやデバイスのドライバが組み込まれていて、入力されたPostScriptを解釈し、プリンタやデバイスの形式に変換して出力する。