助け合いフォーラム
正解
systemctl list-unit-files
解説
systemctl サブコマンド [ Unit名 ]
※Unit名に拡張子がない場合、.serviceの拡張子を持つUnitが指定されたものとみなされます
主なサブコマンドの一覧
利用可能なユニットの一覧を表示するにはlist-unit-filesサブコマンドを使用します。
よって正解は
・systemctl list-unit-files
です。
実行例:ユニットの一覧の取得
実行例:インストール前後での変化
その他の選択肢はすべて存在しないサブコマンドのため誤りです。
参考
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]項目に記述されていることがわかります。
サービスの自動起動を無効にすると、作成されたシンボリックリンクが自動で削除されます。
list-unit-filesに関するマニュアル検索
systemctlのマニュアルには、下記のようにlist-unit-filesの記載があるのですが、
$man systemctl
SYSTEMCTL(1) systemctl
SYSTEMCTL(1)NAME
systemctl - Control the systemd system and service manager
Use list-unit-files (see below) for listing installed unit template files.
"man -K list-unit-files"を用いて検索しても、No manual entry for list-unit-filesとなってしまいました。
調べ方が悪いのでしょうか?
$man -K list-unit-files
No manual entry for list-unit-files
以前man -K rescue.target
で検索にヒットしなかったという件と同様の話になりますが、 man systemctl
のソースファイルである/usr/share/man/man1/systemctl.1.gz の中ではlist-unit-files は
\fBlist\-unit\-files\fR
のように書かれていて、ハイフンの前にバックスラッシュが入っているため、man -K list-unit-files
ではヒットしません。man -K 'list\-unit\-files'
とすればヒットします。
ドットやハイフンのような特殊文字が入っている文字列は、man -K
では検索できないと思っておくのが無難でしょう。今回のような経験を積んでいけば「ハイフンの前にはバックスラッシュがありそうなので、ハイフン付きで検索してみよう」とか思いつくようになるのかもしれませんが。
コメント
Use list-unit-files (see below) for listing installed unit template files.
って書いてあるので、そのmanページの中に記載があるかと思います。と言うか、こう言う使用方法のことですよね?
# systemctl list-unit-files | head -n 10
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
dev-hugepages.mount static
dev-mqueue.mount static
proc-sys-fs-binfmt_misc.mount static
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug.mount static
tmp.mount disabled
brandbot.path enabled
コメント
この投稿に対して返信しませんか?
t tnishita2
2023/12/20 20:39
[誤] ハイフン付きで検索してみよう [正] バックスラッシュ付きで検索してみよう