Почему «sudo ls ~» показывает содержимое /home/username, а не /root?

systemd не подвох -все. Это не будет решением всех проблем, однако оно даст вам множество инструментов, помогающих решать проблемы. Полезность этих инструментов сводится к тому, насколько хорошо вы можете их использовать.

Давайте посмотрим на очень простой служебный файлcheck-time.service(обратите внимание, что я создал этот служебный файл вручную, используя другие служебные файлы, расположенные в /usr/lib/systemd/system/в качестве ссылок):

[Unit]
Description=Checks the time every second

[Service]
Type=simple
ExecStart=/usr/bin/check-time.py

Служебный файл принадлежит /usr/lib/systemd/system/или /etc/systemd/system/для использования systemd

.


Построчно

[*]Заголовки разделов. Это просто групповые директивы. Вы можете найти ссылки на то, какие директивы где принадлежат, в systemdсправочных страницах:

[Единица измерения] секция

[Сервис] секция

[Установить] раздел

Описание

A free-form string describing the unit. This is intended for use in UIs to show descriptive information along with the unit name. The description should contain a name that means something to the end user. "Apache2 Web Server" is a good example. Bad examples are "high-performance light-weight HTTP server" (too generic) or "Apache2" (too specific and meaningless for people who do not know Apache).

тип

Configures the process start-up type for this service unit. One of simple, forking, oneshot, dbus, notify or idle.

If set to simple (the default if neither Type= nor BusName=, but ExecStart= are specified), it is expected that the process configured with ExecStart= is the main process of the service. In this mode, if the process offers functionality to other processes on the system, its communication channels should be installed before the daemon is started up (e.g. sockets set up by systemd, via socket activation), as systemd will immediately proceed starting follow-up units.

Старт выполнения

Commands with their arguments that are executed when this service is started. The value is split into zero or more command lines according to the rules described below (see section "Command Lines" below).


Резюме

Этот служебный файл просто запускал команду /usr/bin/check-time.pyпри запуске. Если команда завершится, то она будет считаться «мертвой», пока она продолжает работать, она считается «активной».

Насколько полезен этот служебный файл? Ну не очень. Поскольку это единственное, что он делает, это позволяет вам запускать скрипт Python, используя systemctl start check-time.serviceвместо обычного полного пути, однако есть множество дополнительных опций, которые могут быть полезны.


Полезные параметры

WantedBy Если вы хотите, чтобы служба запускалась при загрузке, установите WantedBy=цель по умолчанию.

Перезапуск Определяет, когда systemdследует автоматически перезапускать службу, например, «всегда» или «при -сбое»

Буквально сотни других параметров, включая ограничение использования оборудования, выбор пользователя для выполнения процесса, настройку переменных среды, настройку зависимостей и многое другое. systemdполезен из-за всех дополнительных функций, которые он предоставляет, а не только потому, что он может обертывать вещи.

-4
24.08.2019, 10:06
1 ответ

Оболочка расширяется ~перед запуском sudo; вы можете увидеть это в действии сset -x:

$ set -x
$ sudo ls ~
+ sudo ls /home/skitt

, который показывает, что фактически запущенная команда уже имеет расширенный домашний каталог, используя текущего пользователя во время расширения.

Чтобы увидеть домашний каталог целевого пользователя, вы должны отложить расширение тильды:

sudo bash -c 'ls ~'
7
28.01.2020, 05:19

Теги

Похожие вопросы