我假设你的树莓使用的是raspian,据我所知,raspian还没有发展到systemd。在这种情况下,答案如下。
编辑:对于systemd(Jessie或更高版本),见底部。
首先,你可以通过命令来确定当前运行的是哪个系统。
sudo service --status-all
你会得到一个类似这样的列表:
[+] triggerhappy
[+] udev
[?] udev-mtab
[?] umountfs
[?] umountnfs.sh
[?] umountroot
[-] urandom
[+] vsftpd
[+] weewx
[-] x11-common
+的表示正在运行的服务,-的表示没有运行的服务,? 的表示不允许将status_作为可能的命令的服务:它们大多是不需要一直运行的命令,只是偶尔运行。
回到你的问题,你需要了解Linux中的runlevels。运行级别(0-6 + S)标识了哪些服务可以/必须运行。一个启动序列从初始运行级别(在/etc/inittab中指定,在我的Raspberry中是
# The default runlevel.
id:2:initdefault:
这一行将其标识为2,然后前进到发行版标准的最终运行级别(从2到5)。你可以通过命令
# runlevel
N 2
来识别你当前的运行级别(在我的例子中,是无头服务器)。其他的运行级别是(同样来自 é/etc/inittab/*):
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.
单一用户(1)通常也被识别为 S.
在一个正常的启动中,你从 2 开始,一直到 5。要找到在这个过程中启动的服务,请发出命令。
# grep -nrI Default-Start /etc/init.d
umountroot:7:# Default-Start:
checkroot.sh:8:# Default-Start: S
kbd:6:# Default-Start: S
isc-dhcp-server:11:# Default-Start: 2 3 4 5
mountkernfs.sh:7:# Default-Start: S
hostname.sh:7:# Default-Start: S
mountnfs.sh:7:# Default-Start: S
halt:6:# Default-Start:
dphys-swapfile:20:# Default-Start: 2 3 4 5
bootlogs:7:# Default-Start: 1 2 3 4 5
rc.local:6:# Default-Start: 2 3 4 5
hostapd:9:# Default-Start: 2 3 4 5
keyboard-setup:8:# Default-Start: S
lightdm:7:# Default-Start: 2 3 4 5
procps:11:# Default-Start: S
mysql:9:# Default-Start: 2 3 4 5
single:6:# Default-Start: 1
vsftpd:7:# Default-Start: 2 3 4 5
samba:7:# Default-Start: 2 3 4 5
mountall.sh:6:# Default-Start: S
weewx:20:# Default-Start: 2 3 4 5
umountnfs.sh:7:# Default-Start:
triggerhappy:6:# Default-Start: 2 3 4 5
ifplugd:24:# Default-Start: 2 3 4 5
alsa-utils:9:# Default-Start: S
bootmisc.sh:7:# Default-Start: S
sendsigs:6:# Default-Start:
console-setup:7:# Default-Start: S
nfs-common:7:# Default-Start: 2 3 4 5 S
checkroot-bootclean.sh:6:# Default-Start: S
rsyslog:7:# Default-Start: 2 3 4 5
x11-common:7:# Default-Start: S
mountdevsubfs.sh:7:# Default-Start: S
cron:10:# Default-Start: 2 3 4 5
mountnfs-bootclean.sh:6:# Default-Start: S
mountall-bootclean.sh:6:# Default-Start: S
screen-cleanup:11:# Default-Start: S
udev:6:# Default-Start: S
ssh:7:# Default-Start: 2 3 4 5
haveged:8:# Default-Start: 2 3 4 5
hwclock.sh:26:# Default-Start: S
plymouth:9:# Default-Start: 2 3 4 5
motd:7:# Default-Start: 1 2 3 4 5
killprocs:6:# Default-Start: 1
networking:6:# Default-Start: S
fake-hwclock:9:# Default-Start: S
udev-mtab:6:# Default-Start: S
apache2:6:# Default-Start: 2 3 4 5
reboot:6:# Default-Start:
umountfs:6:# Default-Start:
plymouth-log:9:# Default-Start: S
openvpn:11:# Default-Start: 2 3 4 5
kmod:8:# Default-Start: S
ntp:7:# Default-Start: 2 3 4 5
rpcbind:9:# Default-Start: S 2 3 4 5
urandom:6:# Default-Start: S
rmnologin:6:# Default-Start: 2 3 4 5
checkfs.sh:7:# Default-Start: S
sudo:8:# Default-Start: 2 3 4 5
mtab.sh:6:# Default-Start: S
dbus:6:# Default-Start: 2 3 4 5
rsync:8:# Default-Start: 2 3 4 5
这将在/etc/init.d/的所有文件中打印出以Default-Start开头的行,这也是标识各种服务的文件所在。这一行标识的是每个服务启动的运行级别。如果一个服务在运行级别N处启动,当系统发展到N+1时,就不需要再次启动,但如果发现它没有运行,就会被启动。
这样就可以准确地了解服务启动的不同阶段。但是在同一个运行级别中,"所需-启动 “和 "应该-启动 "这两行定义了相关服务的硬依赖和软依赖,即_在被检查的服务之前,必须运行和应该运行的服务。如果没有 Required-Start 服务,相关服务就会失败,如果没有 Should-Start 服务,反而不会出现一般的失败,可能只是缺少一些有用的功能。同样的情况在停止时也会发生,有了Required-Stop和Should-Stop。
SYSTEMD 。
列出所有服务的命令是
systemctl list-unit-files
会吐出很多信息。要选择所有的服务enabled,即那些在启动时启动的服务,只需grep上面的命令如下。
systemctl list-unit-files | grep enabled
我更喜欢这个命令,而不是systemctl list-units:不同的是,这个命令只显示操作系统在内存中的服务(即操作系统认为需要的服务),而systemctl list-unit-files将显示所有安装的服务,包括那些被屏蔽的服务(即那些永远不会被启动的服务,甚至不能手动启动的服务),以及那些不会被**激活的服务,即static。换句话说,我建议的命令比只列出active_服务的命令更全面。
NB :systemd与以前的init系统有很大的不同。特别是,它没有runlevels,而是targets。由于兼容性的原因,runlevels仍然存在,并且可以通过
systemctl list-unit-files --type=target
列出所有可用的目标,而你可以通过
$ systemctl get-default
graphical.target
来查看你当前的目标,关于这一点,你可以阅读 DigitalOcean的优秀介绍页 。