はじめまして、北野と申します。今回より本ブログに参加させていただくことになりました。よろしくお願いします。 デビューとなる今回は、Red Hat Enterprise Linux 6 (RHEL6) → Red Hat Enterprise Linux 7 (RHEL7) で変更された主要コマンドをまとめてみました。
RHEL6の標準サポート期間が2020年11月30日までと設定されていることから、今後5年間の運用を配慮するとRHEL7の採用が必要になる状況下になっております。また、この情報は CentOS6 から CentOS7 への変更点としても応用頂けます。ぜひ、今後のシステムを構成する際の参考にご利用下さい。
サービス系コマンド
Red Hat Enterprise Linux 7では、サービス起動デーモンとして、SysVinit/Upstartに代わり、systemdが導入されました。これにより、サービス系コマンドが大幅に変更されています。
サービス系コマンドの一覧は下記のとおりです。
■サービス逐次起動系
処理内容 | RHEL 6 | RHEL 7 |
---|---|---|
状態の表示(サービス単位) |
/sbin/service [1]service_name status
|
/usr/bin/systemctl status unit_name |
状態の表示(全サービス) | /sbin/service –status-all |
/usr/bin/systemctl list-units [2]–type service
|
起動 | /sbin/service service_name start | /usr/bin/systemctl start unit_name |
終了 | /sbin/service service_name stop | /usr/bin/systemctl stop unit_name |
強制終了 | kill -9 PID | /usr/bin/systemctl kill -s 9 unit_name |
再起動 | /sbin/service service_name restart | /usr/bin/systemctl restart unit_name |
設定反映 | /sbin/service service_name reload | /usr/bin/systemctl reload unit_name |
[1]/etc/init.d/service_nameでも同様
[2]list-unitsは省略可
■サービス自動起動系
処理内容 | RHEL 6 | RHEL 7 |
---|---|---|
(全サービス)定義の表示 | ls /etc/init.d/ | /usr/bin/systemctl list-unit-files –type service |
(サービス単位の)定義の登録 | /sbin/chkconfig –add service_name |
/usr/bin/systemctl daemon-reload [3]
|
自動起動の確認 | /sbin/chkconfig –list service_name | /usr/bin/systemctl is-enabled unit_name |
自動起動の有効化 | /sbin/chkconfig service_name on | /usr/bin/systemctl enable unit_name |
自動起動の無効化 | /sbin/chkconfig service_name off | /usr/bin/systemctl disable unit_name |
[3]Unitファイルを再読み込みすることにより登録される
systemdでは、「Unit」という単位でさまざまな処理を行います。従来のサービスに相当する処理は「.service」という拡張子がつくファイルとして管理されており、サービス関連の処理を行うときは、この名前を指定します。Unitには、ほかにもマウントポイントの処理を行う「.mount」、デバイスの処理を行う「.device」、Unitをグループ化する「.target」などがあります。
また、自動起動の登録を行ったUnitは、「/usr/lib/systemd/system/unit_name」内の[Install]
セクションのWantedBy
オプションで指定されているUnitのディレクトリ(例:/etc/systemd/system/multi-user.target.wants/)にシンボリックリンクが張られることにより、自動起動が有効となります。
RHEL 6と同じコマンドを利用したい方は……
Red Hat Enterprise Linux 7のserviceコマンドやchkconfigコマンドは、systemctlコマンドにリダイレクトするシェルスクリプトとなっているのでそのまま利用できます。
# サービスの一時停止 [vagrant@vagrant-centos7 ~]$ sudo service crond stop Redirecting to /bin/systemctl stop crond.service # サービスの自動起動の無効化 [vagrant@vagrant-centos7 ~]$ sudo chkconfig crond off Note: Forwarding request to 'systemctl disable crond.service'. rm '/etc/systemd/system/multi-user.target.wants/crond.service'
ただし、chkconfig –listについては、出力結果にも注意書きがあるとおり、一部のサービスしか表示されないため注意が必要です。
[vagrant@vagrant-centos7 ~]$ chkconfig --list Note: This output shows SysV services only and does not include native systemd services. SysV configuration data might be overridden by native systemd configuration.
ランレベル系コマンド
Red Hat Enterprise Linux 7では、従来のランレベルに相当する起動モードも「.target」という拡張子がつくUnitで管理されるようになっています。これまでのランレベルとの対応は、下記のとおりです。なお、targetファイルを自作して、独自の起動モードを利用することも可能です。
RHEL 6のランレベル | 内容 | RHEL 7のtarget名 |
---|---|---|
0 | システム停止 | poweroff.target |
1 | シングルユーザモード | rescue.target |
3 | マルチユーザモード | multi-user.target |
5 | グラフィカルモード | graphical.target |
6 | 再起動 | reboot.target |
N/A | 緊急モード | emergency.target |
通常の起動の際は、いずれかのtargetへのシンボリックリンク(通常はmulti-user.targetかgraphical.target)となっているdefault.targetが参照されます。
ランレベル系コマンドの一覧は下記のとおりです。
処理内容 | RHEL 6 | RHEL 7 |
---|---|---|
起動モードの変更 | telinit runlevel | systemctl isolate target_name |
標準起動モードの変更 | /etc/inittabの編集 | sudo systemctl set-default target_name |
# rescue.target(従来のシングルユーザモード相当)に変更 [vagrant@vagrant-centos7 ~]$ sudo systemctl isolate rescue.target # デフォルトの起動モードをマルチユーザモードへ変更 [vagrant@vagrant-centos7 ~]$ sudo systemctl set-default multi-user.target rm '/etc/systemd/system/default.target' ln -s '/usr/lib/systemd/system/multi-user.target' '/etc/systemd/system/default.target'
RHEL 6と同じコマンドを利用したい方は……
現在と1つ前のランレベルを表示するrunlevelコマンド、ランレベルを一時的に変更するtelinit(init)コマンドも利用できます。ただし、/etc/inittabは、ファイルそのものはあるもののコメントだけとなっているため、標準起動モードの変更については、systemctl set-default target_name
の実行が必要なようです。
ログ確認系コマンド
systemd によって起動されたUnitのログは、/var/log/journal以下にバイナリ形式で保存されるようになっています。そのため、ログの確認にはjournalctlコマンドを利用します。
ログ確認系コマンドの一覧は下記のとおりです。
処理内容 | RHEL 6 | RHEL 7 |
---|---|---|
(サービス単位の)ログ確認 | cat /var/log/service_name | journalctl -u unit_name |
ログの更新監視 | tail -f /var/log/service_name | journalctl -f -u unit_name |
起動ログの確認 | dmesg | journalctl –dmesg |
journalctlによる表示には、デフォルトでページャ(less)で表示されます。パイプ処理などでページャを利用したくない場合は、–no-pagerオプションを付加します。また、–sinceオプションで相対時間(例:30 min ago)、絶対時間(2015-04-30)以降のログ出力、–outputオプションでJSONなどの各種形式で出力、-bオプションでN世代前のブートログ表示など、数多くの機能を備えています。
ただし、デフォルト設定のままの場合、/run/systemd/journal以下にログが書き込まれ、再起動すると消えてしまうので注意が必要です。再起動後もログを残すには、/var/log/journalを作成して、journaldの再起動(systemctl restart systemd-journald)を行う必要があります。
RHEL 6と同じコマンドを利用したい方は……
Red Hat Enterprise Linux 7では、rsyslogが稼働しており、journaldからsyslog関連のログが転送されています。そのため、これまでのテキスト形式のログも任意のコマンドで参照できます。
ネットワーク系コマンド
Red Hat Enterprise Linux 7では、ifconfigやnetstatといった馴染みのあるコマンドが含まれている、net-toolsパーッケージがインストールされなくなりました。
ネットワーク系コマンドの一覧は下記のとおりです。なお、ipコマンドのオプションは、一意な文字列まで入力すれば認識してくれるので、短縮表記例も併記しておきます。
処理内容 | RHEL 6 | RHEL 7(フル表記) | RHEL 7(短縮表記例) |
---|---|---|---|
全アクティブインターフェイスの情報表示 | /sbin/ifconfig | /sbin/ip address show or /sbin/ip link show | /sbin/ip a or /sbin/ip l |
特定インターフェイスの情報表示 | /sbin/ifconfig eth0 | /sbin/ip address show dev enp0s3 | /sbin/ip a s dev enp0s3 |
ルーティングテーブルの表示 | /sbin/route | /sbin/ip route | /sbin/ip r |
デフォルトゲートウェイの追加 | /sbin/route add default gw xxx.xxx.xxx.xxx | ip route add default via xxx.xxx.xxx.xxx | /sbin/ip r a default via xxx.xxx.xxx.xxx |
デフォルトゲートウェイの削除 | /sbin/route del default gw xxx.xxx.xxx.xxx | ip route del default via xxx.xxx.xxx.xxx | /sbin/ip r d default via xxx.xxx.xxx.xxx |
TCPの接続状態の表示 | /bin/netstat -tan | ss -tan | 左に同じ |
インターフェイスごとの統計情報 | /bin/netstat -i | ip -s link | ip -s l |
ARPテーブルの表示 | /sbin/arp -n | /sbin/ip neighbour | /sbin/ip n |
RHEL 6と同じコマンドを利用したい方は……
net-toolsパッケージをインストールすれば、Red Hat Enterprise Linux 6で使用していたネットワーク系コマンドはすべて利用可能となります。
NetworkManager系コマンド
NetworkManagerは、Red Hat Enterprise Linux 4から搭載されているネットワークユーティリティで、Red Hat Enterprise Linux 7で新しく追加されたわけではありません。しかし、Red Hat Enterprise Linux 7より、ネットワーク設定にはこのユーティリティを使用することが推奨されるようになったので、今後は利用頻度が高くなると思います。
NetworkManagerには、X上で動作するGUIツールのほか、ターミナル上でGUIで設定できるnmtuiコマンド、CUIで設定するnmcliコマンドがあります。ここでは、最も利用しやすいとnmcliコマンドを用いたNetworkManager系コマンドを下記に紹介します。
なお、デバイスを示す「デバイス名」と、接続に名前をつけた「接続名」は異なることがあるので注意してください。
処理内容 | nmcliコマンド(フル表記) | nmcliコマンド(短縮表記例) |
---|---|---|
デバイス一覧の表示 | /usr/bin/nmcli device | /usr/bin/nmcli d |
デバイス情報の表示 | /usr/bin/nmcli device show device_name | /usr/bin/nmcli d sh device_name |
接続の作成 | /usr/bin/nmcli connection add type type_nameifname if_name con-name connection_name | /usr/bin/nmcli c a type type_nameifname if_name con-name connection_name |
接続の削除 | /usr/bin/nmcli connection delete connection_name | /usr/bin/nmcli c de connection_name |
接続一覧の表示 | /usr/bin/nmcli connection | /usr/bin/nmcli c |
接続情報の表示(すべて) | /usr/bin/nmcli connection show connection_name | /usr/bin/nmcli c s connection_name |
接続の変更 | /usr/bin/nmcli connection modify …. | /usr/bin/nmcli c m … |
接続の開始 | /usr/bin/nmcli connection up connection_name | /usr/bin/nmcli c u connection_name |
接続の停止 | /usr/bin/nmcli connection down connection_name | /usr/bin/nmcli c d connection_name |
接続情報の表示(特定フィールド) | /usr/bin/nmcli –fields field_name connection show connection_name | /usr/bin/nmcli -f field_name c s connection_name |
ホスト名操作系コマンド
Red Hat Enterprise Linux 7では、ホスト名もsystemdが管理しているため、永続的なホスト名の変更方法も変更されました(hostnameコマンドを利用した一時的なホスト名の変更は Red Hat Enterprise Linux 6と同じです)。
ホスト名操作系コマンドの一覧は下記のとおりです。
処理内容 | RHEL 6 | RHEL 7 |
---|---|---|
ホスト名の確認 | hostname | hostname or hostnamectl |
ホスト名の変更(永続的) | /etc/sysconfig/networkを編集 | hostnamectl set-hostname new_host_hame |
なお、「nmcli global hostname new_host_hame」を実行して、NetworkManager経由でも変更することができます。
ファイアウォール系コマンド
Red Hat Enterprise Linux 7では、ファイアウォールとしてfirewalldが導入されました。これは、内部的にはiptablesを利用しているものの、「ゾーン」と呼ばれるiptablesとはまったく異なる機能を提供しているため、コマンド一覧は割愛します(iptabelesサービスとの併用もできません)。
ファイルシステム系コマンド
Red Hat Enterprise Linux 7ではファイルシステムもext4からxfsに変更されています。ただし、こちらは利用頻度はそれほど高くないと思いますので、コマンド一覧は割愛し、公式サイトへのリンクだけを貼っておきます。
・EXT4 と XFS コマンドの参照表(Red Hat社公式サイト)
最後に
今回調べてみて、Red Hat Enterprise Linux 7での変更点の多さを改めて痛感しました。もはや、これまでのRHELとは別のOSになったような雰囲気すらあります。ただし、Red Hat Enterprise Linux にかぎらず、多くのディストリビューションがsystemdへの対応を表明していますので、使いこなせるようになっておきたいところです。そのためにも、今回は詳しくは触れられなかった、Unitの仕組みの理解が不可欠と思いました。
なお、systemd導入のもう1つの肝であるcgroupsについても、近いうちにブログにまとめようと思っておりますので、ご期待ください!