9

How could I know if my linux starts with systemd or whatever package?

15

Check what process is running as PID 1. You can do this by running ps aux | less and scrolling to the top. If you have some systemd thing running as PID 1, you have systemd running.

Alternatively, run systemctl to list running systemd units.

You might also want to check what /sbin/init is; file /sbin/init will tell you if it's a real executable or if it's a symbolic link to some other package's executable. On a systemd box, for example:

root@boxy / # file /sbin/init
/sbin/init: symbolic link to ../lib/systemd/systemd

For more information, check this out: https://en.wikipedia.org/wiki/Linux_startup_process

EDIT: As noted by deltab's comment, rather than using ps aux | less, ps 1 is a better way to do this. Thanks for clearing that up!

EDIT2: Another way of seeing exactly what you have on your system is typing man init and seeing which program's man page you end up on.

  • 2
    An easier way to see what's running with pid 1 is ps 1 (the number 1). – deltab Dec 26 '15 at 1:58
  • @deltab Thanks for clearing that up! I'll edit it into the answer. – ecube Dec 26 '15 at 2:28
  • Great guys(@deltab,@dma1324)!!! My ps 1 shows /sbin/init, and my file /sbin/init shows a binary, so I think it's not systemd. Then I have tried to run the systemctl command and get the "command not found" error, so now I'm sure I have not systemd on my linux. – Lucho Dec 26 '15 at 8:19
8

I know this is an old question, but since I was just asking myself the same question - here are my 2ct.

Best solution I came up with

ps --no-headers -o comm 1

This returns either systemd or init and appears reliable across Linux distributions and releases.

file /sbin/init would work, with help of pattern matching. Output of ps 1 does not appear helpful since on some Linux distributions it will print 'init' (the symlink) despite systemd being used.

Debian 8

$ ps 1
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:02 /sbin/init
$ file /sbin/init
/sbin/init: symbolic link to /lib/systemd/systemd

RHEL 7

$ ps 1
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     7:46 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
$ file /sbin/init
/sbin/init: symbolic link to `../lib/systemd/systemd'

SLES 12

$ ps 1
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:24 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
$ file /sbin/init
/sbin/init: symbolic link to `../usr/lib/systemd/systemd'

openSUSE 13.1

$ ps 1
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:33 /sbin/init showopts
$ /sbin/init: symbolic link to `../usr/lib/systemd/systemd'
0

Best answer I found so far was to ask the package manager of your distro which package installed the /sbin/init file. For example, on debian-based, that would be

dpkg -S /sbin/init

If /sbin/init doesn't exist on your system, you can look for what program as pid 1 instead with ps 1.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.