问题描述
如何禁用avahi-daemon,如果它作为一项服务显示但是它不在rcN.d中,你可以向我解释它是如何运行的吗?
你可以在这里停止阅读。事实上,请做,除非你想教一个菜鸟一些Ubuntu。上面的问题应该足够清楚,以便得到回答。剩下的只是我呼吁一些更有条理的方式找到一个绕Ubuntu的方式。我可以或多或少地使用其他”UNIX-like”系统。
我是一名初学者,所以如果我采取无意义的行为,请考虑我每天的WTF,但请帮助我提高。
每次启动时,/sbin/init
似乎都会启动一个名为avahi-daemon
的进程
# initctl list | grep avahi
avahi-daemon start/running, process 1280
用户avahi
# id avahi
uid=107(avahi) gid=118(avahi) groups=118(avahi)
ps -efww ef
显示2个活性过程,均称为avahi-daemon
,第一个avahi-daemon
的PPID
确实是1
,第二个过程只是第一个过程的孩子。 PPID
= 1
让我觉得这是auto-started。
可选:
我真的不知道如何正确检查在系统启动时执行的内容,并考虑它。
这是获取启动时运行的服务列表的方法吗? initctl list | sort
无论如何,我似乎能够通过这个命令暂时停止这个”service”:
service avahi-daemon stop
或者确实是这个命令
/etc/init.d/avahi-daemon stop
直接,这是/usr/sbin/service
似乎正在使用的:
env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE"
启动时,脚本提醒我,我正在控制”Upstart”服务,我应该使用更简单的调用stop avahi-daemon
。我想我需要了解Upstart,但就目前而言,我需要学习的是:
如何在Ubuntu中禁用服务?
这是我尝试过的(这应该是正确的方法,或者不是吗?):
update-rc.d avahi-daemon disable
但它抱怨说:
System start/stop links for /etc/init.d/avahi-daemon do not exist
所以我去寻找二进制的路径:
# Let me know if there is a better way to get the path above
readlink "/proc/$(echo `ps --no-headers -o pid -C avahi-daemon | head -n 1`)/exe"
这是这样的:
/usr/sbin/avahi-daemon
以及在etc
中可被视为”executable file”的任何内容:
find /etc -type f -name '*avahi*' -perm -u+x
我想我会在/etc/rcN.d
中找到启动脚本。我找到了其他的东西:
/etc/dhcp/dhclient-exit-hooks.d/zzz_avahi-autoipd
/etc/dhcp/dhclient-enter-hooks.d/avahi-autoipd
/etc/resolvconf/update-libc.d/avahi-daemon
/etc/network/if-up.d/avahi-autoipd
/etc/network/if-up.d/avahi-daemon
/etc/network/if-down.d/avahi-autoipd
/etc/avahi/avahi-autoipd.action
好像这个avahi-daemon
正在推出网络状态变化?有没有更好的方法来搜索在系统上自动启动的二进制文件?
在这个阶段我通常会删除各种rc{3,5}.d
中的符号链接,但现在我不太确定。究竟是什么引发了这头野兽?如何在没有apt-get remove
或apt-get purge
的情况下禁用它?
据我所知,它没有太多资源开放:
lsof -p $(echo `ps --no-headers -o pid -C avahi-daemon | head -n 1`)
基于对htop
的快速浏览,它也不会使用太多的CPU周期。
我写了这个one-liner,看看它是否在一分钟的时间内在CPU util上变得很时髦,而且它永远不会,但是如果有更好的方法可以检查:
for i in {1..59}; do ps -p $(echo `ps --no-headers -o pid -C avahi-daemon | head -n 1`) --no-headers -o pcpu; sleep 1; done
最佳解决方法
Upstart启动脚本位于/etc/init
中,您可以在其中找到avahi-daemon.conf
。 initctl list
中列出的所有内容都与/etc/init
中的脚本匹配,并且它们不可执行,因此您的find
错过了它们。
要禁用Upstart控制的服务,请参阅Upstart cookbook on disabling services:将#
添加到start on
行,或使用覆盖文件(例如:sudo sh -c "echo manual > /etc/init/avahi-daemon.override"
)。
次佳解决方法
sudo systemctl disable avahi-daemon
在Ubuntu Gnome 15.10上为我工作
第三种解决方法
我发现即使我停止avahi-daemon
(和avahi-daemon.socket
),Firefox也会重新启动它。但是,这可以工作,并永久禁用这个烦人的守护进程:
apt-get remove avahi-daemon
第四种方法
你可能不需要在PC启动时阻止它启动,但是当你杀死它时可能会阻止它从respawn
开始。
所以,只需在/etc/init/avahi-daemon.conf
中注释掉respawn
杀死该进程总是失败,因此无法通过airmon-ng check
。在评论重生时,它会杀死并且永远不会回来追捕我。