サーバー管理
サーバー管理:記事リスト
サーバー管理のカテゴリーには以下の記事がリストされています。
Postfix設定:mynetworksについて
Postfixが信頼するネットワークの範囲を指定します。
これは、Postfixが受信したメールの送信元IPアドレスが、
信頼できるネットワーク内のものかどうかを判断する際に使用されます。
mynetworksにリストされたIPアドレスから送信されたメールは、
通常の認証手段を必要とせずに、Postfixから中継されることが許可されます。
例えば、次のように設定します。
mynetworks = 127.0.0.0/8, 192.168.0.0/16, 10.0.0.0/8
この例では、 Postfixはlocalhost(127.0.0.0/8)、
192.168.x.xネットワーク(192.168.0.0/16)、
10.x.x.xネットワーク(10.0.0.0/8)からのメールを信頼します。
mynetworksは、スパム送信者による悪用を防ぐために重要なので、
通常、ローカルネットワーク内のIPアドレスやきちんと信頼できる
ネットワークの範囲を指定することが重要です。
Dovecotのバージョンを確認する
Dovecotのバージョンを確認するには、
dovecotコマンドに「--version」オプションを付けて実行します。
$ dovecot --version
2.3.16 (7e2e900c1a)
上記例では、「2.3.16 (7e2e900c1a)」と表示され、
Dovecotのバージョンが2.3.16ということが分かります。
SWAP領域を拡張する(システム再起動・サービス停止なし)
下記の様に、メモリ不足によりエラーになった場合などに有効です。
実行環境は、CentOS7.6。
5月 14 10:02:02 MAIL-SV-001 clamd[4758]: daemonize() failed: Cannot allocate memory
5月 14 10:02:03 MAIL-SV-001 systemd[1]: Failed to start clamd scanner (amavisd) daemon.
SWAP領域拡張手順
1.システムメモリ状況を確認します。SWAP領域の空きが94MBしかないことが分かります。
# free -h
total used free shared buff/cache available
Mem: 1.8G 602M 668M 2.0M 566M 1.1G
Swap: 2.0G 1.9G 94M
CentOS7 Hostname(ホスト名)を変更する
変更方法にはいくつか種類があります。
CentOS7のHostname(ホスト名)を一時的に変更する
サーバー起動中のみ変更したHostname(ホスト名)が有効になる方法です。再起動すると元に戻ります。実行にはhostnameコマンドを使用します。
$ su - ←rootになります。 パスワード: 最終ログイン: 2019/10/22 (火) 18:55:57 JST日時 tty1 # hostname ←hostnameコマンドを実行します。 Tiger ←現在のホスト名を表示します。 # hostname Jaguar ←ホスト名を一時的にJaguarに変更します。 # hostname ←再度hostnameコマンドを実行します。 Jaguar ←ホスト名がJaguarに変更されています。
CentOS7でrootのSSHログインを無効化する
/etc/ssh/sshd_configファイルを編集します。
SSHは、暗号化された状態でリモート接続することができるサービスで、
sshdデーモンが提供しています。
CentOSでは、デフォルト環境のままだと、
SSHでのrootログインが行えてしまいます。
インターネットに公開するサーバーを構築する場合、
その設定のままだとセキュリティ上非常に好ましくないので
無効化する必要があります。
CentOS7でfirewalldの確認と停止(ファイアウォール)
CentOS7のファイアウォールでは、これまでのCentOS6系で使用されていた
iptablesよりもfirewalldを使用することが推奨されています。
※CentOS7でもiptablesが使用できます。その場合、firewalldを停止する必要があります。
逆に、firewalldを使用する場合は、iptablesを停止する必要があります。
インターネットに公開するサーバーでは、ファイアウォールは必須になりますが、
信頼できる内部ネットワーク、開発環境及びテスト環境では無効にしておいた方が
良い場合もあります。
本ページでは、CentOS7から推奨されているfirewalldの状態の確認と、
停止方法を紹介します。
CentOS7でSELinuxを無効化する
ディレクトリビューションではありません。
現在のLinuxシステムの問題点として挙がっているものに、
root(スーパーユーザー)の権限が強すぎるというものがあります。
正規のユーザーが、rootを使用する分には問題ないのですが、
万が一、不正ユーザーがrootを奪取した場合、
システムを完全に乗っ取られてしまい、被害が大きくなりすぎるのです。
そこで誕生したのがSELinuxになります。
アメリカ国家安全保障局 (NSA) が開発し、GPL下で提供しています。
機能を簡単に説明すると、rootの権限を弱くすることがSELinuxの役割になります。
rootに集中している権限を、ユーザーやプロセスごとに振り分けることで、
root権限を奪取されたとしても、被害を限定的に抑えるというのが目的になり、
前提として、サーバーに侵入された場合に、その機能が役立つというものです。
従って、サーバー侵入を防ぐというものではありません。
また、扱うデータの重要度や他のセキュリティ対策での防衛、
設定の複雑さなどからくるサーバー管理のしにくさなどを
総合的に鑑みて、敢えてSELinuxを無効にしているシステムも多く存在します。
CentOS7でSElinux(Security-Enhanced-Linux)を無効化する手順を紹介します。
SELinux無効化設定を行う前に、現在のSElinuxの状態を確認しましょう。
SELinuxの状態を確認するには、getenforceコマンドを使用します。
このコマンドを実行すると、SELinuxの状態が確認できます。
ステータスは、次の通りです。
| Enforcing | 有効な状態 |
| Permissive | 無効な状態であるが、SELinuxのログは記録している状態 |
| Disabled | 無効な状態 |
CentOS7バージョンアップ手順
CentOSを最新バージョンにアップデートする手順を紹介します。
本作業を行うことで、常に最新のCentOS を利用することが可能になります。
注意
実行タイミングやサーバー環境によっては、システムやアプリケーションの誤作動や
不具合、場合によっては、サーバー自体が起動しなくなる可能性があります。
そうなっても良いように、実行する場合は、必ずテスト環境(壊れても良い環境)で
事前確認を行ってください。
今回の例では、CentOS7.4を使用していますが、
他のバージョンでも基本的に手順は同じになります。
1.Linux のバージョンを確認します。
$ su -
パスワード: ←rootパスワードを入力します(パスワードは入力しても表示されません)
# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
2.カーネルバージョンを確認します。
# uname -a
Linux Tiger 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
3.カーネルをアップデート対象から除外する設定を行います。
バージョンアップの多くのトラブル原因は、
カーネルアップデートなので、取り敢えず除外します。
13 行目に「exclude=kernel*」を追加します。
# vi /etc/yum.conf
--------------------------------------------------------------------
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_repor
t_page.php?category=yum
distroverpkg=centos-release
exclude=kernel* ←「exclude=kernel*」を追加します。
--------------------------------------------------------------------
編集後、「:wq」で保存終了します。
4.yumアップデートを実施します。
yum コマンドでアップデートを実施します。
途中、処理を続行するか問われるので「y」を入力します。
※表示される内容は、実行タイミングによって異なります。
--------------------------------------------------------------------
# yum update
読み込んだプラグイン:fastestmirror, langpacks
base | 3.6 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
(1/4): extras/7/x86_64/primary_db | 147 kB 00:00:03
(2/4): updates/7/x86_64 /primary_db | 2.0 MB 00:00:08
〜中略〜
libinput x86_64 1.8.4 -2.el7 base 142 k
libwayland-client x86_64 1.14.0-2.el7 base 32 k
libwayland-cursor x86_64 1.14.0 -2.el7 base 20 k
libwayland-server x86_64 1.14.0 -2.el7 base 38 k
llvm-private x86_64 5.0.0 -3.el7 base 20 M
lz4 x86_64 1.7.5 -2.el7 base 98 k
mesa-libwayland-egl x86_64 17.2.3 -8.20171019.el7 base 17 k
unbound-libs x86_64 1.6.6 -1.el7 base 405 k
volume_key-libs x86_64 0.3.9-8.el7 base 140 k
トランザクションの要約
============================================================
インストール 4 パッケージ(+20 個の依存関係のパッケージ)
更新 613 パッケージ ←この辺りの数字は、実行タイミングによって異なります。
合計容量: 642 M
総ダウンロード容量: 641 M
Is this ok [y/d/N]: y ←「y」を入力します。
〜中略〜
xorg-x11-server-common.x86_64 0:1.19.5-5.el7
xorg-x11-xinit.x86_64 0:1.3.4-2.el7
yum.noarch 0:3.4.3-158.el7.centos
yum-plugin-fastestmirror.noarch 0:1.1.31 -45.el7
yum-utils.noarch 0:1.1.31-45.el7
置換:
grub2.x86_64 1:2.02-0.64.el7.centos grub2 -tools.x86_64 1:2.02-0.64.el7.centos
完了しました!
--------------------------------------------------------------------
5.サーバーを再起動します。
# shutdown -r now
6.再起動後、Linux のバージョンを確認します。
下記の例では、CentOS7.5 にバージョンアップしていますが、
実行タイミングによってバージョンが異なる場合があります。
$ su -
パスワード:
# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
7.カーネルバージョンを確認します。
カーネルのバージョンはアップデートから除外しているので、変わっていません。
# uname -a
Linux Tiger 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
8.カーネルのバージョンアップをします。
13 行目の「exclude=kernel*」行頭に「#」を追加します。
# vi /etc/yum.conf
--------------------------------------------------------------------
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_repor
t_page.php?category=yum
distroverpkg=centos-release
#exclude=kernel* ←行頭に「#」を追加します。
--------------------------------------------------------------------
編集後、「:wq」で保存終了します。
9.yumアップデートを実施します。
yum コマンドでアップデートを実施します。
途中、処理を続行するか問われるので「y」を入力します。
※表示される内容は、実行タイミングによって異なります。
--------------------------------------------------------------------
# yum update
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.nara.wide.ad.jp
* extras: ftp.nara.wide.ad.jp
〜中略〜
---> パッケージkernel-tools-libs.x86_64 0:3.10.0-693.el7 を更新
---> パッケージkernel-tools-libs.x86_64 0:3.10.0-862.3.2.el7 をアップデート
--> 依存性解決を終了しました。
依存性を解決しました
============================================================
Package アーキテクチャーバージョン リポジトリー 容量
============================================================
インストール中:
kernel x86_64 3.10.0-862.3.2.el7 updates 46 M
kernel-devel x86_64 3.10.0-862.3.2.el7 updates 16 M
更新します:
kernel-headers x86_64 3.10.0-862.3.2.el7 updates 7.1 M
kernel-tools x86_64 3.10.0-862.3.2.el7 updates 6.2 M
kernel-tools-libs x86_64 3.10.0-862.3.2.el7 updates 6.2 M
トランザクションの要約
============================================================
インストール 2 パッケージ ←この辺りの数字や内容は、実行タイミングによって異なります。
更新 3 パッケージ
総ダウンロード容量: 81 M
Is this ok [y/d/N]: y ←「y」を入力します。
〜中略〜
検証中 : kernel-headers-3.10.0-693.el7.x86_64 7/8
検証中 : kernel-tools-libs-3.10.0-693.el7.x86_64 8/8
インストール:
kernel.x86_64 0:3.10.0-862.3.2.el7 kernel -devel.x86_64 0:3.10.0-862.3.2.el7
更新:
kernel-headers.x86_64 0:3.10.0-862.3.2.el7 kernel-tools.x86_64 0:3.10.0-862.3.2.el7
kernel-tools-libs.x86_64 0:3.10.0-862.3.2.el7
完了しました!
--------------------------------------------------------------------
10.サーバーを再起動します。
# shutdown -r now
11.カーネルバージョンを確認します。
カーネルがバージョンアップしています。
$ su -
パスワード:
[root@Tiger ~]# uname -a
Linux Tiger 3.10.0-862.3.2.el7.x86_64 #1 SMP Mon May 21 23:36:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
本手順を実施することで、常に最新のCentOS を利用することが出来ます。
しかし、冒頭でも説明しましたが、アップデートによるトラブルが発生する場合も
ありますので、実施する際は、必ずテスト環境で問題がないことを確認してから、
本番環境で実施してください。
yumでシステムアップデートする(カーネルは除く)
このyumを使用することで、Linuxシステムにインストールされている
すべてのパッケージをアップデートすることができます。
■yumのサブコマンド
| yum check-update | アップデート可能なパッケージを調査します。 |
| yum update | インストールされている全てのパッケージをアップデートします。 |
| yum update パッケージ | 指定したパッケージのみアップデートします。 |
| yum upgrade | システムをアップグレードします。 (CentOS7.1→CentOS7.4) 実質yum updateと同じ |
yum updateにおいて、カーネルアップデートは行わないほうが無難です。
なぜなら、カーネルアップデートを行うと、
システムの再起動やサービスの停止措置が必要だったり、
最悪カーネルパニックが発生して、システムが起動しない場合があるからです。
■カーネルを除外してアップデートする
yum -y updateの後ろに「--exclude=kernel*」を指定して実行することで
カーネルをアップデート対象から除外することできます。
# yum -y update --exclude=kernel*
ただし、この方法だと毎回「--exclude=kernel*」を指定する必要があり、
指定し忘れてしまう危険性があります。
そこで、/etc/yum.confにカーネルアップデートを除外する設定を行うのがオススメです。
# vi /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
exclude=kernel* ←追加します。
追加したら「:wq」で保存終了します。
・カーネルのバージョンを確認します。
# uname -r
3.10.0-229.el7.x86_64
・CentOSのバージョンを確認します。
# cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)
・アップデート可能なパッケージを確認します。
アップデートリストを確認して、カーネルが対象になっていない事を確認します。
# yum check-update
jasper-libs.x86_64 1.900.1-31.el7 base
kbd.x86_64 1.15.5-13.el7 base
kbd-legacy.noarch 1.15.5-13.el7 base
kbd-misc.noarch 1.15.5-13.el7 base
kexec-tools.x86_64 2.0.14-17.el7 base
kmod.x86_64 20-15.el7_4.2 updates
kmod-libs.x86_64 20-15.el7_4.2 updates
kpartx.x86_64 0.4.9-111.el7 base
kpatch.noarch 0.4.0-1.el7 base
krb5-devel.x86_64 1.15.1-8.el7 base
krb5-libs.x86_64 1.15.1-8.el7 base
langtable.noarch 0.0.31-3.el7 base
・アップデートを実施します。
# yum update
・アップデート後のカーネルのバージョンを確認します。
# uname -r
3.10.0-229.el7.x86_64
・アップデート後のCentOSのバージョンを確認します。
# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core) ←CentOS7.4にアップグレードしています。
・アップデート後にアップグレード可能なパッケージが存在しないことを確認します。
対象パッケージがなければ問題ありません。
# yum check-update
・ログファイルでもアップデート状況の確認が行なえます。
# less /var/log/yum.log
Sep 22 15:37:14 Updated: libgcc-4.8.5-16.el7.x86_64
Sep 22 15:37:15 Installed: 1:grub2-common-2.02-0.64.el7.centos.noarch
Sep 22 15:37:15 Updated: centos-release-7-4.1708.el7.centos.x86_64
Sep 22 15:37:16 Updated: setup-2.8.71-7.el7.noarch
Sep 22 15:37:19 Updated: filesystem-3.2-21.el7.x86_64
Sep 22 15:37:19 Updated: 1:emacs-filesystem-24.3-20.el7_4.noarch
Sep 22 15:37:19 Updated: libreport-filesystem-2.1.11-38.el7.centos.x86_64
Sep 22 15:37:19 Updated: 32:bind-license-9.9.4-51.el7.noarch
Sep 22 15:37:19 Updated: langtable-0.0.31-3.el7.noarch
Sep 22 15:37:20 Updated: langtable-data-0.0.31-3.el7.noarch
Sep 22 15:37:20 Installed: 1:grub2-pc-modules-2.02-0.64.el7.centos.noarch
Sep 22 15:37:20 Installed: firewalld-filesystem-0.4.4.4-6.el7.noarch
Sep 22 15:37:20 Updated: 2:vim-filesystem-7.4.160-2.el7.x86_64
カーネルアップデートを行わない場合でも、
何らかの不具合が発生する可能性がありますので、
アップデートを行う際は、事前に必ずテスト環境での検証を行うことが必要です。
yum upgradeは、「yum update --obsoletes」と同じ扱いになります。
CentOSでは、/etc/yum.confにobsoletes=1と設定されているため、
デフォルトで--obsoletesが有効の状態になっています。
結果的に、「yum update」も「yum upgrade」も同じ扱いになります。
CentOS7のログ管理(systemd、journald)
systemdがログ管理を行う新しい仕組みが導入されています。
従来のsyslogは、複数システムのログをネットワーク経由で一括管理出来たり、
多くの管理ソフトウェア製品とも連携が可能でしたが、
膨大なログの中から欲しい情報を抽出するには、
様々なコマンドやツールを駆使する必要がありました。
そこでCentOS7では、syslogでのログ抽出作業量を軽減するために、
以前と比べて格段に情報を抽出しやすい仕組みに変更されています。
■journaldの状態を確認する
CentOS7では、ログ収集の仕組みとして、「journald」を使用します。
サービス名は「systemd-journald.service」です。
journaldの起動確認は、systemctlコマンドを実行します。
# systemctl status systemd-journald.service
systemd-journald.service - Journal Service
Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static)
Active: active (running) since 金 2017-08-04 13:39:06 JST; 46min ago
Docs: man:systemd-journald.service(8)
man:journald.conf(5)
Main PID: 712 (systemd-journal)
Status: "Processing requests..."
CGroup: /system.slice/systemd-journald.service
mq712 /usr/lib/systemd/systemd-journald
8月 04 13:39:06 Tiger systemd-journal[712]: Runtime journal is using 6.1M (max 48.9M, leavin...M).
8月 04 13:39:06 Tiger systemd-journal[712]: Runtime journal is using 6.1M (max 48.9M, leavin...M).
8月 04 13:39:06 Tiger systemd-journal[712]: Journal started
8月 04 13:39:07 Tiger systemd-journal[712]: Runtime journal is using 6.1M (max 48.9M, leavin...M).
Hint: Some lines were ellipsized, use -l to show in full.
■ブートログを確認する
journaldが収集したログを出力するためのコマンドは、「journalctl」になります。
サーバーに搭載されている各種ハードウェアの情報を確認するには、
CentOS7が起動した時のブートログを確認します。
ブートログを確認するには、journalctlコマンドにオプション「-b」を付けて実行します。
# journalctl -b
-- Logs begin at 金 2017-08-04 13:39:02 JST, end at 金 2017-08-04 14:29:01 JST. --
8月 04 13:39:02 Tiger systemd-journal[336]: Runtime journal is using 6.1M (max 48.9M, leaving 73.4M
8月 04 13:39:02 Tiger systemd-journal[336]: Runtime journal is using 6.1M (max 48.9M, leaving 73.4M
8月 04 13:39:02 Tiger kernel: Initializing cgroup subsys cpuset
8月 04 13:39:02 Tiger kernel: Initializing cgroup subsys cpu
8月 04 13:39:02 Tiger kernel: Initializing cgroup subsys cpuacct
8月 04 13:39:02 Tiger kernel: Linux version 3.10.0-229.el7.x86_64 (builder@kbuilder.dev.centos.org)
8月 04 13:39:02 Tiger kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-229.el7.x86_64 root=/dev/map
8月 04 13:39:02 Tiger kernel: Disabled fast string operations
8月 04 13:39:02 Tiger kernel: e820: BIOS-provided physical RAM map:
■ログを日時でフィルタリングする
journalctlコマンドには、日時でログをフィルタリングする機能が備わっています。
日時開始を「--since=""」で、日時終了を「--until=""」で指定します。
下記例では、2017年8月4日 14時29分〜14時33分1秒までのログを出力しています。
# journalctl --since="2017-08-04 14:29:00" --until="2017-08-04 14:33:01"
-- Logs begin at 金 2017-08-04 13:39:02 JST, end at 金 2017-08-04 14:35:01 JST. --
8月 04 14:29:01 Tiger systemd[1]: Starting Session 62 of user root.
8月 04 14:29:01 Tiger systemd[1]: Started Session 62 of user root.
8月 04 14:29:01 Tiger CROND[5038]: (root) CMD (/var/www/system/check_process.pl > /dev/null 2>&1)
8月 04 14:29:25 Tiger clamd[1113]: SelfCheck: Database status OK.
8月 04 14:29:25 Tiger clamd[1113]: SelfCheck: Database status OK.
8月 04 14:30:01 Tiger systemd[1]: Starting Session 64 of user root.
8月 04 14:30:01 Tiger systemd[1]: Started Session 64 of user root.
8月 04 14:30:01 Tiger systemd[1]: Starting Session 63 of user root.
8月 04 14:30:01 Tiger systemd[1]: Started Session 63 of user root.
8月 04 14:30:01 Tiger CROND[5046]: (root) CMD (/usr/lib64/sa/sa1 1 1)
8月 04 14:30:01 Tiger CROND[5047]: (root) CMD (/var/www/system/check_process.pl > /dev/null 2>&1)
8月 04 14:31:01 Tiger systemd[1]: Starting Session 65 of user root.
8月 04 14:31:01 Tiger systemd[1]: Started Session 65 of user root.
8月 04 14:31:01 Tiger CROND[5056]: (root) CMD (/var/www/system/check_process.pl > /dev/null 2>&1)
8月 04 14:32:01 Tiger systemd[1]: Starting Session 66 of user root.
8月 04 14:32:01 Tiger systemd[1]: Started Session 66 of user root.
8月 04 14:32:01 Tiger CROND[5061]: (root) CMD (/var/www/system/check_process.pl > /dev/null 2>&1)
デフォルトでは、自動的にlessページャが起動するので、
スペースでページ送りをしますが、
不要な場合は、「--no-pager」オプションを付与します。
■今日のログを出力する
実行日当時のログを出力したい場合は、--sinceオプションに「today」を指定します。
# journalctl --since=today
- Logs begin at 金 2017-08-04 13:39:02 JST, end at 金 2017-08-04 14:40:01 JST. --
8月 04 13:39:02 Tiger systemd-journal[336]: Runtime journal is using 6.1M (max 48.9M, leaving 73.4M
8月 04 13:39:02 Tiger systemd-journal[336]: Runtime journal is using 6.1M (max 48.9M, leaving 73.4M
8月 04 13:39:02 Tiger kernel: Initializing cgroup subsys cpuset
8月 04 13:39:02 Tiger kernel: Initializing cgroup subsys cpu
8月 04 13:39:02 Tiger kernel: Initializing cgroup subsys cpuacct
8月 04 13:39:02 Tiger kernel: Linux version 3.10.0-229.el7.x86_64 (builder@kbuilder.dev.centos.org)
8月 04 13:39:02 Tiger kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-229.el7.x86_64 root=/dev/map
8月 04 13:39:02 Tiger kernel: Disabled fast string operations
8月 04 13:39:02 Tiger kernel: e820: BIOS-provided physical RAM map:
他にも「yesterday」や何に使うか分かりませんが「tomorrow」も指定できます。
■特定のサービスに絞ってログを表示する
特定のサービスのみのログを出力したい場合は、
「-u」オプションにサービス名を付けて実行します。
下記例では、SSHサービスのログを出力しています。
# journalctl --since="2017-08-03 14:29:00" --until="2017-08-04 14:33:01" -u sshd.service
-- Logs begin at 金 2017-08-04 13:39:02 JST, end at 金 2017-08-04 14:44:01 JST. --
8月 04 13:39:09 Tiger systemd[1]: Starting OpenSSH server daemon...
8月 04 13:39:09 Tiger systemd[1]: Started OpenSSH server daemon.
8月 04 13:39:09 Tiger sshd[1106]: Server listening on 0.0.0.0 port 2222.
8月 04 14:24:24 Tiger sshd[3972]: Accepted publickey for pakira from 192.168.0.80 port 50700 ssh2:
■リアルタイムでログを確認する
現在、リアルタイムで出力しているログを表示させたい場合は、
journalctlコマンドに「-f」オプションを付けて実行します。
従来の「tail -f /var/log/messages」と同様な表示ができます。
# journalctl -f
-- Logs begin at 金 2017-08-04 13:39:02 JST. --
8月 04 18:32:01 Tiger systemd[1]: Started Session 267 of user root.
8月 04 18:32:01 Tiger CROND[11781]: (root) CMD (/var/www/system/check_process.pl > /dev/null 2>&1)
8月 04 18:33:01 Tiger systemd[1]: Created slice user-0.slice.
8月 04 18:33:01 Tiger systemd[1]: Starting Session 268 of user root.
8月 04 18:33:01 Tiger systemd[1]: Started Session 268 of user root.
8月 04 18:33:01 Tiger CROND[11787]: (root) CMD (/var/www/system/check_process.pl > /dev/null 2>&1)
8月 04 18:34:01 Tiger systemd[1]: Created slice user-0.slice.
8月 04 18:34:01 Tiger systemd[1]: Starting Session 269 of user root.
8月 04 18:34:01 Tiger systemd[1]: Started Session 269 of user root.
8月 04 18:34:01 Tiger CROND[11793]: (root) CMD (/var/www/system/check_process.pl > /dev/null 2>&1)
■プライオリティによるログのフィルタリング
syslogでは、ログのプライオリティ(緊急度)に応じた管理ができましたが、
journalctlでも同様の出力が行なえます。
プライオリティには、緊急度の高いものからemerg、alert、err、warning、
notice、debugがあります。
■warningプライオリティを表示する
特定のプライオリティを表示させるには、journalctlにオプション「-p」を付けて、
フィルタリングしたいプライオリティを指定します。
下記例では、warningプライオリティを表示しています。
# journalctl -p warning
-- Logs begin at 金 2017-08-04 13:39:02 JST, end at 金 2017-08-04 18:42:01 JST. --
8月 04 13:39:02 Tiger kernel: ACPI: RSDP 00000000000f6a10 00024 (v02 PTLTD )
8月 04 13:39:02 Tiger kernel: ACPI: XSDT 000000003feea65b 0005C (v01 INTEL 440BX 06040000 VMW
8月 04 13:39:02 Tiger kernel: ACPI: FACP 000000003fefee73 000F4 (v04 INTEL 440BX 06040000 PTL
8月 04 13:39:02 Tiger kernel: ACPI: DSDT 000000003feec3fc 12A77 (v01 PTLTD Custom 06040000 MSFT
8月 04 13:39:02 Tiger kernel: ACPI: FACS 000000003fefffc0 00040
8月 04 13:39:02 Tiger kernel: ACPI: BOOT 000000003feec3d4 00028 (v01 PTLTD $SBFTBL$ 06040000 LTP
8月 04 13:39:02 Tiger kernel: ACPI: APIC 000000003feeb8bd 00742 (v01 PTLTD ? APIC 06040000 LTP
8月 04 13:39:02 Tiger kernel: ACPI: MCFG 000000003feeb881 0003C (v01 PTLTD $PCITBL$ 06040000 LTP
8月 04 13:39:02 Tiger kernel: ACPI: SRAT 000000003feea757 008A8 (v02 VMWARE MEMPLUG 06040000 VMW
8月 04 13:39:02 Tiger kernel: ACPI: HPET 000000003feea71f 00038 (v01 VMWARE VMW HPET 06040000 VMW
8月 04 13:39:02 Tiger kernel: ACPI: WAET 000000003feea6f7 00028 (v01 VMWARE VMW WAET 06040000 VMW
8月 04 13:39:02 Tiger kernel: kexec: crashkernel=auto resulted in zero bytes of reserved memory.
■errプライオリティを表示する
# journalctl -p err
-- Logs begin at 金 2017-08-04 13:39:02 JST, end at 金 2017-08-04 18:44:01 JST. --
8月 04 13:39:02 Tiger kernel: Detected CPU family 6 model 78
8月 04 13:39:02 Tiger kernel: Warning: Intel CPU model - this hardware has not undergone upstream t
8月 04 13:39:03 Tiger kernel: sd 0:0:0:0: [sda] Assuming drive cache: write through
8月 04 13:39:07 Tiger kernel: piix4_smbus 0000:00:07.3: Host SMBus controller not enabled!
8月 04 13:39:08 Tiger NetworkManager[839]: _nl_get_vtable: assertion 'vtable.handle' failed
8月 04 13:39:23 Tiger systemd[1]: Failed to start Crash recovery kernel arming.
これまでの例では各プライオリティ名を指定してフィルタリングしましたが、
これをプライオリティの値で指定することも可能です。
各プライオリティと値は下記の対応となっています。
| emerg | 0 |
| alert | 1 |
| crit | 2 |
| err | 3 |
| warning | 4 |
| notice | 5 |
| debug | 6 |
■emergプライオリティのログをプライオリティ値で表示する
emergログが存在しないので、loggerコマンドを使用してテストログを吐き出し、
その後プライオリティ値「0」でemergログを表示します。
# logger -p daemon.emerg "TEST LOG EMERG"
#
Message from syslogd@Tiger at Aug 7 16:23:46 ...
pakira:TEST LOG EMERG
# journalctl -p 0
-- Logs begin at 月 2017-08-07 15:57:16 JST, end at 月 2017-08-07 16:23:46 JST. --
8月 07 16:23:46 Tiger pakira[3402]: TEST LOG EMERG
■alertプライオリティのログをプライオリティ値で表示する
プライオリティ値「1」でalertログを表示します。
# logger -p daemon.alert "TEST LOG ALERT"
# journalctl -p 1
-- Logs begin at 月 2017-08-07 15:57:16 JST, end at 月 2017-08-07 16:26:26 JST. --
8月 07 16:23:46 Tiger pakira[3402]: TEST LOG EMERG
8月 07 16:26:26 Tiger pakira[3789]: TEST LOG ALERT
journalctlを実行すると、alertよりプライオリティの高い
emergプライオリティも表示されていることが分かります。
■カーネルログを表示する
カーネルログを表示するには、
journalctlコマンドにオプション「-k」を付けて実行します。
従来の「dmesg」コマンドに相当します。
# journalctl -k
-- Logs begin at 月 2017-08-07 15:57:16 JST, end at 月 2017-08-07 16:29:01 JST. --
8月 07 15:57:16 Tiger kernel: Initializing cgroup subsys cpuset
8月 07 15:57:16 Tiger kernel: Initializing cgroup subsys cpu
8月 07 15:57:16 Tiger kernel: Initializing cgroup subsys cpuacct
8月 07 15:57:16 Tiger kernel: Linux version 3.10.0-229.el7.x86_64 (builder@kbuilder.dev.centos.org)
8月 07 15:57:16 Tiger kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-229.el7.x86_64 root=/dev/map
8月 07 15:57:16 Tiger kernel: Disabled fast string operations
8月 07 15:57:16 Tiger kernel: e820: BIOS-provided physical RAM map:
8月 07 15:57:16 Tiger kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable
8月 07 15:57:16 Tiger kernel: BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved
8月 07 15:57:16 Tiger kernel: BIOS-e820: [mem 0x00000000000dc000-0x00000000000fffff] reserved
8月 07 15:57:16 Tiger kernel: BIOS-e820: [mem 0x0000000000100000-0x000000003fedffff] usable
8月 07 15:57:16 Tiger kernel: BIOS-e820: [mem 0x000000003fee0000-0x000000003fefefff] ACPI data
8月 07 15:57:16 Tiger kernel: BIOS-e820: [mem 0x000000003feff000-0x000000003fefffff] ACPI NVS
8月 07 15:57:16 Tiger kernel: BIOS-e820: [mem 0x000000003ff00000-0x000000003fffffff] usable
8月 07 15:57:16 Tiger kernel: BIOS-e820: [mem 0x00000000f0000000-0x00000000f7ffffff] reserved
8月 07 15:57:16 Tiger kernel: BIOS-e820: [mem 0x00000000fec00000-0x00000000fec0ffff] reserved
8月 07 15:57:16 Tiger kernel: BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
8月 07 15:57:16 Tiger kernel: BIOS-e820: [mem 0x00000000fffe0000-0x00000000ffffffff] reserved
■特定のプロセスIDのログを表示する
特定のプロセスIDに関係するログを表示する場合は、
journalctlコマンドに「_PID=プロセス番号」を付けて実行します。
# journalctl _PID=1112
-- Logs begin at 月 2017-08-07 15:57:16 JST, end at 月 2017-08-07 16:32:01 JST. --
8月 07 15:57:23 Tiger clamd[1112]: clamd daemon 0.98.7 (OS: linux-gnu, ARCH: x86_64, CPU: x86_64)
8月 07 15:57:23 Tiger clamd[1112]: Running as user amavis (UID 991, GID 991)
8月 07 15:57:23 Tiger clamd[1112]: Log file size limited to 1048576 bytes.
8月 07 15:57:23 Tiger clamd[1112]: Reading databases from /var/lib/clamav
8月 07 15:57:23 Tiger clamd[1112]: Not loading PUA signatures.
8月 07 15:57:23 Tiger clamd[1112]: Bytecode: Security mode set to "TrustSigned".
■実行ファイルのパス指定でのログ表示
journalctlコマンドにサービスを提供する実行ファイルのパスを指定して
それに関連するログを表示することができます。
下記例では、SSHサービスの実行ファイルである「/usr/sbin/sshd」関連のログを
表示しています。
# journalctl /usr/sbin/sshd
-- Logs begin at 月 2017-08-07 15:57:16 JST, end at 月 2017-08-07 16:34:06 JST. --
8月 07 15:57:23 Tiger sshd[1105]: Server listening on 0.0.0.0 port 22.
8月 07 16:22:03 Tiger sshd[3308]: Accepted publickey for pakira from 192.168.0.80 port 54097 ssh2:
8月 07 16:22:04 Tiger sshd[3308]: pam_unix(sshd:session): session opened for user pakira by (uid=0)
Postfixのメールログを確認する
Postfixのログは、「/var/log/maillog」ファイルに出力されます。
1週間単位で自動ローテションされ、/var/log/maillogファイルの他に
「/var/log/maillog.1」〜「/var/log/maillog.4」までの4週間分を
歴として保持しています。
何かトラブルが発生した際、「/var/log/maillog」ファイルを
確認することで多くの原因を特定することができます。
■メールログファイル(/var/log/maillog)を確認する
# ls -l /var/log/maillog*
-rw------- 1 root root 1941316 7月 24 16:47 /var/log/maillog
-rw------- 1 root root 10497049 7月 23 04:02 /var/log/maillog.1
-rw------- 1 root root 10312833 7月 16 04:02 /var/log/maillog.2
-rw------- 1 root root 10810720 7月 9 04:02 /var/log/maillog.3
-rw------- 1 root root 9886779 7月 2 04:02 /var/log/maillog.4
■メールログファイルの内容を確認する
# tail /var/log/maillog
Jul 24 16:47:28 Mail_001_Enetmercury postfix/smtpd[30065]: warning: unknown[80.82.XX.XX]: SASL LOGIN authentication failed: authentication failure
Jul 24 16:47:29 Mail_001_Enetmercury postfix/smtpd[30065]: disconnect from unknown[80.82.XX.XX]
Jul 24 16:48:04 Mail_001_Enetmercury postfix/qmgr[1388]: 03D037E257: from=
Jul 24 16:48:05 Mail_001_Enetmercury postfix/smtp[29975]: 03D037E257: to=
Jul 24 16:49:44 Mail_001_Enetmercury postfix/qmgr[1388]: 813897E249: from=
Jul 24 16:50:14 Mail_001_Enetmercury postfix/smtp[29975]: connect to aaa.com[63.240.XXX.XXX]: Connection timed out (port 25)
Jul 24 16:50:14 Mail_001_Enetmercury postfix/smtp[29975]: 813897E249: to=
Jul 24 16:50:49 Mail_001_Enetmercury postfix/anvil[30067]: statistics: max connection rate 1/60s for (smtp:80.82.XX.XX) at Jul 24 16:47:27
Jul 24 16:50:49 Mail_001_Enetmercury postfix/anvil[30067]: statistics: max connection count 1 for (smtp:80.82.XX.XX) at Jul 24 16:47:27
Jul 24 16:50:49 Mail_001_Enetmercury postfix/anvil[30067]: statistics: max cache size 1 at Jul 24 16:47:27
MTAをSendmailからPostfixに変更する
MTAをSendmailからPostfixに変更する場合は、alternatives コマンドを実行します。
実行する際は、「--config」オプションに「mta」を指定します。
# alternatives --config mta
2 プログラムがあり 'mta' を提供します。
選択 コマンド
-----------------------------------------------
*+ 1 /usr/sbin/sendmail.sendmail
2 /usr/sbin/sendmail.postfix
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2 ←Postfixの2を入力します。
# alternatives --config mta
2 プログラムがあり 'mta' を提供します。
選択 コマンド
-----------------------------------------------
* 1 /usr/sbin/sendmail.sendmail
+ 2 /usr/sbin/sendmail.postfix
MTAがPostfixに変更されます。
最後に、sendmailを停止し、Postfixを起動します。
Postfixでメールキューを削除する
Postfixでメールキューを削除するには、postsuperコマンドで行なえます。
postsuperコマンドにオプション「-d」を付け、
引数にQueue IDを指定します。
Queue IDの確認は、「Postfixでメールキューの状態を確認する」で
紹介している「postqueue -p」コマンドで行えます。
■Queue IDが「CDDE97E240」のキューを削除する
# postsuper -d CDDE97E240
postsuper: CDDE97E240: removed
postsuper: Deleted: 1 message
ソフトウェアの不具合により、メールが溜まってしまった場合は、
postsuperコマンドに、オプション「-d ALL」を付け、一括削除します。
# postsuper -d ALL
postsuper: Deleted: 6 messages
Postfixでメールキューの内容を確認する
キュー内のメールは、postcatコマンドを使用することで
内容を確認することが出来ます。
実行方法は、postcatコマンドにオプション「-q」を付け、
引数にQueue IDを指定します。
Queue IDの確認は、「Postfixでメールキューの状態を確認する」で
紹介している「postqueue -p」コマンドで行えます。
■Queue IDが「178A27E250」のキュー内容を確認する
# postcat -q 178A27E250
Postfixでメールキューの状態を確認する
Postfixでメールキューの状態を確認するには、postqueueコマンドを使用します。
postqueueコマンドにオプション「-p」を付けて実行します。
■メールキューが存在する場合
# postqueue -p
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
106E07E25C 28536 Thu Jul 20 00:01:20 pakira2@XXXXXXXXXXXXX.net
(Host or domain name not found. Name service error for name=tarou.jp type=MX: Host not found, try again)
yamada@XXXXXXXX.jp
19DEC7E261 20997 Thu Jul 20 00:02:04 pakira2@XXXXXXXXXXXXX.net
(connect to mail.xn--v9juc834uywe0tghzh2y4d.com[157.107.91.16]: Connection timed out)
webmaster@XXXXXXXXXXXXXXX.com
E227E7E242 22135 Thu Jul 20 00:01:23 pakira2@XXXXXXXXXXXXX.net
(connect to linuxlike.com[141.8.230.20]: Connection timed out)
likelinux@XXXXXXXXXX.com
6EEF87E246 20181 Thu Jul 20 00:02:03 pakira2@XXXXXXXXXXXXX.net
(Host or domain name not found. Name service error for name=kkk.com type=MX: Host not found, try again)
kkkkkkkkk@XXX.com
-- 91 Kbytes in 4 Requests.
■メールキューが存在しない場合
# postqueue -p
Mail queue is empty
■溜まっているメールキューを強制的に送信するには
postqueueコマンドにオプション「-f」を付けて実行します。
# postqueue -f
Postfixで送信できないメールを保持する日数を設定する
Postfixで何らかの原因で送信できないメールを保持する日数を設定するには、
main.cfファイルに「maximal_queue_lifetime」を設定します。
デフォルトでは5日保持するようになっていますが、
これを設定する事で、任意の日数に設定できます。
下記例では、保持日数を3日に設定しています。
# vi /etc/postfix/main.cf
maximal_queue_lifetime = 3d
設定を保存終了後、設定ファイルの再読込が必要になります。
Postfixでメッセージの再送信時間を設定する
メッセージが何らかの原因で送信できなかった場合、
再送信する時間間隔を設定する事ができます。
設定は、Postfixの設定ファイル「main.cf」で行います。
デフォルトでは、60秒となっていますが、
transport_retry_timeを指定することで任意の間隔で
再送信することが出来ます。
下記例では、再送信時間を180秒に設定しています。
# vi /etc/postfix/main.cf
transport_retry_time = 180s
設定を保存終了後、設定ファイルの再読込が必要になります。
Postfixでメールサイズの制限を設定する
メールサイズの制限を設定するには、
Postfixの設定フィアル「main.cf」を編集します。
デフォルトでは、10240000までのサイズ制限となっていますが、
message_size_limit設定を追加することで、
任意のサイズに変更することができます。
下記例では、9.5MBに制限をしています。
# vi /etc/postfix/main.cf
message_size_limit = 9500000 ←追加します。
設定を保存終了後、設定ファイルの再読込が必要になります。
Apacheのログを一括でホスト名表示する(logresolve)
Apacheのアクセスログは、デフォルトの設定のままだと
接続クライアントのIPアドレスを記録します。
Apacheの設定ファイル(httpd.confまたは、httpd-default.conf)の
HostnameLookupsを「On」にすることで接続クライアントを
ホスト名で記録するように変更ができますが、
パフォーマンス低下を招いてしまいます。
運用中のパフォーマンス低下を防ぐために、
logresolveコマンドを使用してIPアドレスで記録したログファイルを、
一括でホスト名に変換します。
下記例では、IPアドレスで記録されたaccess_log_20170705ファイルを
ホスト名変換してresolve_logファイルに出力します。
# logresolve < access_log_20170705 > resolve_log
また、「-s」を指定して実行することで、logresolveコマンドの実行結果の
統計をファイル出力することも可能です。
例えば、名前解決できたIPアドレスやホスト名、
または名前解決できなかったIPアドレスなどが出力されます。
下記例では、toukeiファイルに統計データを出力しています。
# logresolve -s toukei < access_log_20170705 > resolve_log
統計データは下記のように出力されます。
# cat toukei
logresolve Statistics:
Entries: 131
With name : 0
Resolves : 75
- No reverse : 16
Cache hits : 56
Cache size : 75
アクセスログが大きいと、処理に時間が掛かります。
実行する際は、負荷が少ない時間帯を選ぶなどの配慮が必要になります。
Apacheのアクセスログで接続クライアントのホスト名を記録する
Apacheのアクセスログはデフォルトの設定では、
接続クライアントをIPアドレスで記録します。
接続クライアントをホスト名でアクセスログに記録するには、
httpd.confファイルか、httpd-default.confファイルの
「HostnameLookups」を編集します。
HostnameLookupsはデフォルトでは「Off」になっているため、
IPアドレスからホスト名への逆引きが実行されません。
これを「On」に変更することで、ホスト名でログに記録されるようになります。
# HostnameLookups: Log the names of clients or just their IP addresses
# e.g., www.apache.org (on) or 204.62.129.132 (off).
# The default is off because it'd be overall better for the net if people
# had to knowingly turn this feature on, since enabling it means that
# each client request will result in AT LEAST one lookup request to the
# nameserver.
#
HostnameLookups Off ←「On」に変更します。
ただし、ログを出力する度に、逆引きが実行されるので、
パフォーマンスが低下してしまいます。
そこで、サーバー負荷が低い時間帯などにlogresolveコマンドを
使用して一括でホスト名変換する方法もあります。
設定後は、変更内容を反映させる為に、
Apacheの再起動または、設定ファイルの再読み込み処理が必要になります。
Apacheのカスタムログを設定する
<IfModule log_config_module>〜</IfModule>ディレクティブを編集します。
LogFormatでは、ログの出力形式を指定できます。
デフォルトで「httpd.conf」ファイルに記述されているログフォーマットは、
「common」と「combined」の2つになります。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
上記の出力形式がデフォルトになり、不要なものがあれば削除し、
必要なものがあれば追加してカスタマイズします。
例えば、サーバーのプロセスIDを出力させたい場合は、「%P」を、
ポート番号を出力させたい場合は、「%p」を追加します。
設定可能な主な項目は下記の通りです。
これらの項目をダブルクオーテーション(")で囲って指定します。
フォーマットの中でダブルクオーテーションを記述したい場合は、
「¥」でエスケープして記述します。
| %a | アクセス元のIPアドレス |
| %A | サーバー(Apache)のIPアドレス |
| %B | 送信されたバイト数(ヘッダーは含まず) |
| %b | 送信されたバイト数(ヘッダーは含まず)。0バイトの時は「-」 |
| %f | リクエストされたファイル名 |
| %h | リモートホスト名 |
| %H | リクエストのプロトコル名 |
| %l | クライアントの識別子 |
| %m | リクエストのメソッド名 |
| %q | リクエストに含まれるクエリー文字列。空白以外は「?」が付く。 |
| %r | リクエストの最初の行の値 |
| %s | レスポンスステータス |
| %S | 最後のレスポンスのステータス |
| %t | 時刻 |
| %T | 処理にかかった時間 |
| %u | 認証ユーザー名 |
| %U | リクエストのURLパス |
| %v | リクエストに対するバーチャルホスト名 |
| %V | UseCanonicalNameによるサーバ名 |
| %X | 接続ステータス |
| %{クッキー名}C | リクエストに含まれるクッキーの値 |
| %{環境変数名}e | 環境変数名の値 |
| %{ヘッダー名}i | リクエストに含まれるヘッダー名の値 |
| %{ヘッダー名}o | レスポンスに含まれるヘッダー名の値 |
| %{メモ}n | モジュールから渡されるメモの値 |
| %{フォーマット}t | フォーマットされた時刻 |
上記項目内で{}で囲んで記述されている項目があります。
例えば、「%{クッキー名}C」は、ヘッダーの中からクッキー名に
指定した値だけを出力します。
デフォルトで有効になっているアクセスログは、「common」になります。
これを「combined」に変更するには、httpd.confファイルの
「CustomLog "logs/access_log" common」の行頭に「#」を挿入して
コメントアウトし、「CustomLog "logs/access_log" combined」の
行頭にある「#」を削除します。
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a
# container, they will be logged here. Contrariwise, if you *do*
# define per-
# logged therein and *not* in this file.
#
#CustomLog "logs/access_log" common ←行頭に「#」を挿入します。
#
# If you prefer a logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
CustomLog "logs/access_log" combined ←行頭の「#」を削除します。
設定後は、変更内容を反映させる為に、
Apacheの再起動または、設定ファイルの再読み込み処理が必要になります。
Apacheで接続クライアント数を設定する
Apacheに同時接続するクライアント数を設定するには、
httpd.confファイル、またはhttpd-mpm.confファイルのMaxClientsを編集します。
MaxClientsの設定は、<IfModule mpm_prefork_module>〜</IfModule>、
または、<IfModule mpm_worker_module>〜</IfModule>の2箇所あります。
これは、使用しているApacheがどのMPMを採用しているかによって
設定箇所が変わります。
Workerはマルチスレッドとマルチプロセスのハイブリッド型になり、
Preforkよりも少ないサーバーリソースで多くのレスポンスに
対応することができるのが特徴です。
下記の環境では、Server MPMがPreforkなので、
<IfModule mpm_prefork_module>〜</IfModule>ディレクティブの
MaxClientsを設定します。
※CentOS環境ではデフォルトでPreforkを使用しています。
# /usr/local/apache2/bin/apachectl -V
Server version: Apache/2.2.31 (Unix)
Server built: Sep 28 2015 11:49:05
Server's Module Magic Number: 20051115:40
Server loaded: APR 1.5.2, APR-Util 1.5.4
Compiled using: APR 1.5.2, APR-Util 1.5.4
Architecture: 64-bit
Server MPM: Prefork
例では、httpd-mpm.confファイルを編集します。
# vi /usr/local/apache2/conf/extra/httpd-mpm.conf
Server MPMによって、「prefork MPM」か「worker MPM」の
MaxClientsの値を編集します。
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
設定後は、変更内容を反映させる為に、
Apacheの再起動または、設定ファイルの再読み込み処理が必要になります。
Apacheのポート番号を変更する
Webサーバーは、一般的にTCP80番ポートを使用して
クライアントからのアクセス受け付け、Webサイトを表示します。
これらのポート番号は、世界的な規格で定められていますが、
何らかの理由で80番から変更したい場合は、
Apacheの設定ファイル(httpd.conf)を編集することで可能です。
# vi /usr/local/apache2/conf/httpd.conf
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80
Listenに指定する番号を変更することで、ポート番号を変更します。
Listen 8080
上記の例では、Apacheのポート番号を「8080」に変更しています。
また、インターフェースごとにポート番号を設定したい場合には、
Listen 12.34.56.78:80のように「IPアドレス:ポート番号」と指定します。
設定後は、変更内容を反映させる為に、
Apacheの再起動または、設定ファイルの再読み込み処理が必要になります。
KeepAliveを利用してApacheのパフォーマンスを向上させる
KeepAliveは、クライアントからのアクセスをキープして、
以後のアクセスはそのコネクションを利用して送信することで
パフォーマンスを向上させる機能です。
KeepAlive設定は、Apacheの設定ファイルhttpd.confファイルや、
httpd-default.confファイルで行います。
※Apacheのバージョンによって異なります。
下記実行例は、Apache2.2のものです。
# vi /usr/local/apache2/conf/extra/httpd-default.conf
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On
↑KeepAliveを利用するには、「On」、利用しない場合は「Off」にします。
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100
↑MaxKeepAliveRequestsは、コネクションあたりで
保持するリクエストの上限を設定します。
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 5
↑KeepAliveTimeoutは、次のリクエストまでのコネクション保持時間です。
単位は秒になります。
KeepAliveTimeoutは、値が小さいとすぐにコネクションが切れてしまい、
逆に大きすぎると無駄なコネクションが確立されたままになり、
サーバーリソースの浪費につながります。
設定後は、変更内容を反映させる為に、
Apacheの再起動または、設定ファイルの再読み込み処理が必要になります。
接続中のプロセスが終了するのを待ってApacheを停止する
Apacheの停止には、/etc/init.d/httpd stopを使用します。
しかし、stopを実行すると接続中のhttpdプロセスは強制的に終了してしまいます。
つまり、接続してきていたクライアントとの通信が強制的に切断してしまうのです。
そこで、接続中のプロセスが終了するまで待って、
停止する機能がApacheには実装されています。
クライアントとの通信が終了するまで待って再起動するには、
下記のように「graceful-stop」を指定します。
graceful-stopは、/etc/init.d/httpdスクリプトでは実行できず、
スクリプトの元となるapachectlファイルを実行する必要があります。
# /usr/local/apache2/bin/apachectl graceful-stop
graceful-stopを実行すると、利用されていないListen状態のプロセスが終了し、
使用中のプロセスは停止しない状態になります。
すべてのクライアントとの通信が終了するまで停止できませんので、
通信状況によっては、かなり待たなければならない場合があります。
しかし、通信接続保持を優先させる場合には効果的な機能となります。
接続中のプロセスが終了するのを待ってApacheを再起動する
Apacheの再起動には、/etc/init.d/httpd restartを使用します。
しかし、これを実行すると接続中のhttpdプロセスは強制的に終了してしまいます。
つまり、接続してきていたクライアントとの通信が強制的に切断してしまうのです。
そこで、接続中のプロセスが終了するまで待って、
再起動する機能がApacheには実装されています。
クライアントとの通信が終了するまで待って再起動するには、
下記のように「graceful」を指定します。
# /etc/init.d/httpd graceful
gracefulを実行すると、すべてのクライアントとの通信が終了するまで再起動できません。
通信状況によっては、かなり待たなければならない場合があります。
しかし、通信接続保持を有線させる場合には効果的な機能となります。
CentOS7で使用するsystemdでは、gracefulの代わりにreloadを使用します。
# systemctl reload httpd
proFTPDでアクセス制限設定を行う
proFTPDでアクセス制限設定を行うには、proftpd.confファイルを編集します。
※proFTPDは比較的簡単にアクセス制限設定が行なえます。
■ユーザーのホームディレクトリのみをアクセス可能にする
# vi /usr/local/proftpd/etc/proftpd.conf
User nobody
Group nogroup
DefaultRoot ~ ←この行を追加します。
追加後、「:wq」で保存終了し、proFTPDを再起動します。
■特定のディレクトリ(例では/home/test)のみアクセスを許可する
# vi /usr/local/proftpd/etc/proftpd.conf
User nobody
Group nogroup
DefaultRoot /home/test ←この行を追加します。
追加後、「:wq」で保存終了し、proFTPDを再起動します。
■特定のグループのみ特定のディレクトリにアクセスを許可する
例では、pakiraグループに属するユーザーのみ、/home/testディレクトリに
アクセスできるように設定します。
# vi /usr/local/proftpd/etc/proftpd.conf
User nobody
Group nogroup
DefaultRoot /home/test pakira ←この行を追加します。
追加後、「:wq」で保存終了し、proFTPDを再起動します。
MySQLで指定したカラム名を持つテーブルを検索する
MySQLで特定のカラム名を持つテーブルがわからない場合、
下記SQLを発行することで検索が行なえます。
MySQLにログイン後、下記SQLを実行します。
select table_name, column_name from information_schema.columns where column_name = '検索したいカラム名';
例)site_urlというカラムを持つテーブルを検索します。
mysql> select table_name, column_name from information_schema.columns where column_name = 'site_url';
+----------------+-------------+
| table_name | column_name |
+----------------+-------------+
| gl_pingservice | site_url |
+----------------+-------------+
1 row in set (0.21 sec)
gl_pingserviceテーブルにsite_urlが存在していることが分かります。
Sambaのバージョンを確認するコマンド|現場で使う3つの手順
脆弱性の対応や、Windows Update後の接続トラブルなど、ファイルサーバー(Samba)のバージョン確認は現場で頻繁に発生するタスクです。
この記事では、Linux(Samba)のバージョンを確認する3つの方法を解説します。環境や目的に合わせて、一番やりやすい方法を選んでみてください。
方法1:smbdコマンドで確認する(一番おすすめ)
Sambaの本体プログラムであるsmbd コマンドに -V(大文字のブイ)オプションを付けて実行するのが、最も早くてオーソドックスな方法です。# smbd -V Version 4.10.16 または # samba --version Version 4.10.16
※Samba 3系と4系では設定ファイルの書き方やActive Directory対応などの機能が大きく異なるため、まずはメジャーバージョン(最初の数字)をしっかり確認しましょう。
「command not found」が表示される場合
# smbd -V -bash: smbd: command not found
# dnf install samba または # yum install samba
which smbd でパスが通っているか確認してください。Postfixのバージョンを確認するコマンド|現場で使う4つの手順
この記事では、Linux(Postfix)のバージョンを確認する方法を、目的別に分かりやすく解説します。環境や状況に合わせて、一番やりやすい方法を選んでみてください。
まずPostfixがインストールされているか確認する
バージョンを調べる前に、そもそも自分の環境にPostfixがインストールされているかを確認しましょう。Red Hat系Linux(RHEL、AlmaLinux、Rocky Linuxなど)では以下のコマンドで確認できます。
$ rpm -qa | grep postfix postfix-3.5.9-19.el9.x86_64
which postfix コマンドでも実行ファイルの場所から確認できます。$ which postfix /usr/sbin/postfix
MySQLでユーザー確認をする
MySQLに登録されているユーザーを確認するには、下記手順を実施します。
1.MySQLにログインします。
# /usr/local/mysql/bin/mysql -u root -p
Enter password: ←MySQLのrootパスワードを入力します。
2.mysqlに切り替えます。
mysql> use mysql;
3.MySQLに登録されているユーザーを一覧表示します。
mysql> select Host, User, Password from mysql.user;
+-----------+--------+-------------------------------------------+
| Host | User | Password
+-----------+--------+-------------------------------------------+
| localhost | root | *671A31C9A6ECF182131495AC94BEB4296DCA344B
| % | nobody | *2380B647E90935DC048253A6481ABA440F292BB5
+-----------+--------+-------------------------------------------+
2 rows in set (0.03 sec)
※パスワードは暗号化されています。
4.権限を表示します。
例ではnobodyユーザーの権限を表示しています。
mysql> SHOW GRANTS for 'nobody'@'%';
+-----------------------------------------------------------------
| Grants for nobody@%
+-----------------------------------------------------------------
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, FILE, INDEX,
+-----------------------------------------------------------------
1 row in set (0.00 sec)
※結果は長いので省略しています。
5.MySQLを抜けます。
mysql> quit
Bye
CentOS7のホスト名設定(nmcliコマンド)
CentOS6までは、ホスト名の設定は「/etc/sysconfig/network」ファイルで
管理していましたが、CentOS7では、「/etc/hostname」ファイルで管理します。
ホスト名を変更するには、、「/etc/hostname」ファイルを直接編集するか、
または、nmcliコマンドでもホスト名設定が可能です。
現在設定されているホスト名を確認するには下記コマンドを実行します。
[root@Tiger ~]# nmcli general hostname
Tiger.linuxmaster.jp
上記の例ではホスト名に「Tiger.linuxmaster.jp」が設定されていることが確認できます。
ホスト名を「Leo.linuxmaster.jp」に変更します。
[root@Tiger ~]# nmcli general hostname Leo.linuxmaster.jp
変更後のホスト名を確認します。
[root@Tiger ~]# hostname
Leo.linuxmaster.jp
「/etc/hostname」ファイルの内容も確認します。
[root@Tiger ~]# cat /etc/hostname
Leo.linuxmaster.jp
CentOS7のネットワーク管理
CentOS7のネットワーク管理はNetworkManagerを利用して行います。
CentOS6系では、Network Administration Toolに含まれる
system-config-networkを使用した管理、管理ファイルを直接編集する
運用が一般的でしたが、CentOS7では、NetworkManagerを使用した
管理が推奨されています。
従来のNetworkManagerは、すべてのネットワーク機能を制御できなかった為、
直接ファイルを編集し、サービスの起動や停止を行っていましたが、
CentOS7のNetworkManagerでは、ネットワーク関連の操作が大幅に強化され、
設定ファイルを直接編集しなくても、コマンドラインやGUIツールで設定ファイルを
生成することが可能になっています。
また、NIC(Network Interface Card)に付与されるインタフェース名の命名管理も
これまでのCentOS6系とは全く異なる仕様となっています。
CentOS7では、ネットワークインタフェース名に永続的に変わらない名前が付与がされます。
この永続的な命名をConsistent Network Device Namingと言い、一般的なx86サーバーに
搭載されているオンボードのNICでは、eno1、eno2、拡張カードスロットに装着するNICでは
ens1、ens2、またはens7f0、ens7f1などの名前が付与されます。
■nmcliコマンド
nmcli(Network Manager Command Line Interface)コマンドは、
CentOS7のネットワーク設定を行なうNetworkManager基本コマンドになります。
nmcliコマンドには、下記パラメーターが用意されています。
・connection:接続の設定
・device:デバイス管理
・general:ホスト名設定、ロギング、権限操作、状態の表示
・networking:コネクティビティのチェック、有効化、無効化管理
・radio:ワイヤレスネットワークの設定有効化、無効化管理
■インタフェースの接続状態確認
[root@Tiger ~]# nmcli connection
名前 UUID タイプ デバイス
eno1 4a181dd8-0bac-43c5-8d4f-9e89c31e14b1 802-3-ethernet eno1
上記の例では、NICのインタフェース名がeno1として割当られています。
デバイスの項目にインタフェース名が表示されている場合は
ネットワークに接続されていることを表します。
■インタフェースの接続と切断
「nmcli connection」でupやdownを指定すると、
インタフェースの接続、切断を制御できます。
下記例ではインタフェースeno1を切断しています。
[root@Tiger ~]# nmcli connection down eno1
[root@Tiger ~]# nmcli connection
名前 UUID タイプ デバイス
eno1 4a181dd8-0bac-43c5-8d4f-9e89c31e14b1 802-3-ethernet --
デバイスの項目gが「--」になり、切断されていることが分かります。
再度接続するには、下記コマンドを実行します。
[root@Tiger ~]# nmcli connection up eno1
■デバイス名とデバイスの状態確認
インタフェースのデバイス名とその状態を確認するには「device」を指定します。
[root@Tiger ~]# nmcli device
デバイス タイプ 状態 接続
eno1 ethernet 接続済み eno1
lo loopback 管理無し --
物理NICが1ポートあるサーバーで、デバイス名がeno1と割り当てられています。
またループバックデバイスとしてloが認識されています。状態と接続からeno1が
ネットワークに接続されていることが分かります。
■詳細なデバイス情報を表示
デイバイスのMACアドレス、IPアドレス、MTUなどの詳細を確認するには、
「nmcli device」に「show」を付けて実行します。
[root@Tiger ~]# nmcli device show
GENERAL.デバイス: eno1
GENERAL.タイプ: ethernet
GENERAL.ハードウェアアドレス: 00:0C:29:37:80:B6
GENERAL.MTU: 1500
GENERAL.状態: 100 (接続済み)
GENERAL.接続: eno1
GENERAL.CON パス: /org/freedesktop/NetworkManager/ActiveConnection/0
WIRED-PROPERTIES.キャリア: オン
IP4.アドレス[1]: 192.168.0.36/24
IP4.ゲートウェイ: 192.168.0.1
IP4.DNS[1]: 192.168.0.1
IP6.アドレス[1]: fe80::20c:29ff:fe37:80b6/64
IP6.ゲートウェイ:
GENERAL.デバイス: lo
GENERAL.タイプ: loopback
GENERAL.ハードウェアアドレス: 00:00:00:00:00:00
GENERAL.MTU: 65536
GENERAL.状態: 10 (管理無し)
GENERAL.接続: --
GENERAL.CON パス: --
IP4.アドレス[1]: 127.0.0.1/8
IP4.ゲートウェイ:
IP6.アドレス[1]: ::1/128
IP6.ゲートウェイ:
「nmcli device show」だけでは複数のNICが存在した場合、
そのすべての状態を表示してしまいます。
しかし、インタフェース名を指定することで出力を絞ることができます。
[root@Tiger ~]# nmcli device show eno1
GENERAL.デバイス: eno1
GENERAL.タイプ: ethernet
GENERAL.ハードウェアアドレス: 00:0C:29:37:80:B6
GENERAL.MTU: 1500
GENERAL.状態: 100 (接続済み)
GENERAL.接続: eno1
GENERAL.CON パス: /org/freedesktop/NetworkManager/ActiveConnection/0
WIRED-PROPERTIES.キャリア: オン
IP4.アドレス[1]: 192.168.0.36/24
IP4.ゲートウェイ: 192.168.0.1
IP4.DNS[1]: 192.168.0.1
IP6.アドレス[1]: fe80::20c:29ff:fe37:80b6/64
IP6.ゲートウェイ:
■接続情報の変更
・IPアドレス・ゲートウェイの変更
インタフェースに割り当てたIPアドレスやゲートウェイを変更するには、
「nmcli connection」に「modify」を指定します。
下記例では、IPアドレス192.168.0.36/24、ゲートウェイが192.168.0.1が
割り当てられている環境で、eno1のIPアドレスを192.168.0.20/24、
ゲートウェイを192.168.0.254に変更しています。
[root@Tiger ~]# nmcli connection modify eno1 ipv4.addresses "192.168.0.20/24 192.168.0.254"
[root@Tiger ~]# nmcli connection down eno1 && nmcli connection up eno1
「nmcli connection down eno1」が従来のifdown、
「nmcli connection up eno1」がifupに相当し、eno1を再起動しています。
・DNS・静的ルーティング変更
DNSサーバーと静的ルーティングを変更するには「ipv4.dns」、「ipv4.routes」を指定します。
下記の例では、eno1のDNSサーバーのIPアドレスを「8.8.8.8」、「4.4.4.4」を指定しています。
[root@Tiger ~]# nmcli connection modify eno1 ipv4.dns "8.8.8.8 4.4.4.4"
[root@Tiger ~]# nmcli connection down eno1 && nmcli connection up eno1
下記の例では、静的ルーティングとして、「10.0.0.0/24」のネットワークアドレスで
ルーターのIPアドレス「10.0.0.1」を指定しています。
[root@Tiger ~]# nmcli connection modify eno1 ipv4.routes "10.0.0.0/24 10.0.0.1"
[root@Tiger ~]# nmcli connection down eno1 && nmcli connection up eno1
CentOS7での日付、時刻、タイムゾーン設定
CentOS7では、日付、時刻の設定コマンドとして従来のdateコマンド、hwclockコマンドが
存在していますが、新たにsystemdで制御されるtimedatectlコマンドが用意されています。
■日付、時間、タイムゾーンの表示
timedatectlコマンドをオプションなしで実行すると、
日付、時間、タイムゾーン、NTPの同期設定の有無などを表示できます。
-----------------------------------------------------------------
[root@Tiger system]# timedatectl
Local time: 木 2016-01-14 13:51:12 JST
Universal time: 木 2016-01-14 04:51:12 UTC
RTC time: 木 2016-01-14 04:51:11
Timezone: Asia/Tokyo (JST, +0900)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
-----------------------------------------------------------------
■日付の設定
timedatectlで日付設定を行う場合は、オプションに「set-time」を付けて実行します。
下記の例では、2016年1月15日に設定しています。
-----------------------------------------------------------------
[root@Tiger system]# timedatectl set-time 2016-01-15
[root@Tiger system]# timedatectl
Local time: 金 2016-01-15 00:00:03 JST
Universal time: 木 2016-01-14 15:00:03 UTC
RTC time: 木 2016-01-14 15:00:04
Timezone: Asia/Tokyo (JST, +0900)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
-----------------------------------------------------------------
■時刻の設定
timedatectlで時刻設定を行う場合も、オプションに「set-time」を付けて実行します。
下記の例では、15時54分00秒に設定しています。
-----------------------------------------------------------------
[root@Tiger system]# timedatectl set-time 15:54:00
[root@Tiger system]# timedatectl
Local time: 金 2016-01-15 15:54:00 JST
Universal time: 金 2016-01-15 06:54:00 UTC
RTC time: 金 2016-01-15 06:54:00
Timezone: Asia/Tokyo (JST, +0900)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
-----------------------------------------------------------------
■タイムゾーンの表示
timedatectlでタイムゾーンを表示するには、オプション「list-timesones」を付けて実行します。
-----------------------------------------------------------------
[root@Tiger system]# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
〜中略〜
Asia/Tashkent
Asia/Tbilisi
Asia/Tehran
Asia/Thimphu
Asia/Tokyo
-----------------------------------------------------------------
■タイムゾーンの変更
タイムゾーンを変更するには、timedatectlコマンドにオプション「set-timesone」を付けて実行します。
-----------------------------------------------------------------
[root@Tiger system]# timedatectl set-timezone Asia/Tokyo
-----------------------------------------------------------------
CentOS7でのロケール、キーボード設定
CentOS7でロケールとキーボードの設定変更するには、localectlコマンドを使用します。
<<ロケール設定>>
■ロケール状態の確認
現在のロケールの状態を確認します。
-----------------------------------------------------------------
[root@Tiger system]# localectl
System Locale: LANG=ja_JP.UTF-8
VC Keymap: jp
X11 Layout: jp
-----------------------------------------------------------------
■ロケールを日本語に設定
-----------------------------------------------------------------
[root@Tiger system]# localectl set-locale LANG=ja_JP.utf8
[root@Tiger system]# localectl
Syststrongm Locale: LANstrong=ja_JP.utf8
VC Keymap: jp
X11 Layout: jp
-----------------------------------------------------------------
■ロケールの設定ファイル
ロケールの設定ファイルは、「/etc/locale.conf」になります。
-----------------------------------------------------------------
[root@Tiger system]# ls -l /etc/locale.conf
-rw-r--r-- 1 root root 16 1月 14 13:28 /etc/locale.conf
[root@Tiger system]# cat /etc/locale.conf
LANG=ja_JP.utf8
-----------------------------------------------------------------
ja_JP.utf8に設定ファイルが変更されています。
<<キーボード設定>>
■キーマップの表示
利用可能なキーマップを表示します。
-----------------------------------------------------------------
[root@Tiger system]# localectl list-keymaps
ANSI-dvorak
amiga-de
amiga-us
applkey
〜中略〜
it-us
it2
jp
jp-OADG109A
jp-dvorak
jp-kana86
jp106
-----------------------------------------------------------------
■キーボードの設定
日本語のキーマップはjp106になるので、キーボード設定を日本語106キーボードに設定します。
-----------------------------------------------------------------
[root@Tiger system]# localectl set-keymap jp106
[root@Tiger system]# localectl
System Locale: LANG=ja_JP.utf8
VC Keymap: jp106
X11 Layout: jp
X11 Model: jp106
X11 Options: terminate:ctrl_alt_bksp
-----------------------------------------------------------------
■キーマップ設定ファイル
キーマップの設定ファイルは、「etc/vconsole.conf」になります。
-----------------------------------------------------------------
[root@Tiger system]# cat /etc/vconsole.conf
KEYMAP=jp106
FONT=latarcyrheb-sun16
-----------------------------------------------------------------
CentOS7のサービス・デーモンの起動
具体的なコマンドとしては、systemctlを利用して起動、停止、状態確認などを行います。
これらはユニットと呼ばれる単位で管理を行い、下記の幾つかのタイプが存在ます。
| start | httpdを起動します。 |
| stop | httpdを停止します。 |
| service | 各種デーモンやサービスを起動 |
| target | 起動プロセスやサービスなどの複数のユニットをグループにしてまとめたもの |
| mount | ファイルシステムのマウントポイント制御 |
| device | ディスクデバイス |
| socket | FIFO、UNIXドメインソケット、ポート番号などに関する通信資源 |
CentOS7に登録されているサービスのOS起動時の自動起動の有効化、
無効化の設定を確認するには、
ユニット「sevice」を指定し、更に「list-unit-files」を指定します。
-----------------------------------------------------------------
[root@Tiger ~]# systemctl -t service list-unit-files
UNIT FILE STATE
abrt-ccpp.service enabled
abrt-oops.service enabled
abrt-pstoreoops.service disabled
abrt-vmcore.service enabled
abrt-xorg.service disabled
abrtd.service enabled
arp-ethers.service disabled
以下省略
-----------------------------------------------------------------
■サービスの登録状況確認
サービスの設定例として、WEBサービスの起動、停止、状態確認、
OS起動時の自動起動の有効化、無効化の設定を紹介します。
WEBサービスのがsystemdのユニットで
どのような名前で登録されているのかを確認します。
(例ではApacheがインストールされている環境を利用しています。)
-----------------------------------------------------------------
[root@Tiger ~]# systemctl -t service list-unit-files | grep -i httpd
httpd.service enabled
-----------------------------------------------------------------
WEBサーバーのサービスは「httpd.service」になります。
「httpd.serviceの右側に「enabled」と表示されています。
これはOS起動時に「httpd.service」が自動起動する
設定になっている事を意味します。
「disabled」だと自動起動しない設定という意味になります。
■サービスの状態確認
サービスの状態確認は、systemctlコマンドに「status」を指定します。
systemctlコマンドを利用する場合、サービス名の「.service 」は省略できます。
-----------------------------------------------------------------
[root@Tiger ~]# systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: active (running) since 水 2016-01-13 15:40:13 JST; 9min ago
Process: 1145 ExecStart=/usr/local/apache2/bin/apachectl start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/httpd.service
tq2114 /usr/local/apache2/bin/httpd -k start
tq2115 /usr/local/apache2/bin/rotatelogs /var/log/httpd/192.168.0.36_error_log_%Y%m%d ...
tq2116 /usr/local/apache2/bin/rotatelogs /var/log/httpd/192.168.0.36_access_log_%Y%m%d...
tq2117 /usr/local/apache2/bin/httpd -k start
tq2118 /usr/local/apache2/bin/httpd -k start
tq2119 /usr/local/apache2/bin/httpd -k start
tq2120 /usr/local/apache2/bin/httpd -k start
mq2121 /usr/local/apache2/bin/httpd -k start
1月 13 15:40:13 Tiger systemd[1]: Started The Apache HTTP Server.
-----------------------------------------------------------------
コマンドの実行結果「Active: active (running) 」となっており、
プロセスも正常起動していることから、Apacheサービスが正常に起動していることが分かります。
■サービスの起動と停止
Apacheを停止してみます。
停止は「systemctl stop httpd」で行えます。
-----------------------------------------------------------------
[root@Tiger ~]# systemctl stop httpd
[root@Tiger ~]# systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: inactive (dead) since 水 2016-01-13 15:52:20 JST; 4s ago
Process: 2384 ExecStop=/usr/local/apache2/bin/apachectl stop (code=exited, status=0/SUCCESS)
Process: 1145 ExecStart=/usr/local/apache2/bin/apachectl start (code=exited, status=0/SUCCESS)
1月 13 15:40:13 Tiger systemd[1]: Started The Apache HTTP Server.
1月 13 15:52:20 Tiger systemd[1]: Stopping The Apache HTTP Server...
1月 13 15:52:20 Tiger systemd[1]: Stopped The Apache HTTP Server.
-----------------------------------------------------------------
コマンドの実行結果が「Active: inactive (dead)」になっていることから
Apacheが停止していることが分かります。
因みに、起動は「systemctl start httpd」で行えます。
■起動時の自動実行、停止設定
CentOS7が起動した時に、Apacheサービスが自動的に起動するように設定します。
-----------------------------------------------------------------
[root@Tiger ~]# systemctl enable httpd
ln -s '/usr/lib/systemd/system/httpd.service'
'/etc/systemd/system/multi-user.target.wants/httpd.service'
-----------------------------------------------------------------
自動起動を無効にする場合は、下記コマンドになります。
-----------------------------------------------------------------
[root@Tiger ~]# systemctl disable httpd
rm '/etc/systemd/system/multi-user.target.wants/httpd.service'
-----------------------------------------------------------------
「enable」を「disable」に変更します。
CentOS7が起動した際、Apacheサービスが自動起動するように 設定されているか確認します。
-----------------------------------------------------------------
[root@Tiger ~]# systemctl -t service is-enabled httpd
enabled
-----------------------------------------------------------------
| 機能 | CentOS6 | CentOS7 |
| サービスの開始 | # service httpd start | # systemctl start httpd |
| サービスの停止 | # service httpd stop | # systemctl stop httpd |
| サービスの再起動 | # service httpd restart | # systemctl restart httpd |
| サービスの設定ファイル再読み込み | # service httpd reload | # systemctl reload httpd |
| サービスの状態確認 | # service httpd status | # systemctl status httpd |
| サービスが既に稼働している場合、サービスを再起動する | # service httpd condrestart | # systemctl condrestart httpd |
| 次回OS起動時に自動的にサービスを起動する | # chkconfig httpd on | # systemctl enable httpd |
| 次回OS起動時に自動的にサービスを起動しない | # chkconfig httpd off | # systemctl disable httpd |
| ランレベルごとに全サービスが有効・無効になっているかを表示する | # chkconfig --list | systemctl -t service list-unit-files または # ls /etc/systemd/system/*.wants/ |
| ランレベルごとに指定したサービスが有効・無効になっているかを表示する | # chkconfig --list httpd | # ls /etc/systemd/system/*.wants/httpd.service |
Apacheのタイムアウト(Timeout)を設定・確認する方法【2.4対応版】
「Timeoutの秒数はどこで設定するの?」
「今の設定値を確認したい」
・・・Webサーバーの構築や障害対応の現場では、こうした確認が日常的に発生します。
この記事では、Apacheのタイムアウト(Timeout)設定を確認・変更する全手順を体系的に解説します。現代の主流であるApache 2.4系(RHEL 9 / AlmaLinux 9など)に完全対応した、今日から使える内容です。
そもそもApacheのTimeout(タイムアウト)とは
Apacheのタイムアウトとは、クライアント(ブラウザなど)とサーバー間でパケットの送受信が行われないまま、通信を強制的に切断するまでの待機時間(秒数)のことです。リクエストのパケットが途絶え、指定した時間が過ぎるとコネクションが自動的に切断されます。これにより、応答のない無駄な接続がサーバーのリソースを圧迫するのを防いでいます。
Timeoutが適用される3つの場面
Apache 2.4のTimeout ディレクティブは、以下の3つの通信フェーズすべてに共通して適用されます。・接続(Connect):クライアントからの接続要求を待つ時間
・受信(Receive):クライアントからリクエストデータが届くまでの待機時間
・送信(Send):クライアントへレスポンスを送信できるまでの待機時間
「受信だけ延ばしたい」「送信だけ変えたい」という場合は、後述する
ProxyTimeout や各モジュール固有のディレクティブとの使い分けが必要になります。Apacheのエラーログを設定する
Apacheでエラーログを設定するには、httpd.confファイルを編集します。
インストール方法にもよりますが、httpd.confファイルは、
/etc/httpd/conf/ディレクトリか/usr/local/apache2/conf/ディレクトリなどに格納されています。
詳しくは、httpd.confファイルのServerRootに設定されているディレクトリを確認してください。
[root@Tiger ~]# vi /usr/local/apache2/conf/httpd.conf
#
# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a
# container, error messages relating to that virtual host will be
# logged here. If you *do* define an error logfile for a
# container, that host's errors will be logged there and not here.
#
ErrorLog "logs/error_log"
#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn
上の例では、ErrorLog "logs/error_log"がエラーログ設定箇所になり、
logsディレクトリのerror_logファイルに出力することが設定されています。
logsディレクトリは、/etc/httpd/logsか、/usr/local/apache2/logsディレクトリなどになります。
LogLevel warnでは、ログの出力レベルが設定されており、
デフォルトでは、warn以上が記録されます。
コメントにあるdebug, info、notice、warn、error、crit、alert、emergを指定出来ます。
変更後は、設定を反映させるためApacheの再起動を行います。
[root@Tiger ~]# /etc/init.d/httpd restart
Apacheの設定にインデックスファイルを追加する
URLを指定してホームページにアクセスする際、ディレクトリ名を指定するだけで
ホームページのファイルを表示させるには、インデックスファイルの設定を行います。
つまり、「https://www.linuxmaster.jp/」とURLを指定すると、
「https://www.linuxmaster.jp/index.html」が表示される設定です。
この設定を行うには、Apacheの設定ファイル「httpd.conf」ファイル内にある
「DirectoryIndex」に設定を行います。
インストール方法にもよりますが、httpd.confファイルは、
/etc/httpd/conf/ディレクトリか/usr/local/apache2/conf/ディレクトリなどに格納されています。
詳しくは、httpd.confファイルのServerRootに設定されているディレクトリを確認してください。
DirectoryIndexは、左から順番にサイン称するファイルを指定します。
デフォルトでは、「index.htm」は設定されていませんので、
index.htmをインデックスファイルに含める場合、明示的にindex.htmの設定が必要になります。
[root@Tiger ~]# vi /usr/local/apache2/conf/httpd.conf
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
DirectoryIndex index.html index.htm ←「index.htm」を追加します。
追加後は、設定を反映させるためApacheの再起動を行います。
[root@Tiger ~]# /etc/init.d/httpd restart
Apacheで採用しているモジュールを確認する
Apacheにはたくさんの豊富な機能がありますが、それは、「モジュール」として提供されています。
モジュールを確認するには、「/etc/init.d/httpd」コマンドに「-M」オプションを指定して実行します。
[root@Tiger ~]# /etc/init.d/httpd -M
Loaded Modules:
core_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
authn_file_module (shared)
authn_dbm_module (shared)
authn_anon_module (shared)
authn_dbd_module (shared)
authn_default_module (shared)
authz_host_module (shared)
authz_groupfile_module (shared)
authz_user_module (shared)
authz_dbm_module (shared)
〜中略〜
actions_module (shared)
speling_module (shared)
userdir_module (shared)
alias_module (shared)
rewrite_module (shared)
Syntax OK
各モジュールの後ろにある(static)と(shared)の意味は下記のとおりです。
(static):固定で組み込まれている静的モジュール
(shared):実行時に読み込まれる動的モジュール
上記モジュールの中で特に有名なのは、 mpm_prefork_moduleです。
このモジュールの名称の先頭にmpmが付いていますが、
これは「Multi Processing Module」を意味しており、クライアントからの処理機能を
モジュール化して、モジュールを取り替えることで、Apacheを最適化する仕組みです。
また、Apacheで採用している静的モジュールだけを一覧表示したい場合は、
「/etc/init.d/httpd」コマンドに「-l」オプションを指定して実行します。
[root@Tiger ~]# /etc/init.d/httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
apachectlを実行しても同じ結果が得られます。
[root@Tiger ~]# /usr/local/apache2/bin/apachectl -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
Apacheの設定ファイル(httpd.conf)の編集誤りを確認する
Apacheの設定ファイル(httpd.conf)の編集を行ったら、
編集内容に誤りがないか確認を行います。
インストール方法にもよりますが、httpd.confファイルは、
/etc/httpd/conf/ディレクトリか/usr/local/apache2/conf/ディレクトリなどに格納されています。
詳しくは、httpd.confファイルのServerRootに設定されているディレクトリを確認してください。
構文誤りをテストするには、/etc/init.d/httpdに「configtest」を指定します。
「Syntax OK」と表示されれば、構文に問題がないことになります。
※apachectlにconfigtestを指定して実行しても同じ結果が得られます。
[root@Tiger ~]# /etc/init.d/httpd configtest
Syntax OK
[root@Tiger ~]# /usr/local/apache2/bin/apachectl configtest
Syntax OK
また、構文に誤りがある場合、下記のように表示されます。
[root@Tiger ~]# /etc/init.d/httpd configtest
Syntax error on line 31 of /usr/local/apache2/conf/httpd.conf:
Invalid command 'dd', perhaps misspelled or defined by a module not included in the server configuration
上記のメッセージでは、「line 31」(31行目)に誤りがあることが指摘されています。
このれいでは、「dd」という文字が余分に入っていることを意味していますので、
これを削除する必要があります。
使用中のプロセスが終了するのを待ってhttpdサービスを停止する
httpdサービスを再起動するには、stopを指定します。
しかし、stopは、クライアントと接続中のhttpdプロセスを停止してしまうため、
クライアントとの通信が強制的に切断されてしまいます。
通信中のクライアントとのhttpdプロセスを停止させないで、
プロセスが終了するのを待ってから停止するには、
「graceful-stop」を指定します。
graceful-stopを実行すると、すべてのクライアントとの通信が終了するまで停止しません。
(通信状況によってはかなり待つ必要があります。)
しかし、クライアントとの通信接続保持を最優先システムでは効果的に使用出来ます。
この停止は、「使用中のプロセスが終了するのを待ってhttpdサービスを再起動する」
と似ていますが、/etc/init.d/httpdを指定して実行出来ません。
graceful-stopを実行するには、元になっている「apachectl」を指定して実行をします。
■使用中のプロセスが終了するのを待ってhttpdサービスを停止する
[root@Tiger ~]# /usr/local/apache2/bin/apachectl graceful-stop
graceful-stopを実行しても「OK」などの表示はされません。
使用中のプロセスが終了するのを待ってhttpdサービスを再起動する
httpdサービスを再起動するには、restartを指定します。
しかし、restartは、クライアントと接続中のhttpdプロセスを停止してしまうため、
クライアントとの通信が強制的に切断されてしまいます。
通信中のクライアントとのhttpdプロセスを停止させないで、
プロセスが終了するのを待ってから再起動するには、
「graceful」を指定します。
gracefulを実行すると、すべてのクライアントとの通信が終了するまで再起動しません。
(通信状況によってはかなり待つ必要があります。)
しかし、クライアントとの通信接続保持を最優先システムでは効果的に使用出来ます。
■使用中のプロセスが終了するのを待ってhttpdサービスを再起動する
[root@Tiger ~]# /etc/init.d/httpd graceful
gracefulを実行しても「OK」などの表示はされません。
httpdサービスを起動・停止する
httpdサービスを起動するには、手動で起動する必要があります。
このデーモンは、/etc/init.d/httpdスクリプト、
または/etc/rc.d/init.d/httpdスクリプトによって管理されています。
httpdスクリプトに引数を渡すことで制御を行います。
■httpdスクリプトの引数
| start | httpdを起動します。 |
| stop | httpdを停止します。 |
| restart | httpdを再起動します。 |
| reload | ファイルを再読み込みします。 |
| condrestart | httpdが起動している時には、再起動します。 |
| status | httpdの状態を表示します。 |
| fullstatus | httpdの詳細情報を表示します。 |
| graceful | httpdのプロセスが終了するのを待ってhttpdを再起動します。 |
| configtest | 設定ファイルの構文誤りをチェックします。 |
■httpdサービスの起動
[root@Tiger ~]# /etc/init.d/httpd start
■httpdサービスの停止
[root@Tiger ~]# /etc/init.d/httpd stop
■httpdサービスの再起動
[root@Tiger ~]# /etc/init.d/httpd restart
■設定ファイルの構文誤りをチェック
[root@Tiger ~]# /etc/init.d/httpd configtest
Syntax OK
■httpdの詳細情報を表示
[root@Tiger ~]# /etc/init.d/httpd fullstatus
Apache Server Status for localhost
Server Version: Apache/2.0.64 (Unix) DAV/2
Server Built: Aug 23 2012 14:36:58
__________________________________________________________________
Current Time: Friday, 12-Jul-2013 16:01:36 JST
Restart Time: Friday, 12-Jul-2013 16:01:35 JST
Parent Server Generation: 2
Server uptime: 1 second
1 requests currently being processed, 4 idle workers
__W__...........................................................
................................................................
................................................................
................................................................
Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process
PID Key:
1640 in state: _ , 1641 in state: _ , 1642 in state: W
1643 in state: _ , 1644 in state: _ ,
__________________________________________________________________
To obtain a full report with current status information you need to use
the ExtendedStatus On directive.
__________________________________________________________________
Apache/2.0.64 (Unix) DAV/2 Server at localhost Port 80
dmidecodeコマンドでLinuxのハードウェアの情報を取得する
dmidecodeコマンドは、Linuxのハードウェアの情報を取得するコマンドです。
例えば、マシンの型番、ベンダー、シリアルなど、様々なハードウェアの情報が得られます。
# dmidecode
# dmidecode 2.11
SMBIOS 2.4 present.
364 structures occupying 16040 bytes.
Table at 0x000E0010.
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: Phoenix Technologies LTD
Version: 6.00
Release Date: 07/02/2012
Address: 0xEA0C0
Runtime Size: 89920 bytes
ROM Size: 64 kB
Characteristics:
ISA is supported
PCI is supported
PC Card (PCMCIA) is supported
PNP is supported
APM is supported
BIOS is upgradeable
BIOS shadowing is allowed
ESCD support is available
Boot from CD is supported
Selectable boot is supported
EDD is supported
Print screen service is supported (int 5h)
8042 keyboard services are supported (int 9h)
Serial services are supported (int 14h)
Printer services are supported (int 17h)
CGA/mono video services are supported (int 10h)
ACPI is supported
Smart battery is supported
BIOS boot specification is supported
Function key-initiated network boot is supported
Targeted content distribution is supported
BIOS Revision: 4.6
Firmware Revision: 0.0
Handle 0x0001, DMI type 1, 27 bytes
System Information
Manufacturer: VMware, Inc.
Product Name: VMware Virtual Platform
Version: None
Serial Number: VMware-56 4d b6 9c ba 29 d8 13-4c c0 d2 5b c7 32 79 44
UUID: 564DB69C-BA29-D813-4CC0-D25BC7327944
Wake-up Type: Power Switch
SKU Number: Not Specified
Family: Not Specified
以下省略
dmidecodeコマンドを実行すると、多くの情報が表示されるので、lessコマンドにパイプするか、
必要な情報のみをgrepコマンドで抽出すると良いでしょう。
■機器のシリアルナンバーを調べる
# dmidecode | grep Serial
■BIOSのバージョン(リリース日)を調べる
# dmidecode | grep Release
dmidecodeコマンドは、「--type」オプションに特定のキーワードを付けて実行することも可能です。
dmidecode --type キーワード
例えば、メモリ情報を表示するには下記のように実行します。
■メモリの情報を抽出する
# dmidecode --type memory
他に使用出来るキーワードは下記のとおりです。
■キーワード
bios
system
baseboard
chassis
processor
memory
connector
slot
キーワード以外にも項目を番号で指定しての実行も可能です。
例えばprocessorはNo.4に対応しているので、以下のコマンドを実行します。
■processorを項目番号で表示する
# dmidecode --type 4
Linuxで一時的に管理者(root)にスイッチする
管理者(root)にスイッチする場合、suコマンドを実行して管理者パスワードを
入力する必要があります。
suコマンド:ユーザーを切り替える
しかし、複数のユーザーがrootを利用する環境だと、パスワード変更の度に
全員に伝えなければなりません。そうなると、第三者にrootパスワードが
漏れる危険性がありますし、運用上とても面倒です。
その為、sudoコマンドを利用して、これらの危険性を防ぐことができます。
sudoコマンドは、root権限を必要とするコマンドを実行する際、
ユーザーパスワードを入力することで、一時的にrootのシェルを
利用してコマンド実行が出来るようになるコマンドです。
また、sudoコマンドには、パスワードキャッシュという仕組みがあり、
一度コマンドを使用して、有効なパスワードを入力すれば
そのユーザーについては、次回以降パスワード入力が
求められなくなります。ただし、これを永久的に許可したのでは
意味が無いので、デフォルトでは5分間だけパスワード入力が不要になります。
sudoコマンドを利用するには、/etc/sudoersファイルの編集が必要になります。
このファイルを編集するには、visudoコマンドを実行します。
visudoは、事前に変数のEDITORに定義されているエディタが起動して
/etc/sudoersファイルの編集が行え、ファイルのロック
(編集中他人が編集できないようにする)や、構文チェックが使用できます。
1.事前準備 /etc/sudoersファイルの編集
[pakira@Tiger ~]$ su - ←root権限になります。
パスワード:
[root@Tiger ~]# visudo ←visudoコマンドで/etc/sudoersファイルを編集します。
編集箇所はCentOS6.3の場合、104~105行目あたりにあります。
## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
%pakira ALL=(ALL) ALL ←sudoコマンドが使用できるようpakiraを追加します。
※行頭のハッシュマーク(#)はコメントアウトを意味し、
システム的にその行は無効になります。
上記の例では、pakiraグループに属するユーザーはsudoコマンドが
利用できるよう設定を行なっています。
特定のユーザーのみに許可したい場合は、「%」を付けずに
ユーザー名のみを記述します。
「%」はグループを意味しています。
また、下記の箇所を編集すると、
コマンド実行時にユーザーパスワードを求められなくなります。
編集箇所はCentOS6.3の場合、107~108行目あたりにあります。
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
%pakira ALL=(ALL) NOPASSWD: ALL
上記のどちらを設定するかは、
運用ルールやセキュリティ・ポリシーに則り決めることになります。
visudoを実行してviエディタが起動した場合は、
編集後、visudoを「:wq」で保存終了します。
viエディタの詳しい操作方法などは、下記ページで無料配布している
Linux無料マニュアルで習得できます。
Linuxサーバー構築マニュアル
2.sudoコマンド実行テスト
[root@Tiger ~]# logout ←rootから一般ユーザー「pakira」に戻ります。
[pakira@Tiger ~]$ whoami ←ユーザー名を表示します。
pakira ←pakiraユーザーであることを確認します。
[pakira@Tiger ~]$ tail /var/log/messages ←messagesファイルを表示します。
tail: `/var/log/messages' を 読み込み用でオープンできません: 許可がありません
↑権限がないのでエラーになります。(パーミッションエラー)
[pakira@Tiger ~]$ sudo tail /var/log/messages ←sudoコマンドでrootシェル得て実行します。
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for pakira: ←pakiraユーザーのコマンドを入力します。
Dec 19 03:14:24 Tiger kernel: EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts:
Dec 19 03:14:24 Tiger kernel: Adding 2064376k swap on /dev/mapper/vg_tiger-lv_swap. Priority:-1 extents:1 across:2064376k
Dec 19 03:14:24 Tiger kernel: ip_tables: (C) 2000-2006 Netfilter Core Team
Dec 19 03:14:24 Tiger kernel: NET: Registered protocol family 10
Dec 19 03:14:24 Tiger kernel: lo: Disabled Privacy Extensions
Dec 19 03:14:24 Tiger kernel: eth0: link up
Dec 19 03:14:29 Tiger abrtd: Init complete, entering main loop
Dec 19 03:14:31 Tiger kernel: warning: `proftpd' uses 32-bit capabilities (legacy support in use)
Dec 19 03:14:31 Tiger proftpd[1395]: 127.0.0.1 - ProFTPD 1.3.4b (maint) (built 火 8月 21 2012 17:12:41 JST) standalone mode STARTUP
Dec 19 03:14:31 Tiger kernel: ip_tables: (C) 2000-2006 Netfilter Core Team
↑messagesファイルの内容が表示されます。
特定のローダブルモジュールを表示する
ある特定のローダブルモジュールを表示したい場合には、
「modprobe -l」を実行しますが、さらに引数として、モジュール名を指定します。
[pakira@Tiger ~]$ su -
パスワード:
[root@Tiger ~]# modprobe -l *cpufreq*
kernel/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.ko
kernel/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.ko
kernel/drivers/cpufreq/cpufreq_stats.ko
kernel/drivers/cpufreq/cpufreq_powersave.ko
kernel/drivers/cpufreq/cpufreq_ondemand.ko
kernel/drivers/cpufreq/cpufreq_conservative.ko
また、下記のようにglepコマンドをパイプでつなげて実行しても同じ結果が得られます。
[root@Tiger ~]# modprobe -l | grep cpufreq
kernel/arch/x86/kernel/cpu/cpufreq/powernow-k8.ko
kernel/arch/x86/kernel/cpu/cpufreq/mperf.ko
kernel/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.ko
kernel/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.ko
kernel/arch/x86/kernel/cpu/cpufreq/p4-clockmod.ko
kernel/drivers/cpufreq/cpufreq_stats.ko
kernel/drivers/cpufreq/cpufreq_powersave.ko
kernel/drivers/cpufreq/cpufreq_ondemand.ko
kernel/drivers/cpufreq/cpufreq_conservative.ko
ローダブルモジュールを表示する
システムに組み込まれていないが、ロード可能なモジュール(ローダブルモジュール)を
表示するには、modprobeコマンドにオプション「-l」を付けて実行します。
このコマンドを実行すると、多くのモジュールが表示されるので、パイプなどを使用して
moreやlessコマンドと併用すると良いです。
[pakira@Tiger ~]$ su -
パスワード:
[root@Tiger ~]# modprobe -l
kernel/arch/x86/kernel/cpu/mcheck/mce-inject.ko
kernel/arch/x86/kernel/cpu/cpufreq/powernow-k8.ko
kernel/arch/x86/kernel/cpu/cpufreq/mperf.ko
kernel/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.ko
kernel/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.ko
kernel/arch/x86/kernel/cpu/cpufreq/p4-clockmod.ko
kernel/arch/x86/kernel/test_nx.ko
kernel/arch/x86/kernel/microcode.ko
kernel/arch/x86/crypto/aes-i586.ko
kernel/arch/x86/crypto/twofish-i586.ko
kernel/arch/x86/crypto/salsa20-i586.ko
kernel/arch/x86/crypto/crc32c-intel.ko
kernel/kernel/trace/ring_buffer_benchmark.ko
kernel/fs/nfs_common/nfs_acl.ko
kernel/fs/nls/nls_cp737.ko
kernel/fs/nls/nls_cp775.ko
kernel/fs/nls/nls_cp850.ko
省略
kernel/net/9p/9pnet.ko
kernel/net/9p/9pnet_virtio.ko
kernel/net/9p/9pnet_rdma.ko
kernel/net/wimax/wimax.ko
kernel/lib/crc-ccitt.ko
kernel/lib/crc-t10dif.ko
kernel/lib/crc-itu-t.ko
kernel/lib/crc7.ko
kernel/lib/libcrc32c.ko
kernel/lib/zlib_deflate/zlib_deflate.ko
kernel/lib/reed_solomon/reed_solomon.ko
kernel/lib/lzo/lzo_compress.ko
kernel/lib/lzo/lzo_decompress.ko
kernel/lib/raid6/raid6_pq.ko
kernel/lib/ts_kmp.ko
kernel/lib/ts_bm.ko
kernel/lib/ts_fsm.ko
■moreコマンドとのパイプ併用
[root@Tiger ~]# modprobe -l | more
kernel/arch/x86/kernel/cpu/mcheck/mce-inject.ko
kernel/arch/x86/kernel/cpu/cpufreq/powernow-k8.ko
kernel/arch/x86/kernel/cpu/cpufreq/mperf.ko
kernel/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.ko
kernel/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.ko
kernel/arch/x86/kernel/cpu/cpufreq/p4-clockmod.ko
kernel/arch/x86/kernel/test_nx.ko
kernel/arch/x86/kernel/microcode.ko
kernel/arch/x86/crypto/aes-i586.ko
kernel/arch/x86/crypto/twofish-i586.ko
kernel/arch/x86/crypto/salsa20-i586.ko
kernel/arch/x86/crypto/crc32c-intel.ko
kernel/kernel/trace/ring_buffer_benchmark.ko
kernel/fs/nfs_common/nfs_acl.ko
kernel/fs/nls/nls_cp737.ko
kernel/fs/nls/nls_cp775.ko
kernel/fs/nls/nls_cp850.ko
kernel/fs/nls/nls_cp852.ko
kernel/fs/nls/nls_cp855.ko
kernel/fs/nls/nls_cp857.ko
kernel/fs/nls/nls_cp860.ko
kernel/fs/nls/nls_cp861.ko
kernel/fs/nls/nls_cp862.ko
kernel/fs/nls/nls_cp863.ko
kernel/fs/nls/nls_cp864.ko
kernel/fs/nls/nls_cp865.ko
kernel/fs/nls/nls_cp866.ko
kernel/fs/nls/nls_cp869.ko
kernel/fs/nls/nls_cp874.ko
kernel/fs/nls/nls_cp932.ko
kernel/fs/nls/nls_euc-jp.ko
kernel/fs/nls/nls_cp936.ko
kernel/fs/nls/nls_cp949.ko
kernel/fs/nls/nls_cp950.ko
kernel/fs/nls/nls_cp1250.ko
kernel/fs/nls/nls_cp1251.ko
kernel/fs/nls/nls_iso8859-1.ko
kernel/fs/nls/nls_iso8859-2.ko
kernel/fs/nls/nls_iso8859-3.ko
--続ける--
カーネルモジュールの詳細情報を表示する
カーネルにロードされている各モジュールの詳細情報を表示するには、
modinfoコマンドを使用します。
引数に詳細情報を知りたいモジュールを指定して実行します。
また、オプション「-d」を指定すると、概要だけが表示されます。
■カーネルモジュールの詳細情報を表示する
[pakira@Tiger ~]$ su -
パスワード:
[root@Tiger ~]# modinfo snd_pcm
filename: /lib/modules/2.6.32-279.el6.i686/kernel/sound/core/snd-pcm.ko
license: GPL
description: Midlevel PCM code for ALSA.
author: Jaroslav Kysela
srcversion: 9260DA35A52D5BDB19CA5B7
depends: snd,snd-page-alloc,snd-timer
vermagic: 2.6.32-279.el6.i686 SMP mod_unload modversions 686
parm: preallocate_dma:Preallocate DMA memory when the PCM devices are initialized. (int)
parm: maximum_substreams:Maximum substreams with preallocated DMA memory. (int)
■カーネルモジュールの概要を表示する
[root@Tiger ~]# modinfo -d snd_pcm
Midlevel PCM code for ALSA.
dstatコマンドでシステムリソースをモニタリングする(リアルタイム)
vmstat, iostat, ifstatなどのstat系コマンドを
これ1つで表示することができます。
例えば、
CPUやメモリ情報、ディスクI/OやネットワークI/Oを
リアルタイムでモニタリングできます。
表示を停止する場合は、「Ctrl+c」を実行します。
dstatコマンドがインストールされていない場合は、
下記コマンドでインストールしてください。
dstatコマンドのインストール
$ su -
パスワード: ←rootパスワードを入力します。
# yum -y install dstat
dstatコマンドのオプション
| -t | 時間を表示します。 | ||
| -c | CPU使用時間の割合を表示します。 | ||
| 表示項目 | usr | ユーザ空間で使われたCPU使用時間の割合 | |
| sys | システム空間で使われたCPU仕様時間の割合 | ||
| idl | アイドル状態のCPU時間の割合 | ||
| wai | 応答の待ち状態にあったCPU時間の割合 | ||
| hiq | ハードウェア割り込み処理に使われたCPU時間の割合 | ||
| siq | ソフトウェア割り込み処理に使われたCPU時間の割合 | ||
| -m | メモリの状態を表示します。 | ||
| 表示項目 | used | 物理メモリ全体での使用容量 | |
| buff | バッファキャッシュで使っているメモリ使用容量 | ||
| cach | ページキャッシュからバッファキャッシュを引いたメモリ使用容量 | ||
| free | 未使用のメモリ使用容量 | ||
| ?vm | バーチャルメモリの利用状態を表示します。 | ||
| 表示項目 | majpf | 物理メモリ上に該当データがロードされなかった回数 | |
| minpf | 物理メモリに該当データがロードされた回数 | ||
| alloc | 空きメモリを探して割り当てた回数 | ||
| free | メモリを解放した回数 | ||
| -s | スワップの利用状態を表示します。 | ||
| 表示項目 | used | スワップ全体での使用容量 | |
| free | 未使用のスワップ容量 | ||
| -g | ページの入出力数を表示します。 | ||
| 表示項目 | in | ディスクからメモリに読み込んだバイト数 | |
| out | メモリ不足時にディスクに書き出したバイト数 | ||
| -d | ディスクの状態を表示します。 | ||
| 表示項目 | read | ディスクの読み込みバイト数 | |
| writ | ディスクの書き込みバイト数 | ||
| -r | ディスクへの読み書きリクエスト数(IOPS)を表示します。 | ||
| 表示項目 | read | ディスクの読み込みリクエスト数 | |
| writ | ディスクの書き込みリクエスト数 | ||
| -i | 割り込み処理の状態を表示します。 | ||
| 表示項目 | interrupts | 実行待ちのプロセス数 | |
| -l | ロードアベレージの状態を表示します。 | ||
| 表示項目 | 1m | 1分平均でのCPU時間の利用割合 | |
| 5m | 5分平均でのCPU時間の利用割合 | ||
| 15m | 15分平均でのCPU時間の利用割合 | ||
| -p | プロセスの状態を表示します。 | ||
| 表示項目 | run | 実行中プロセス数 | |
| blk | ブロック中のプロセス数 | ||
| new | 新しく実行されたプロセス数 | ||
| -y | システム状態を表示します。 | ||
| 表示項目 | int | 割り込み回数 | |
| csw | コンテキストスイッチの回数 | ||
| ?lock | ファイルロックの状態を表示します。 | ||
| 表示項目 | pos | posixロック数 | |
| lck | flockロック数 | ||
| rea | 読み込みロック数 | ||
| wri | 書き込みロック数 | ||
| -n | ネットワーク状態を表示します。 | ||
| recv | ネットワーク全体の受信データ量 | ||
| send | ネットワーク全体の送信データ量 | ||
| ?ipc | プロセス間通信の状態を表示します。 | ||
| msg | メッセージキュー | ||
| sem | セマフォ | ||
| shm | 共有メモリセグメント | ||
| ?unix | UNIXドメインソケットの状態を表示します。 | ||
| 表示項目 | dgm | Datagram通信の件数 | |
| str | Stream通信の件数 | ||
| lis | listenな通信の件数 | ||
| act | activeな通信の件数 | ||
| -tcp | TCP通信のバイト数を表示します。 | ||
| 表示項目 | lis | 待ちうけ状態の数 | |
| act | ACTIVE状態の数 | ||
| syn | SYN状態の数 | ||
| tim | TIME_WAIT状態の数 | ||
| clo | CLOSE状態の数 | ||
| ?udp | UDP通信のバイト数を表示します。 | ||
| 表示項目 | lis | 待ちうけ状態の数 | |
| act | ACTIVE状態の数 | ||
| --float | 小数点も含めて表示します。 | ||
| --noheaders | ヘッダ表示を一回だけにします。 | ||
Linuxの時刻同期を確認するコマンド|chronyとntpのステータス確認
「chrony と ntp、どっちを使えばいいの?」
Linuxサーバーの時刻同期(NTP)は、システムの安定運用に欠かせない重要な要素です。
この記事では、Linuxで時刻同期のステータスを確認するコマンドを解説します。現代のLinux(RHEL 7/8/9、AlmaLinuxなど)で標準の
chrony と、古いシステムで使われる ntp の両方に対応した確認手順をまとめました。1. 【現代の標準】chronyの同期状態を確認する
CentOS 7やRHEL 7以降、Ubuntu 20.04以降など、近年のLinuxディストリビューションでは chrony(クロニー) が標準のNTPクライアントとして採用されています。まずchronydの起動状態を確認する
chronyc コマンドを実行する前に、まず chrony のサービス(デーモン)が動いているかを確認しましょう。# systemctl status chronyd * chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled) Active: active (running) since Mon 2026-02-24 10:00:00 JST; 3 days ago
Active: active (running) であれば正常です。停止している場合は以下のコマンドで起動してください。# systemctl start chronyd
ファイル名に日付を付けてリネームする
サーバー管理していると、ファイルをバックアップする場合や、
ファイル名を別名保存する時、いつ、その作業を行ったのかを
記録したい場合があります。
私が過去経験した現場では、設定ファイルを変更する際、
変更前ファイルは削除せず、必ず保存する運用ルールになっていました。
それは、設定を変更した事によって何かトラブルが起きても、
すぐ元に戻せるようにする為です。
その時の決まりとして、変更前の設定ファイルには、
変更当日日付を付加して管理するという決まりになっていました。
具体的に言うと、『 ファイル名 + 日付 』という形式で、
ファイルをバックアップしていました。
従って、過去に何度も設定変更しているファイルは、
ファイル名の日付部分の違うファイルがいくつもあり、
歴管理されることになります。
これは、後から何年何月何日に設定ファイルの
どこを変更したのかを一目瞭然にしておく為です。
今回はその日付をファイル名に付加する方法を紹介します。
日付を表示するコマンドは「 date 」コマンドを使います。
----------------------------------------------------------
$ date
2011年 12月 17日 土曜日 00:11:21 JST
----------------------------------------------------------
日付が表示されました。
では↓のように実行してください。
----------------------------------------------------------
$ date +%Y%m%d
20111217
----------------------------------------------------------
「2011年 12月 17日」が「20111217」と表示されました。
ファイル名に付ける日付は「20111217」を使用します。
それではファイル名に日付を付けて保存します。
----------------------------------------------------------
$ touch file_test.txt ←touchコマンドで「file_test.txt」ファイルを作る。
$ ls -l ←ファイルの情報を表示する。
-rw-rw-r-- 1 pakira pakira 0 12月 17 00:16 file_test.txt
$ mv file_test.txt file_test.txt_`date +%Y%m%d` ←dateコマンドを実行する。
$ ls -l file_test.txt* ←ファイル名が変わっていることを確認する。
-rw-rw-r-- 1 pakira pakira 0 12月 17 00:18 file_test.txt_20111217
----------------------------------------------------------
`date +%Y%m%d`をファイル名の後ろ、もしくは前に付けてmvやcpコマンドなどを実行すれば
日付付きのファイル名でファイルを保存することができます。
「`」はバッククォート、またはアクサングラーブと言い、[Shift]+[@]キーで入力します。
「`」で括った変数はコマンドとして実行されます。
また、「`」ではなく、$()で括って実行しても同じ結果が得られます。
----------------------------------------------------------
$ touch file_test2.txt_$(date +%Y%m%d)
$ ls -l file_test2.txt*
-rw-rw-r-- 1 pakira pakira 0 12月 17 00:31 file_test2.txt_20111217
----------------------------------------------------------
今回は、「%Y%m%d」と記述して年月日をファイル名に付けましたが、
この箇所を変更することで分や秒を付けることも可能です。
詳しくは下記を確認してください。
-------------------------
書式 説明
-------------------------
%Y 年(4桁表記)
%y 年(2桁表記)
%m 月(01〜12)
%d 日(01〜31)
%H 時(00〜23)
%I 時(00〜12)
%M 分(00〜59)
%S 秒(00〜59)
%a 曜日(Sun〜Sat)
%b 月名(Jan〜Dec)
-------------------------
上記を参考に「date +%Y%m%d%H%M%S」と実行すれば、「年月日時分秒」まで表示できます。
上記を参考に「date +%Y%m%d%H%M%S」と実行すれば、
「年月日時分秒」まで表示できます。
この表記を使うと、一日に同じファイル名でいくつもバックアップする場合、
ファイル名の重複を避ける事ができます。
YUM(Yellow dog Updater Modified)
CentOSや、Fedoraには、RPMパッケージの依存関係を自動的に解消してインストールする
YUM(Yellow dog Updater Modified)があります。
※YUMは、Debian GNU/LinuxおよびVine Linuxで採用されている
パッケージ管理システム(APTツール)に相当します。
もともとはYellow Dog Linuxのパッケージ管理システムとして
開発されたものでYUMの設定ファイルは、下記から構成されています。
/etc/yum.conf
/etc/yum.repos.d
■/etc/yum.confのファイル例
----------------------------------------------------------
$ cat /etc/yum.conf
[main]
cachedir=/var/cache/yum ←パッケージのキャッシュディレクトリ
keepcache=0
debuglevel=2
logfile=/var/log/yum.log ←ログファイル
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
# Note: yum-RHN-plugin doesn\'t honor this.
metadata_expire=1h
# Default.
# installonly_limit = 3
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
----------------------------------------------------------
/etc/yum.repos.dディレクトリ以下には、
リポジトリ情報の設定ファイルが保存されています。
パッケージの入手先を増やしたい場合は、リポジトリ情報の設定ファイルを追加します。
$ ls -l /etc/yum.repos.d
合計 16
-rw-r--r-- 1 root root 2245 4月 26 2010 CentOS-Base.repo
-rw-r--r-- 1 root root 626 4月 26 2010 CentOS-Media.repo
YUMを使用して管理を行うにはyumコマンドを使用します。
■yumコマンドの主なサブコマンド
------------------------------------------------------------------------
check-update アップデート対象のパッケージリストを表示する
update パッケージ名 指定したパッケージをアップデートする
install パッケージ名 指定したパッケージをインストールする
list installed パッケージ名 指定したパッケージがインストール済みか確認する
remove パッケージ名 指定したパッケージをアンインストールする
info パッケージ名 指定したパッケージの情報を表示する
list 全パッケージ情報をリスト表示する
search キーワード パッケージ情報をキーワード検索する
grouplist パッケージグループをリスト表示する
groupinstall グループ 指定したグループのパッケージをインストールする
------------------------------------------------------------------------
MySQLのrootパスワードを忘れた場合の対処について
MySQLはオープンソースのデータベースソフトになります。
無料で利用できるデータベースソフトとしてPostgreSQLがありますが、
それと人気を二分するデータベースソフトです。
人気の理由は高性能且つ高速で、しかも操作が比較的簡単な上、
Movable TypeやXoopsなど多くのウェブサイト構築ソフトウェアが
サポートしているためです。またMySQLを利用する事でLAMP環境が
構築出来ます。
※LAMPとはLinux、Apache、 MySQL、 PHPの略称
今回はそのMySQL専用のrootパスワードを忘れてしまった場合の
対処方法をご紹介します。
Apacheのバージョンを確認する
ApacheはWebサーバーアプリケーションとして世界でもっとも使用されているソフトウェアです。
Apacheは現在も開発が続けられており、新バージョンのリリースがあります。
現在使用しているApacheのバージョンを確認する方法を紹介します。
Apacheをインストールするには(ソースコード)
Linuxでソフトウェアをインストールする方法は2つあります。1つはRPMと呼ばれるパッケージ管理ツールを使用する方法。もうひとつはここで紹介するソースコードでのインストールです。
それぞれメリット、デメリットがあり、RPMはソフトウェアの管理が楽ではありますが、最新バージョンの対応がソースコードと比較して遅く、緊急性の高いセキュリティ対策に対応しにくいというデメリットがあります。
また、ソースコードでのインストールは最新バージョンの対応は早いのですが、インストール方法がRPMと比較して難しいという面があります。
どちらを使用するかは好みだと思いますが、外部に公開するサーバーとして使用する場合はセキュリティ面のことを考えてソースコードでのインストールを行うことをおすすめします。
