Содержание
Поиск по процессам
Первый вариант – выполнить ps -aux | [initname]
.
Например, Ubuntu 12 и 14 используют Upstart:
$ ps aux | grep upstart root 354 0.0 0.1 19472 648 ? S 16:31 0:00 upstart-udev-bridge --daemon root 566 0.0 0.1 15256 636 ? S 16:31 0:00 upstart-socket-bridge --daemon root 906 0.0 0.1 15272 644 ? S 16:31 0:00 upstart-file-bridge --daemon vagrant 2326 0.0 0.1 10436 884 pts/0 S+ 17:58 0:00 grep --color=auto upstart
А Ubuntu 16 – Systemd:
$ ps aux | grep systemd root 236 0.0 0.5 27712 2800 ? Ss 16:37 0:00 /lib/systemd/systemd-journald root 276 0.0 0.8 44708 4352 ? Ss 16:37 0:00 /lib/systemd/systemd-udevd root 494 0.0 0.6 28624 3136 ? Ss 16:37 0:00 /lib/systemd/systemd-logind message+ 525 0.0 0.7 42892 3740 ? Ss 16:37 0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation vagrant 2297 0.0 0.9 45248 4524 ? Ss 17:58 0:00 /lib/systemd/systemd --user vagrant 2345 0.0 0.2 14200 1080 pts/0 S+ 17:59 0:00 grep --color=auto systemd
Так же, как и CentOS 7:
$ ps aux | grep systemd root 423 0.0 0.0 52224 2444 ? Ss кві22 0:00 /lib/systemd/systemd-udevd --daemon root 523 0.0 0.0 43520 2764 ? Ss кві22 0:00 /lib/systemd/systemd-logind root 2057 0.0 0.0 177996 1020 ? Sl кві22 0:00 /usr/lib/x86_64-linux-gnu/systemd-shim setevoy 27775 0.0 0.0 13200 2372 pts/11 S+ 21:00 0:00 grep systemd
А CentOS 6 – использует Upstart, но с процессом init
:
$ ps aux | grep init root 1 0.0 0.2 19232 1496 ? Ss 16:37 0:02 /sbin/init vagrant 2687 0.0 0.1 103308 928 pts/0 S+ 18:00 0:00 grep init
Еще один способ проверить систему с помощью процессов – узнать имя процесса с PID == 1.
Ubuntu 12, 14:
ps -p 1 PID TTY TIME CMD 1 ? 00:00:00 init
Ubuntu 16:
$ ps -p 1 PID TTY TIME CMD 1 ? 00:00:03 systemd
Поиск по файлам
Второй способ – это просто выполнить /sbin/init
с опцией --version
.
Ubuntu 12, 14 и CentOS 6 с Upstart вернут:
$ /sbin/init --version init (upstart 1.12.1) Copyright (C) 2006-2014 Canonical Ltd., 2011 Scott James Remnant This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
А CentOS 7 и Ubuntu 16:
$ /sbin/init --version /sbin/init: unrecognized option '--version'
Ещё один способ – проверить, чем является сам файл /sbin/init
.
Например, на Ubuntu 12 и 14:
$ file /sbin/init /sbin/init: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=7a4c688d009fc1f06ffc692f5f42ab09e68582b2, stripped
И Ubuntu 16:
$ file /sbin/init /sbin/init: symbolic link to /lib/systemd/systemd
Следующий вариант, тоже с помощью файловой системы – проверить симлинк exe
в каталоге /proc/1
, где 1 – PID первого процесса.
Ubuntu 12, 14, CentOS 6:
$ sudo ls -l /proc/1/exe lrwxrwxrwx 1 root root 0 May 3 16:31 /proc/1/exe -> /sbin/init
Ubuntu 16:
$ sudo ls -l /proc/1/exe lrwxrwxrwx 1 root root 0 May 3 18:13 /proc/1/exe -> /lib/systemd/systemd
И простой скрипт для определения системы:
$ cat getinit.sh #!/usr/bin/env bash # init process is pid 1 INIT=`ls -l /proc/1/exe` if [[ $INIT == *"upstart"* ]]; then SYSTEMINITDAEMON=upstart elif [[ $INIT == *"systemd"* ]]; then SYSTEMINITDAEMON=systemd elif [[ $INIT == *"/sbin/init"* ]]; then INIT=`/sbin/init --version` if [[ $INIT == *"upstart"* ]]; then SYSTEMINITDAEMON=upstart elif [[ $INIT == *"systemd"* ]]; then SYSTEMINITDAEMON=systemd fi fi if [ -z "$SYSTEMINITDAEMON" ]; then echo "WARNING: Unknown distribution, assuming defaults - this may fail." >&2 else echo "Init system discovered: $SYSTEMINITDAEMON" fi
Выполнение на Ubuntu 12, 14 и CentOS 6:
$ sudo bash getinit.sh Init system discovered: upstart
Ubuntu 16:
$ sudo bash getinit.sh Init system discovered: systemd
Примеры взяты тут>>>.