우분투의 시스템 유닛 / 서비스는 어디에 있습니까?


23

인터넷 검색 중에 / usr / lib / systemd / system / 및 / etc / systemd / system /에 있습니다. 그러나 내 우분투에는 첫 번째조차 존재하지 않으며 다른 하나는 서비스가 거의 없습니다.

bluetooth.target.wants                      default.target.wants           hybrid-sleep.target.wants    shutdown.target.wants
dbus-org.bluez.service                      display-manager.service        multi-user.target.wants      sockets.target.wants
dbus-org.freedesktop.Avahi.service          display-manager.service.wants  network-online.target.wants  suspend.target.wants
dbus-org.freedesktop.ModemManager1.service  getty.target.wants             paths.target.wants           sysinit.target.wants
dbus-org.freedesktop.nm-dispatcher.service  graphical.target.wants         plexmediaserver.service      syslog.service
dbus-org.freedesktop.thermald.service       hibernate.target.wants         printer.target.wants         timers.target.wants

다른 사람은 어디에 있습니까?

systemctl list-units를 실행하면 너무 많은 서비스가 표시되지만 어디에서 찾을 수 있는지 모르겠습니다. 예를 들어, plexmediaserver.service는 어디에 있습니까? 그것이 다른 유닛을 넣고 싶은 곳이기 때문에 알아야합니다.

답변:


33

패키지 제공 서비스 파일은 모두 일반적으로에 있습니다 /lib/systemd/system. 예를 들어 package index에서 검색 .service하십시오 .

보낸 사람 man systemd.unit:

/etc/systemd/system/*
/run/systemd/system/*
/lib/systemd/system/*
...

$XDG_CONFIG_HOME/systemd/user/*
$HOME/.config/systemd/user/*
/etc/systemd/user/*
$XDG_RUNTIME_DIR/systemd/user/*
/run/systemd/user/*
$XDG_DATA_HOME/systemd/user/*
$HOME/.local/share/systemd/user/*
/usr/lib/systemd/user/*

후자는 사용자 세션을위한 것입니다. IIRC Ubuntu 16.04는 여전히 사용자 세션에 시작을 사용하므로 해당 파일은 16.04 이후에만 적용 할 수 있습니다.

특정 서비스의 경우 systemd가 무엇을 읽고, 실행 systemctl status <service>하는지 또는 systemctl show <service>:

$ systemctl show ssh.service | grep Path
FragmentPath=/lib/systemd/system/ssh.service
DropInPaths=/etc/systemd/system/ssh.service.d/override.conf
$ systemctl status ssh.service
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/ssh.service.d
           └─override.conf
   Active: active (running) since Thu 2017-01-26 16:06:53 JST; 21h ago
 Main PID: 948 (sshd)
   CGroup: /system.slice/ssh.service
           └─948 /usr/sbin/sshd -D

1
감사합니다! 또한 다른 사람들은 어디에 있습니까? systemd init 프로세스가 찾는 모든 장소를 알고 싶습니다
Guerlando OCs

1
@GuerlandoOCs는 업데이트를 참조하십시오.
muru

11

무언가를 찾아야 할 때마다 알아야 할 유용한 도구가 있습니다.

첫 번째는 locate이름으로 파일을 찾는 데 사용됩니다. 사전 빌드 된 인덱스를 사용하므로 매우 빠릅니다. 그러나 인덱싱되지 않은 새 파일이 누락되거나 제한적인 권한이있는 파일이 누락 될 수 있습니다. 이 경우 빠른 locate명령은 Ubuntu에서 모든 시스템 파일을 찾습니다.

locate systemd

해당 Plex 파일에 초점을 맞추려면 파이프를 사용하여 결과를 필터링 할 수 있습니다.

locate systemd | grep plex

알아야 할 다른 도구는 find파일을 찾기 위해 특정 디렉토리를 실시간으로 검색하는입니다. 그것은이 많은 옵션을. man find자세한 내용을 확인 하십시오. plexmediaserver.service시스템의 아무 곳이나 찾으려면 다음을 사용하십시오.

find / -name plexmediaserver.service

마지막으로이 경우 찾고있는 파일이 속한 패키지 를 알고있을 것입니다 . 정확한 패키지 이름을 모르는 경우이 구문을 사용하여 이름에 'plex'가 포함 된 모든 패키지를 찾을 수 있습니다.

dpkg -l '*plex*'

관심있는 패키지의 이름이 'plexmediaserver'인 경우이 구문을 사용하여 해당 패키지의 모든 파일을 나열 할 수 있습니다.

dpkg -L plexmediaserver

파이프를 사용하여 원하는 서비스 파일로 결과를 필터링 할 수 있습니다.

dpkg -L plexmediaserver | grep plexmediaserver.service

이제 많은 일반적인 경우에 대한 파일을 찾을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.