如何阅读“service –status-all”结果

我需要确定当前正在运行的服务,但我无法弄清楚运行service --status-all的结果service --status-all ,我的意思是什么呢?+是什么意思?

 $ service --status-all [ + ] acpid [ + ] anacron [ + ] apparmor [ ? ] apport [ ? ] atieventsd [ + ] avahi-daemon [ ? ] binfmt-support [ + ] bluetooth [ - ] brltty [ + ] console-font [ + ] console-setup [ + ] cron [ + ] cups [ + ] cups-browsed [ - ] dbus [ ? ] dns-clean [ + ] friendly-recovery [ - ] grub-common [ ? ] irqbalance [ - ] kerneloops [ ? ] killprocs [ + ] kmod [ ? ] lightdm [ - ] lm-sensors [ ? ] mysql [ ? ] networking [ ? ] ondemand [ ? ] pppd-dns [ - ] procps [ - ] pulseaudio [ ? ] rc.local [ + ] resolvconf [ + ] rfkill-restore [ + ] rfkill-store [ - ] rsync [ + ] rsyslog [ + ] saned [ ? ] sendsigs [ + ] setvtrgb [ ? ] speech-dispatcher [ - ] sudo [ + ] timidity [ + ] udev [ ? ] umountfs [ ? ] umountnfs.sh [ ? ] umountroot [ - ] unattended-upgrades [ - ] urandom [ + ] virtualbox [ - ] x11-common 

用sudo运行这个命令会有什么不同吗? 我试过了,在我的情况下,它没有任何区别,但可能在其他设置上有所不同?

service --status-all输出service --status-all列出了System V控制的服务状态。

+表示服务正在运行, -表示已停止的服务。 您可以通过运行+-服务的service SERVICENAME status来查看此信息。

有些服务由Upstart管理。 您可以使用sudo initctl list检查所有Upstart服务的状态。 由Upstart管理的任何服务也将显示在service --status-all提供的列表中service --status-all但会标记为?

参考: man service

它没有在联机帮助页中记录,但快速查看源代码确认了第一个猜测:

  • + :服务正在运行
  • - :服务没有运行
  • ? :无法确定服务状态(由于某种原因)。

实际代码 :

  if ! is_ignored_file "${SERVICE}" \ && [ -x "${SERVICEDIR}/${SERVICE}" ]; then if ! grep -qs "\(^\|\W\)status)" "$SERVICE"; then #printf " %s %-60s %s\n" "[?]" "$SERVICE:" "unknown" 1>&2 echo " [ ? ] $SERVICE" 1>&2 continue else out=$(env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" status 2>&1) if [ "$?" = "0" -a -n "$out" ]; then #printf " %s %-60s %s\n" "[+]" "$SERVICE:" "running" echo " [ + ] $SERVICE" continue else #printf " %s %-60s %s\n" "[-]" "$SERVICE:" "NOT running" echo " [ - ] $SERVICE" continue fi fi #env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" status fi 

条件是:

  • 如果init脚本不支持status命令,状态是?
  • 如果init脚本(带有status参数)退出状态为零输出不为空,则状态为+
  • 否则国家是-

我相信+意味着服务处于活动/运行状态, -意味着它处于非活动/停止状态,并且? 表示该命令无法确定是否处于活动状态,因为该服务在服务脚本中没有status命令。 service --status-all命令实际上为每个可用服务运行service status

我发现使用/不使用sudo运行会产生影响。

/var/run/某些服务只对root用户具有读访问权限。 这些服务显示状态[-]没有sudo[+]显示sudo