:PROPERTIES: :ID: 20830b22-9e55-42a6-9cef-62a1697ea63d :END: #+title: systemd #+date: "2021-05-20 22:37:22 +08:00" #+date_modified: "2022-09-29 12:21:34 +08:00" #+language: en #+property: header-args :eval no systemd is a big tool for a big system. Let's explore some of them from a perspective of a wannabe power user. Among other things, it has the following list of features. - [[id:f1b21fc8-86a5-47cd-b3d8-da6ac7a34427][systemd timers]] which can replace cron for task scheduling. - [[id:cd5f0d04-d9bb-44e8-a0f2-630ea58c1e94][systemd services]] along with the usual antics of a service manager such as managing dependencies and commands to run when killed. - [[id:a602f900-cdcf-4090-9278-d5926d80eedc][systemd transient units]] for quickly creating and scheduling one-off services. - [[id:14b49597-011c-4da1-b955-bed6059af4a3][systemd unit templates]] is handy for managing units that have common structure, enabling to start them quickly and dynamically. - [[id:3c67e623-c269-4c9b-9bdf-4ad677d46a35][systemd environment directives]] enable setting environment variables from a systemd-ful session. - [[id:e4dba4ef-71dd-4d30-9a2c-4ad97223510b][systemd-networkd]] is the network configuration manager in case you want to do [[id:a208dd50-2ebc-404d-b407-3ec2f556535e][Network configuration in Linux]]. - [[id:8505f1f0-f15b-4b04-91fc-12be01913ce6][systemd-boot]] is a bootloader mainly for UEFI-based systems. - [[id:d83c099a-fc11-4ccc-b265-4de97c85dcbe][systemd-journald]] is the system logging service providing a structured way to manage your logs from different units. - [[id:7fce893f-418f-42aa-b2b1-59d9f0993406][systemd unit hardening]] can help your services secure. * systemd at user-level :PROPERTIES: :ID: c7edff80-6dea-47fc-8ecd-e43b5ab8fb1e :END: systemd has the ability to run at user-level empowering the user to manage their own system with their own settings. It immensely helps separating user-specific settings from the system-wide settings. systemd looks for the units from certain paths. You can look for them from the =systemd.unit.5= manual page. To run systemd as a user instance, simply add a =--user= flag beforehand for =systemctl= and other systemd binaries, if applicable. #+begin_src shell :results none # See how different the output when run at user- and system-level. systemctl --user show-units systemctl show-units systemctl --user show-environment systemctl show-environment systemctl --user start $SERVICE #+end_src * Navigating systemd documentation :PROPERTIES: :ID: 352629df-916a-442a-b81c-af71ef34a475 :END: Because of the wide scope of the tool, it is best to know where you can find certain information. Here's an exhaustive list of the locations. - Most sensible distributions should include the manual pages from the software. systemd has a lot of them from knowing [[id:f1b21fc8-86a5-47cd-b3d8-da6ac7a34427][systemd timers]] at =systemd.timers.5=, the unit formats and their locations at =systemd.unit.5=. - =systemd.directives.7= is an index of configuration directives including unit keys, environment variables, and command line options for systemd-related things. Also contains the related manual pages for a deeper references. [fn:: How did I pass a year without knowing this?] - On a similar note, =systemd.index.7= is an alphabetical index of the important keywords found in systemd. * Extra information - =systemd.mount= units require the filename to be the mountpoint. Though, it has to be converted to what systemd accepts (e.g., =systemd-escape --path $PATH=). - systemd has a few usual units such as =default.target= which is a target for the current environment of the user. It can be get with =systemctl get-default= command. More can be seen with =systemd.special.7= from the manual. - Not all units are equal as systemd treats some units specially. You can see what these specific units are and what it does with =systemd.special.7= from the manual.