By ribbon @
2022-12-07 21:40
この記事は openSUSE Advent Calendar 2022 の5日目です。
systemd が使われるようになると、daemon の制御とかのやり方は大きく変わりました。/etc/init.d にあるスクリプトから、systemd パッケージに含まれるコマンドを使うようになってきました。それらのコマンドは、xxxxxctl という、末尾に ctl が含まれるものが多いように感じました。そこで、/usr/bin/ の中にある、末尾が ctl なプログラムがどんなものかを簡単に調べて見ることにしました。
今回は、hostnamectl を紹介します。
コマンド名: hostnamectl
パッケージ: systemd-249.12-150400.8.13.1.x86_64
動作: ○
詳細:
hostnamectl は、システムのホスト名や関連する情報の表示や変更を行うプログラムです。昔ながらの、ホスト名を表示するプログラム hostname は、引数を指定しないで入力すると、単にホスト名を返すだけですが、hostnamectl を引数を指定しないで実行すると、
|
Static hostname: suse154 Icon name: computer-vm Chassis: vm Machine ID: 61ee5253e44f403c9918308e232c84b8 Boot ID: 2dc4f7eae3724c6497708a64e08a516c Virtualization: kvm Operating System: openSUSE Leap 15.4 CPE OS Name: cpe:/o:opensuse:leap:15.4 Kernel: Linux 5.14.21-150400.24.33-default Architecture: x86-64 Hardware Vendor: QEMU Hardware Model: Standard PC _i440FX + PIIX, 1996_ |
と、たくさんの情報を表示します。今回テストしている環境が KVM 配下であることもバレてしまいます。旧来の hostname コマンドと互換を取るには、引数として hostname を指定すれば良いです。単に hostname を返します。
もちろん、root でないとできませんが、host 名を変更することも可能です。
|
# hostnamectl hostname suse154A # hostnamectl hostname suse154A |
そのほかに、JSON形式で出力することも可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
hostnamectl --json=pretty { "Hostname" : "suse154", "StaticHostname" : "suse154", "PrettyHostname" : null, "DefaultHostname" : "localhost", "HostnameSource" : "static", "IconName" : "computer-vm", "Chassis" : "vm", "Deployment" : null, "Location" : null, "KernelName" : "Linux", "KernelRelease" : "5.14.21-150400.24.33-default", "KernelVersion" : "#1 SMP PREEMPT_DYNAMIC Fri Nov 4 13:55:06 UTC 2022 (76cfe60)", "OperatingSystemPrettyName" : "openSUSE Leap 15.4", "OperatingSystemCPEName" : "cpe:/o:opensuse:leap:15.4", "OperatingSystemHomeURL" : "https://www.opensuse.org/", "HardwareVendor" : "QEMU", "HardwareModel" : "Standard PC _i440FX + PIIX, 1996_", "ProductUUID" : null } |
JSON 形式で出力する場合、hostname オプションを指定すると、json 機能は無効になってしまうようです。
従来からの hostname コマンドもたぶん残っていくとは思いますが、新しい hostnamectl コマンドも覚えて置いた方が良いかもしれません。
By ribbon @
2022-12-07 00:42
この記事は openSUSE Advent Calendar 2022 の7日目です。
systemd が使われるようになると、daemon の制御とかのやり方は大きく変わりました。/etc/init.d にあるスクリプトから、systemd パッケージに含まれるコマンドを使うようになってきました。それらのコマンドは、xxxxxctl という、末尾に ctl が含まれるものが多いように感じました。そこで、/usr/bin/ の中にある、末尾が ctl なプログラムがどんなものかを簡単に調べて見ることにしました。
今回は、loginctl を紹介します。
コマンド名: localectl
パッケージ: systemd-249.12-150400.8.13.1.x86_64
動作: ○
詳細:
loginctl は、systemd の login マネージャからの情報を表示したり設定するためのツールです。表示に関しては、従来の w コマンドや ps コマンド などの機能が含まれています。たとえば、現在ログインしている情報は、下記のように表示されます。
|
%loginctl SESSION UID USER SEAT TTY 11 1000 ribbon pts/0 12 1000 ribbon pts/2 13 0 root 6 1000 ribbon seat0 tty2 |
w コマンドではこのように表示されます。表示する内容がかなり異なります。
|
%w 20:10:49 up 12:55, 5 users, load average: 0.00, 0.01, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT ribbon : : 15:20 ?xdm? 2:18 0.07s gdm-session-worker [pam/gdm-password] ribbon tty2 tty2 15:20 12:55m 0.08s 0.08s /usr/lib/gnome-session-binary ribbon pts/0 192.168.X.Y 18:17 10:29 0.28s 0.00s less ribbon pts/2 192.168.X.Y 19:46 1.00s 0.11s 0.01s w root pts/3 ::1 20:02 7:58 0.09s 0.09s -bash |
自分自身のセッション情報は session-status サブコマンドで表示できます。
|
%loginctl session-status 12 - ribbon (1000) Since: Sat 2022-12-03 19:46:34 JST; 28min ago Leader: 7798 (sshd) TTY: pts/2 Remote: 192.168.X.Y Service: sshd; type tty; class user State: active Unit: session-12.scope ┣ 7798 "sshd: ribbon [priv]" "" ┣ 7800 "sshd: ribbon@pts/2" "" "" ┣ 7801 -bash ┣ 8134 loginctl session-status ┗ 8135 less |
さらに、 user-status サブコマンドで、詳細な情報を得ることができます。pstree コマンドにも似た感じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
%loginctl user-status ribbon (1000) Since: Sat 2022-12-03 15:20:50 JST; 5h 8min ago State: active Sessions: 12 11 *6 Linger: no Unit: user-1000.slice ┣session-11.scope ┃┣ 7431 "sshd: ribbon [priv]" "" ┃┣ 7437 "sshd: ribbon@pts/0" "" "" ┃┣ 7438 -bash ┃┣ 7780 man loginctl ┃┗ 7792 less ┣session-12.scope ┃┣ 7798 "sshd: ribbon [priv]" "" ┃┣ 7800 "sshd: ribbon@pts/2" "" "" ┃┣ 7801 -bash ┃┣ 8270 loginctl user-status ┃┗ 8271 less ┣session-6.scope ┃┣ 4748 "gdm-session-worker [pam/gdm-password]" ┃┣ 4778 /usr/bin/gnome-keyring-daemon --daemonize --login ┃┣ 4784 /usr/lib/gdm/gdm-wayland-session /usr/bin/gnome-session ┃┣ 4788 /usr/lib/gnome-session-binary ┃┗ 7997 /usr/bin/ssh-agent -D -a /run/user/1000/keyring/.ssh ┗user@1000.service ┣app.slice ┃┣app-gnome-YaST2\x2dorg.opensuse.yast.LAN-5394.scope ┃┃┣ 5523 dbus-launch --autolaunch 61ee5253e44f403c9918308e232c84b8 --binary-syntax> ┃┃┗ 5524 /usr/bin/dbus-daemon --syslog-only --fork --print-pid 5 --print-address 7> ┃┣app-gnome-gnome\x2dsoftware\x2dservice-5036.scope ┃┃┗ 5036 /usr/bin/gnome-software --gapplication-service ┃┣app-gnome-org.gnome.Evolution\x2dalarm\x2dnotify-5045.scope ┃┃┗ 5045 /usr/lib/evolution-data-server/evolution-data-server/evolution-alarm-noti> ┃┣app-gnome-org.gnome.SettingsDaemon.DiskUtilityNotify-5018.scope ┃┃┗ 5018 /usr/lib/gsd-disk-utility-notify |
そのほかに、セッションを強制切断する kill-session サブコマンドがあります。たとえば、ssh でログインしているセッションを強制切断するためには、
1) w コマンドでユーザを調べる
2) そのユーザが使っている sshd プロセスを ps コマンドで調べる
3) kill コマンドでそのプロセスを終了させる。
というステップが必要でしたが、loginctl では、セッション番号を表示させた後、そのセッションを終了するコマンドを入力することで作業が行えますので、手間が減ります。
|
# loginctl SESSION UID USER SEAT TTY 11 1000 ribbon pts/0 12 1000 ribbon pts/2 13 0 root 6 1000 ribbon seat0 tty2 4 sessions listed. # loginctl kill-session 13 # loginctl SESSION UID USER SEAT TTY 11 1000 ribbon pts/0 12 1000 ribbon pts/2 6 1000 ribbon seat0 tty2 3 sessions listed. |
loginctl は、表示形式が見やすいので、w コマンドなどと併用すると便利でしょう。