main
Федоров Дмитрий 2024-07-09 13:09:27 +03:00
parent ebf7fb7f04
commit fdaec73179
4 changed files with 189 additions and 0 deletions

View File

@ -72,3 +72,192 @@ SystemD был создан для централизации линукса, и
Итак, вернемся к systemd.
# Анализ ресурсов системы
Для анализа системы существует утилита **systemd-analyze**.
Итак, если вы запустите ее, то вы увидите следующее:
![alt text](image-3.png)
Как мы видим, за 7 секунд загрузилось ядро а за 11 секунд — пользовательское пространство. Всего система загрузилась за 18.5 секунд.
Если вам этого недостаточно, то можно использовать команду systemd-analyze blame, которая показывает также время запуска сервисов:
```bash
$ systemd-analyze blame
3.869s dev-sda2.device
2.288s NetworkManager.service
1.606s user@1000.service
1.467s systemd-tmpfiles-setup-dev-early.service
1.445s upower.service
1.215s systemd-udev-trigger.service
996ms systemd-journal-flush.service
996ms systemd-journald.service
919ms systemd-rfkill.service
900ms iio-sensor-proxy.service
769ms systemd-tmpfiles-setup.service
653ms systemd-logind.service
546ms accounts-daemon.service
518ms polkit.service
459ms systemd-udevd.service
445ms systemd-tmpfiles-clean.service
425ms systemd-userdbd.service
395ms udisks2.service
384ms systemd-timesyncd.service
# ...
```
Здесь мы можем увидеть каждый сервис, от Network Manager до демона логина. Это бывает очень полезно при оптимизации системы.
Затем мы также можем просмотреть дерево time-critical цепи для конкретной утилиты или вывести список указанных утилит с подкомандой critical-chain:
```bash
$ systemd-analyze critical-chain
The time when unit became active or started is printed after the @ character.
The time the unit took to start is printed after the + character.
graphical.target @11.201s
└─multi-user.target @10.795s
└─systemd-user-sessions.service @10.647s +131ms
└─network.target @10.613s
└─NetworkManager.service @8.317s +2.288s
└─basic.target @8.189s
└─dbus-broker.service @7.896s +269ms
└─dbus.socket @7.867s
└─sysinit.target @7.799s
└─systemd-timesyncd.service @7.414s +384ms
└─systemd-tmpfiles-setup.service @6.604s +769ms
└─local-fs.target @6.553s
└─boot.mount @6.317s +233ms
└─dev-sda1.device @6.291s
```
Наконец, давайте рассмотрим еще одну важную подкоманду, которая позволяет создавать графически (svg-формат) детализированные системные службы, которые были запущены.
```bash
$ systemd-analyze plot " boot_analysis.svg
```
Также можно использовать **systemd-analyze** на удаленном сервере при помощи ssh:
```bash
systemd-analyze time -H "username"@"host"
systemd-analyze blame -H "username"@"host"
systemd-analyze critical-chain -H "username"@"host"
```
# systemd-ac-power
Утилита, для того чтобы узнать, подключены ли мы к внешнему источнику питания.
```bash
$ systemd-ac-power -v # получаем состояние батареи (подключена ли к источнику питания)
yes
$ systemd-ac-power -v --low # разряжена ли батарея
no
```
# systemd-ask-password
Системная утилита для запрашивания пароля через TTY или UI.
```bash
systemd-ask-password [OPTIONS...] MESSAGE
Query the user for a system passphrase, via the TTY or a UI agent.
-h --help Show this help
--icon=NAME Icon name
--id=ID Query identifier (e.g. cryptsetup:/dev/sda5)
--keyname=NAME Kernel key name for caching passwords (e.g. cryptsetup)
--credential=NAME
Credential name for ImportCredential=, LoadCredential= or
SetCredential= credentials
--timeout=SEC Timeout in seconds
--echo=yes|no|masked
Control whether to show password while typing (echo)
-e --echo Equivalent to --echo=yes
--emoji=yes|no|auto
Show a lock and key emoji
--no-tty Ask question via agent even on TTY
--accept-cached Accept cached passwords
--multiple List multiple passwords if available
--no-output Do not print password to standard output
-n Do not suffix password written to standard output with
newline
See the systemd-ask-password(1) man page for details.
```
# systemd-cat
Утилита для выполнения процессов с выводом stdout/stderr, подключенный к системному журналу.
```bash
systemd-cat [OPTIONS...] COMMAND ...
Execute process with stdout/stderr connected to the journal.
-h --help Show this help
--version Show package version
-t --identifier=STRING Set syslog identifier
-p --priority=PRIORITY Set priority value (0..7)
--stderr-priority=PRIORITY Set priority value (0..7) used for stderr
--level-prefix=BOOL Control whether level prefix shall be parsed
See the systemd-cat(1) man page for details.
```
# systemd-resolve
Специальная команда, которая отвечает за файл /etc/resolv.conf. Разрешает доменные имена, адреса и т.д. При неправильном конфиге resolv«а вы не сможете работать в интернете.
```bash
systemd-resolve [OPTIONS...] HOSTNAME|ADDRESS...
systemd-resolve [OPTIONS...] --service [[NAME] TYPE] DOMAIN
systemd-resolve [OPTIONS...] --openpgp EMAIL@DOMAIN...
systemd-resolve [OPTIONS...] --statistics
systemd-resolve [OPTIONS...] --reset-statistics
Resolve domain names, IPv4 and IPv6 addresses, DNS records, and services.
-h --help Show this help
--version Show package version
--no-pager Do not pipe output into a pager
-4 Resolve IPv4 addresses
-6 Resolve IPv6 addresses
-i --interface=INTERFACE Look on interface
-p --protocol=PROTO|help Look via protocol
-t --type=TYPE|help Query RR with DNS type
-c --class=CLASS|help Query RR with DNS class
--service Resolve service (SRV)
--service-address=BOOL Resolve address for services (default: yes)
--service-txt=BOOL Resolve TXT records for services (default: yes)
--openpgp Query OpenPGP public key
--tlsa Query TLS public key
--cname=BOOL Follow CNAME redirects (default: yes)
--search=BOOL Use search domains for single-label names
(default: yes)
--raw[=payload|packet] Dump the answer as binary data
--legend=BOOL Print headers and additional info (default: yes)
--statistics Show resolver statistics
--reset-statistics Reset resolver statistics
--status Show link and server status
--flush-caches Flush all local DNS caches
--reset-server-features
Forget learnt DNS server feature levels
--set-dns=SERVER Set per-interface DNS server address
--set-domain=DOMAIN Set per-interface search domain
--set-llmnr=MODE Set per-interface LLMNR mode
--set-mdns=MODE Set per-interface MulticastDNS mode
--set-dnsovertls=MODE Set per-interface DNS-over-TLS mode
--set-dnssec=MODE Set per-interface DNSSEC mode
--set-nta=DOMAIN Set per-interface DNSSEC NTA
--revert Revert per-interface configuration
See the resolvectl(1) man page for details.
```
# Другие systemd-команды
Другие команды и ссылки на команды вы можете видеть ниже. Для просмотра справки запустите с флагом --help или посмотрите страницу мануалов (man).
![alt text](image-4.png)
# Компоненты systemD
systemd — набор базовых компонентов Linux-системы. Представляет собой менеджер системы и служб, который выполняется как процесс с PID 1 и запускает остальную часть системы. Основная особенность — интенсивное распараллеливание запуска служб в процессе загрузки системы, что позволяет существенно ускорить запуск операционной системы.
А также systemD очень разросся — он отвечает за несколько базовых вещей — интернет, ядро, журналирование и многое другое.
![alt text](image-5.png)
Systemd приносит концепцию юнитов systemd. Юниты — это некая абстракция, она содержит имя, зависимости, команды, описание, права. Юниты представлены конфигурационными файлами, размещенными в одной из директорий:
* `/usr/lib/systemd/system/` юниты из установленных пакетов RPM.
* `/run/systemd/system/` — юниты, созданные в рантайме. Этот каталог приоритетнее каталога с установленными юнитами из пакетов.
* `/etc/systemd/system/` — юниты, созданные и управляемые системным администратором. Этот каталог приоритетнее каталога юнитов, созданных в рантайме.
Конфигурационные файлы похожи на ini-файлы:

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB