好的,您在 cmets 中对我的问题的回答对我来说比您最初的问题要清楚得多...
嗨,基本上我需要的是:- 我使用 service --status-all 获得了 Centos 上所有已安装服务的列表。现在,对于每一个服务,我都需要知道在linux上对应的应用包位置。
...我会提出这个建议(在 CentOS 6.6 上测试):
#!/bin/bash
for i in `chkconfig --list | awk '{ print $1}'`; do
service $i status >/dev/null 2>&1
if [ $?==0 ]; then
rpm -qf /etc/init.d/$i
fi
done | sort | uniq
这会吐出当前正在运行的服务的所有 rpm 名称。
关于为什么您当前的方法不起作用的更多细节:
service --status-all 不会返回可以可靠解析的信息。例如,此处 VM 上的输出:
acpid (pid 872) is running...
auditd (pid 789) is running...
Stopped
cgred is stopped
Checking for service cloud-init:Checking for service cloud-init:Checking for service cloud-init:Checking for service cloud-init:crond (pid 1088) is running...
ip6tables: Firewall is not running.
iptables: Firewall is not running.
Kdump is not operational
mdmonitor is stopped
netconsole module not loaded
Configured devices:
lo eth0
Currently active devices:
lo eth0
ntpd (pid 997) is running...
master (pid 1076) is running...
rdisc is stopped
restorecond is stopped
rsyslogd (pid 809) is running...
sandbox is stopped
saslauthd is stopped
openssh-daemon (pid 988) is running...
有些服务甚至不返回他们的名字(第三行)。有人说stopped,其他人说not running。如果您解析chkconfig --list 的第一列,您就会知道所有服务名称,它们对应于/etc/init.d 中的文件。然后您可以单独查询它们的状态并读取 返回码 ($?),0 表示正在运行的服务(或通常表示在 Unix/Linux 世界中成功),1 或更高表示未运行或未安装或不完整/出现故障的服务。
有了/etc/init.d/ 中的名称,您就可以使用rpm -qf /etc/init.d/<servicename> 查询拥有的包,并得到我认为您正在寻找的东西。
编辑:在循环之后添加| sort | uniq,因为某些包包含多个服务,例如 cloud-init,它在 CentOS 上创建了四种不同的服务。所以你对列表进行排序,然后确保你只得到不同的(uniq)名称。
为我工作:
acpid-1.0.10-2.1.el6.x86_64
audit-2.3.7-5.el6.x86_64
cloud-init-0.7.5-10.el6.centos.2.x86_64
cronie-1.4.4-12.el6.x86_64
cyrus-sasl-2.1.23-15.el6_6.1.x86_64
initscripts-9.03.46-1.el6.centos.1.x86_64
iptables-1.4.7-14.el6.x86_64
iptables-ipv6-1.4.7-14.el6.x86_64
iputils-20071127-17.el6_4.2.x86_64
kexec-tools-2.0.0-280.el6.x86_64
libcgroup-0.40.rc1-15.el6_6.x86_64
mdadm-3.3-6.el6.x86_64
ntp-4.2.6p5-1.el6.centos.x86_64
ntpdate-4.2.6p5-1.el6.centos.x86_64
openssh-server-5.3p1-104.el6_6.1.x86_64
policycoreutils-2.0.83-19.47.el6_6.1.x86_64
postfix-2.6.6-6.el6_5.x86_64
rsyslog-5.8.10-9.el6_6.x86_64
udev-147-2.57.el6.x86_64