systemd関連のコマンドで面白そうなものを適当に。
systemd-catはコマンドの出力結果をjournalに書き込んでくれる。 例えば↓を実行してからjournalctlでログを見ると、
masami@saga:~$ systemd-cat ls -la /usr/bin/gcc
このように出力される。
Oct 12 14:28:48 saga [882]: -rwxr-xr-x 3 root root 820592 Sep 8 02:55 /usr/bin/gcc
コマンドの出力結果はpipeでsystemd-catに渡してもOK。
起動に掛かった時間の分析等ができる。 このようにカーネル側、ユーザーランド側の時間は別で見れる。
masami@saga:~$ systemd-analyze Startup finished in 2.167s (kernel) + 5.719s (userspace) = 7.886s
さらにblameオプションを付けることでunitの実行に掛かった時間をsortして出力してくれる。ちなみに、ウチの場合はGUIのloginに使ってるlightdmのlightdmユーザー設定のところが一番時間かかってますね。
masami@saga:~$ systemd-analyze blame 1.541s user@620.service 1.007s privoxy.service 568ms home.mount 407ms systemd-fsck@dev-disk-by\x2duuid-a72c84bb\x2dc5bc\x2d47e2\x2d8e35\x2dc9430f4f02d5.service 261ms libvirtd.service 213ms dhcpcd.service 171ms kdump.service
これはcgroupの階層を表示するコマンド。オプションを渡さない場合はこんな感じでsystemdに関するものがtree構造で出力される。ここで出力しているのは /sys/fs/cgroup/systemd/{system.slice,user.slice}の内容。
├─1 /sbin/init ├─system.slice │ ├─dbus.service │ │ └─387 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation │ ├─privoxy.service │ │ └─437 /usr/bin/privoxy --pidfile /run/privoxy.pid --user privoxy.privoxy /etc/privoxy/config │ ├─dhcpcd.service │ │ └─430 /usr/bin/dhcpcd -q -b │ ├─redis.service │ │ └─433 /usr/bin/redis-server 127.0.0.1:6379 │ ├─lightdm.service │ │ ├─416 /usr/bin/lightdm │ │ └─422 /usr/bin/Xorg.bin :0 -seat seat0 -auth /run/lightdm/root/:0 -nolisten tcp vt1 -novtswitch │ ├─systemd-journald.service │ │ └─185 /usr/lib/systemd/systemd-journald │ ├─upower.service │ │ └─669 /usr/lib/upower/upowerd │ ├─systemd-timesyncd.service │ │ └─378 /usr/lib/systemd/systemd-timesyncd │ ├─systemd-logind.service │ │ └─386 /usr/lib/systemd/systemd-logind │ ├─libvirtd.service │ │ ├─435 /usr/bin/libvirtd │ │ ├─542 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper │ │ └─543 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper │ ├─systemd-networkd.service │ │ └─405 /usr/lib/systemd/systemd-networkd │ ├─sshd.service │ │ └─434 /usr/bin/sshd -D │ ├─systemd-udevd.service │ │ └─199 /usr/lib/systemd/systemd-udevd │ ├─rpcbind.service │ │ └─418 /usr/bin/rpcbind -w │ └─polkit.service │ └─583 /usr/lib/polkit-1/polkitd --no-debug └─user.slice ├─user-1000.slice │ ├─user@1000.service │ │ ├─562 /usr/lib/systemd/systemd --user │ │ └─563 (sd-pam) │ └─session-c2.scope │ ├─ 548 lightdm --session-child 13 20 │ ├─ 565 /bin/sh /etc/xdg/xfce4/xinitrc -- /etc/X11/xinit/xserverrc
これはcpu、memoryなどのリソースの利用率が高いものをcgroup単位で表示してくれる。
libのパスとか各種パスを教えてくれる。system wideなディレクトリだけでなくてuser固有のもの(HOME、デスクトップ、ドキュメントとか)も表示される。
masami@saga:~$ systemd-path temporary: /tmp temporary-large: /var/tmp system-binaries: /usr/bin system-include: /usr/include system-library-private: /usr/lib system-library-arch: /usr/lib system-shared: /usr/share system-configuration-factory: /usr/share/factory/etc system-state-factory: /usr/share/factory/var system-configuration: /etc system-runtime: /run system-runtime-logs: /run/log system-state-private: /var/lib system-state-logs: /var/log system-state-cache: /var/cache system-state-spool: /var/spool ~ 略 ~
試していないんだけど、manを軽く見た感じだと新しいNamespaceを作り、引数で渡されたディレクトリにchrootしてコマンドを実行するらしい。 chroot先は普通にローカルファイルシステムでも良いし、ディスクイメージでも良いみたい。 Spawn a namespace container for debugging, testing and buildingと言っているのでちゃんとしたコンテナ環境が欲しいh場合はlxcなりdockerなり使えというところでしょうね。
新装改訂版 Linuxのブートプロセスをみる (アスキー書籍)
- 作者: 白崎博生
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/10/02
- メディア: Kindle版
- この商品を含むブログ (1件) を見る