助け合いフォーラム
LinuC Lv1-101(Ver10.0)
問題ID : 14885
問題を開く
systemdが稼働するシステムにおいて、次回起動時にグラフィカルログインさせるようにしたい。実行すべきコマンドはどれか(2つ選択)
正解
rm -f /etc/systemd/system/default.target
ln -s /lib/systemd/system/graphical.target /etc/systemd/system/default.target
解説
システム起動時に最初に読み込まれるUnitは「/etc/systemd/system/default.target」です。default.targetをSysVinitでのランレベルに相当するUnitへのシンボリックリンクとして作成することで、期待するサービス群を起動できるようになります。SysVinitのランレベルとsystemdのターゲットは以下のように対応しています。
これらのターゲットは「/lib/systemd/system」配下に格納されています。また、SysVinitとの関連がわかりやすいように、runlevel0.target〜runlevel6.targetまでのシンボリックリンクも用意されています。
シンボリックリンクとは、Windowsでのショートカットのようなもので、元ファイルの場所を指し示すリンクの事です。シンボリックリンクが持っている情報は「元ファイル(ディレクトリ)がどこにあるのか」というパス情報のみです。
シンボリックリンクを作成するにはlnコマンドに「-s」オプションを付加して作成します。(書式:ln -s 元ファイル リンクファイル)
設問では次回起動モードをグラフィカルログイン(ランレベル5)に変更するので、default.targetを「/lib/systemd/system/graphical.target」へのシンボリックリンクに変更する事になります。シンボリックリンクは上書きできないので、事前に削除する必要があります。
よって正解は
・rm -f /etc/systemd/system/default.target
・ln -s /lib/systemd/system/graphical.target /etc/systemd/system/default.target
です。
その他の選択肢については、以下のとおりです。
・cp -p /etc/systemd/system/default.target /etc/systemd/system/default.backup
・ln -s /etc/systemd/system/default.target /etc/systemd/system/default.backup
「/etc/systemd/system/default.target」は期待するランレベルのターゲットへのシンボリックリンクであるため、バックアップする必要はありません。また「/etc/systemd/system/default.target」が残ったままになり、切り替えのためのシンボリックリンクが作成できなくなるため誤りです。
・ln -s /etc/systemd/system/default.target /lib/systemd/system/graphical.target
引数の順番が誤っています。
・mv /lib/systemd/system/graphical.target /etc/systemd/system/default.target
次回起動モード時にgraphical.targetの処理は行われますが、mvコマンドを使っているためgraphical.targetの原本ファイルが無くなってしまいます。運用上適切ではありませんので誤りです。
これらのターゲットは「/lib/systemd/system」配下に格納されています。また、SysVinitとの関連がわかりやすいように、runlevel0.target〜runlevel6.targetまでのシンボリックリンクも用意されています。
シンボリックリンクとは、Windowsでのショートカットのようなもので、元ファイルの場所を指し示すリンクの事です。シンボリックリンクが持っている情報は「元ファイル(ディレクトリ)がどこにあるのか」というパス情報のみです。
シンボリックリンクを作成するにはlnコマンドに「-s」オプションを付加して作成します。(書式:ln -s 元ファイル リンクファイル)
設問では次回起動モードをグラフィカルログイン(ランレベル5)に変更するので、default.targetを「/lib/systemd/system/graphical.target」へのシンボリックリンクに変更する事になります。シンボリックリンクは上書きできないので、事前に削除する必要があります。
よって正解は
・rm -f /etc/systemd/system/default.target
・ln -s /lib/systemd/system/graphical.target /etc/systemd/system/default.target
です。
その他の選択肢については、以下のとおりです。
・cp -p /etc/systemd/system/default.target /etc/systemd/system/default.backup
・ln -s /etc/systemd/system/default.target /etc/systemd/system/default.backup
「/etc/systemd/system/default.target」は期待するランレベルのターゲットへのシンボリックリンクであるため、バックアップする必要はありません。また「/etc/systemd/system/default.target」が残ったままになり、切り替えのためのシンボリックリンクが作成できなくなるため誤りです。
・ln -s /etc/systemd/system/default.target /lib/systemd/system/graphical.target
引数の順番が誤っています。
・mv /lib/systemd/system/graphical.target /etc/systemd/system/default.target
次回起動モード時にgraphical.targetの処理は行われますが、mvコマンドを使っているためgraphical.targetの原本ファイルが無くなってしまいます。運用上適切ではありませんので誤りです。
参考
systemdはSysVinitを置き換える新しいinitの仕組みです。systemdでは以下のデーモンプロセスが連携して動作しています。
systemdで扱う処理はUnitという単位で管理します。Unitは設定ファイルであり、Unitの設定に従ってsystemd自体が処理を実行します。SysVinitのようにスクリプトを実行するわけではありません。
Unitには各機能ごとに拡張子が割り当てられており、拡張子を見ることでどういった機能のためのUnitかが判別できるようになっています。
また、SysVinitではプロセスをPIDによって管理していましたが、systemdではcgroupsというLinuxカーネルの機能によってプロセスのリソースを管理できます。
systemdはUpstartと同様、各サービスを並列起動することができます。そのため、順次起動していくSysVinitに比べて高速なシステム起動や停止が行えます。
システム起動時に最初に読み込まれるUnitは「/etc/systemd/system/default.target」です。「default.target」をSysVinitでのランレベルに相当するUnitへのシンボリックリンクとして作成することで、期待するサービス群を起動できるようになります。
シンボリックリンクとは、Windowsでのショートカットのようなもので、元ファイルの場所を指し示すリンクの事です。シンボリックリンクが持っている情報は「元ファイル(ディレクトリ)がどこにあるのか」というパス情報のみです。
シンボリックリンクを作成するにはlnコマンドに「-s」オプションを付加して作成します。(書式:ln -s 元ファイル リンクファイル)
SysVinitのランレベルとsystemdのターゲットは以下のように対応しています。
これらのターゲットは「/lib/systemd/system」配下に格納されています。また、SysVinitとの関連がわかりやすいように、runlevel0.target〜runlevel6.targetまでのシンボリックリンクも用意されています。
ランレベル3:マルチユーザーモード(テキストログイン)からランレベル5:マルチユーザーモード(グラフィカルログイン)に切り替えるには以下のようにdefault.targetを切り替えます。
各サービスの稼働状況や起動設定を管理するにはsystemctlコマンドを使用します。systemctlコマンドの書式は以下のとおりです。
systemctl サブコマンド [ Unit名 ]
※Unit名に拡張子がない場合、.serviceの拡張子を持つUnitが指定されたものとみなされます
主なサブコマンドの一覧
実行例:Webサービスの自動起動設定と、手動起動
上記実行例を見ると、「/usr/lib/systemd/system/httpd.service」のシンボリックリンクが「/etc/systemd/system/multi-user.target.wants/httpd.service」に作成されているのがわかります。これは、systemdが .target Unitの実行時に、「/etc/systemd/system/[実行ターゲット名].wants」ディレクトリを参照し、格納されているUnitを自動起動するようになっているためです。例えばgraphical.targetを実行する場合、「/etc/systemd/system/graphical.target.wants」ディレクトリを参照します。
上記実行例の場合、multi-user.targetの起動時にhttpd.serviceというWebサービスを制御するUnitが実行されるように、systemctlが自動でシンボリックリンクを「/etc/systemd/system/multi-user.target.wants/」配下に作成しています。
自動起動設定がどのターゲットに対して有効となるかは、各Unit定義ファイルに記述されています。httpd.serviceファイルの中では、以下のとおりmulti-user.targetで有効となるよう[WantedBy]項目に記述されていることがわかります。
サービスの自動起動を無効にすると、作成されたシンボリックリンクが自動で削除されます。
systemdで扱う処理はUnitという単位で管理します。Unitは設定ファイルであり、Unitの設定に従ってsystemd自体が処理を実行します。SysVinitのようにスクリプトを実行するわけではありません。
Unitには各機能ごとに拡張子が割り当てられており、拡張子を見ることでどういった機能のためのUnitかが判別できるようになっています。
また、SysVinitではプロセスをPIDによって管理していましたが、systemdではcgroupsというLinuxカーネルの機能によってプロセスのリソースを管理できます。
systemdはUpstartと同様、各サービスを並列起動することができます。そのため、順次起動していくSysVinitに比べて高速なシステム起動や停止が行えます。
システム起動時に最初に読み込まれるUnitは「/etc/systemd/system/default.target」です。「default.target」をSysVinitでのランレベルに相当するUnitへのシンボリックリンクとして作成することで、期待するサービス群を起動できるようになります。
シンボリックリンクとは、Windowsでのショートカットのようなもので、元ファイルの場所を指し示すリンクの事です。シンボリックリンクが持っている情報は「元ファイル(ディレクトリ)がどこにあるのか」というパス情報のみです。
シンボリックリンクを作成するにはlnコマンドに「-s」オプションを付加して作成します。(書式:ln -s 元ファイル リンクファイル)
SysVinitのランレベルとsystemdのターゲットは以下のように対応しています。
これらのターゲットは「/lib/systemd/system」配下に格納されています。また、SysVinitとの関連がわかりやすいように、runlevel0.target〜runlevel6.targetまでのシンボリックリンクも用意されています。
ランレベル3:マルチユーザーモード(テキストログイン)からランレベル5:マルチユーザーモード(グラフィカルログイン)に切り替えるには以下のようにdefault.targetを切り替えます。
各サービスの稼働状況や起動設定を管理するにはsystemctlコマンドを使用します。systemctlコマンドの書式は以下のとおりです。
systemctl サブコマンド [ Unit名 ]
※Unit名に拡張子がない場合、.serviceの拡張子を持つUnitが指定されたものとみなされます
主なサブコマンドの一覧
実行例:Webサービスの自動起動設定と、手動起動
上記実行例を見ると、「/usr/lib/systemd/system/httpd.service」のシンボリックリンクが「/etc/systemd/system/multi-user.target.wants/httpd.service」に作成されているのがわかります。これは、systemdが .target Unitの実行時に、「/etc/systemd/system/[実行ターゲット名].wants」ディレクトリを参照し、格納されているUnitを自動起動するようになっているためです。例えばgraphical.targetを実行する場合、「/etc/systemd/system/graphical.target.wants」ディレクトリを参照します。
上記実行例の場合、multi-user.targetの起動時にhttpd.serviceというWebサービスを制御するUnitが実行されるように、systemctlが自動でシンボリックリンクを「/etc/systemd/system/multi-user.target.wants/」配下に作成しています。
自動起動設定がどのターゲットに対して有効となるかは、各Unit定義ファイルに記述されています。httpd.serviceファイルの中では、以下のとおりmulti-user.targetで有効となるよう[WantedBy]項目に記述されていることがわかります。
サービスの自動起動を無効にすると、作成されたシンボリックリンクが自動で削除されます。
コマンドの実行順について
投稿日 2023/03/08
本問題の正解は、「下記2コマンドを順に実行する」ということで合っておりますでしょうか。
(2コマンドのどちらか一方を実行、という意味ではなく)
①rm -f /etc/systemd/system/default.target
→シンボリックリンクは上書き不可の為、事前に~default.targetを削除しておく
②ln -s /lib/systemd/system/graphical.target /etc/systemd/system/default.target
→~graphical.targetのシンボリックリンク「~default.target」を作成
恐れ入りますがお教えいただけると幸いです。よろしくお願いいたします。
o
ojixii
2023/03/09 18:04
「rm してから ln を実行する」で合っていると思います。
ちなみにシンボリックリンクがある状態で(rmを実行せず)ln 実行したら、ちゃんと怒られました。
# ls /etc/systemd/system/default.target
/etc/systemd/system/default.target
# ln -s /lib/systemd/system/graphical.target /etc/systemd/system/default.target
ln: failed to create symbolic link '/etc/systemd/system/default.target': File exists
コメント
この投稿に対して返信しませんか?
P Pnt257_009
2023/03/10 09:27
ご丁寧なご返信、ありがとうございます。 スッキリしました。