gpt4 book ai didi

service - 如何获取 Linux 上的基本包安装位置?

转载 作者:行者123 更新时间:2023-12-04 19:32:11 25 4
gpt4 key购买 nike

我在 Linux Centos 操作系统上。我知道使用“rpm -qa”会为相应的软件包提供很多安装路径。但是,我只需要包的基本包安装位置。 Linux中是否有任何方法/命令/选项来检索相同的内容?我的代码片段是检索正在运行的服务列表,安装的相应包如下:-

for i in $(service --status-all | grep -v "not running"| grep -E running\|stopped | awk '{print $1}');

包名=$(rpm -qf/etc/init.d/$i)
servicestatus=$(service --status-all | grep $i | awk '{print $NF}' | sed 's/...//g' | sed 's/.//g');

echo $tdydate, $(ip route get 8.8.8.8 | awk 'NR==1 {print $NF}'), $i, $packagename, $servicestatus > "$HOME/MyLog/running_services.csv"
完毕

现在,我还需要获取托管运行服务的相应包安装位置。有没有办法在获取包名称的同时检索它。请确认。

提前感谢您提供帮助。

问候。

最佳答案

好的,您在评论中回答了我的问题,这对我来说比您最初的问题要清楚得多...

Hi, basically what i need is:- I get a list of all installed services on my Centos using service --status-all. Now, for each service, I need to know the corresponding application package location on 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

关于service - 如何获取 Linux 上的基本包安装位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27099443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com