如何禁用avahi-daemon?

如何禁用avahi-daemon,并且你能否解释一下它作为一个服务运行的方式,即使它在rcN.d中没有出现?
可以在这里停止阅读了。实际上,请除非你想教一个新手一些Ubuntu操作系统,否则请停止阅读。上面的问题应该足够明确以便得到答案。其余内容只是我寻求更加结构化的方法来使用Ubuntu操作系统。我也能基本上使用其他"类UNIX"系统。
我是一个初学者,所以如果我表现得荒谬,请把我当作你每天见到的奇怪事物,但请帮助我改进。
在每次启动时,/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-daemonPPID 确实是 1,第二个进程只是第一个进程的子进程。 PPID = 1 让我认为这是自动启动的。


可选:

我真的不知道如何正确地检查系统启动时执行的内容,思考了一下。

这是获取在启动时运行的服务列表的方法吗? initctl list | sort


无论如何,我似乎可以通过这个命令暂时停止这个“服务”。
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 中:
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周期。

我写了这个一行代码来检查它在一分钟内的CPU利用率是否出现异常,但它从未出现过。如果有更好的方法来检查,请告诉我。

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

9尽力了! - Geoff
9个回答

sudo systemctl disable avahi-daemon

在Ubuntu Gnome 15.10上对我有效。

2你也可以运行“sudo systemctl stop avahi-daemon”来立即停止它。这是对问题的真正回答。 - EnzoR

新兴的启动脚本位于/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")。


要进行技术处理,你可以将整个“start on”段落注释掉。例如,我已经注释掉了三行。 - noobninja
最好使用service avahi-daemon stop - Martijn van Wezel

我发现即使我停止了avahi-daemon(和avahi-daemon.socket),Firefox总是会重新启动它。然而,以下方法可以有效地永久禁用这个烦人的守护进程:
apt-get remove avahi-daemon

火狐浏览器与这个问题有什么关系? - Mxx
2@Mxx firefox只是触发了重新启动Avahi的套接字。为了使wget和curl不使用它,我不得不卸载它。 - qwertzguy
激进的解决方案,但快速有效! - andilabs
阅读了所有的答案,把这个当作一个笑话来看待,尝试了其他的答案但都没有用,最后使用了这个并点赞了它。 - golimar
为了彻底清除,可以使用以下命令:sudo DEBIAN_FRONTEND=noninteractive apt-get purge --auto-remove avahi-daemon - volvox
自从Ubuntu 17.10以来,我一直遇到Avahi的问题,它会破坏我的Wi-Fi并禁用它,需要重新启动才能恢复Wi-Fi在线。刚刚在另一台笔记本电脑上安装了Lubuntu 18.04.5LTS,它也开始干扰我在那台电脑上的Wi-Fi...最好把它移除!我还认为这可能是一个安全风险,允许未经授权的计算机干扰我的Wi-Fi。有时候在面板中会出现两组Wi-Fi信号强度条-很奇怪!其他时候它会断开Wi-Fi连接,重新加载,再次断开,并且无法在不重新启动的情况下重新加载。我根本就不需要它... - The MAJOR

你可能不需要阻止它在电脑启动时启动,但也许可以防止它在被杀死后重新启动。
所以,只需在/etc/init/avahi-daemon.conf中注释掉respawn。
杀掉该进程总是失败的,所以无法通过airmon-ng check。注释掉respawning后,它被杀死后就再也不会回来找我麻烦了。

我的树莓派上没有“respawn”这一行:< - Henrique de Sousa

你需要对套接字进行掩码操作,以防止应用程序启动avahi-daemon。
systemctl mask avahi-daemon.socket
systemctl disable avahi-daemon
systemctl stop avahi-daemon

airmon-ng一直在抱怨,直到我掩盖了这项服务。做得好! - Henrique de Sousa

使用这个命令:service avahi-daemon stop

非常好用,效果很棒。

然后使用 airmon-ng check wlo1 命令来检查重叠的服务。你应该找不到任何重叠的服务。


只能工作一次。下次启动时,avahi会再次启动。这是你想要的吗?我认为不是,因为问题是如何禁用avahi(以防止启动)。使用上述命令'sudo systemctl disable avahi-daemon'来禁用avahi而不删除它,或者使用命令'sudo apt-get remove avahi-daemon'永久删除avahi,这样它就无法启动了。 - Reijo Korhonen

怎么样使用sysv-rc-conf来处理这些事情?它非常方便!(即首先用apt-get安装它,然后以sudo身份运行)

刚刚在Ubuntu 16.04上使用了这个,运行得很好。
service avahi-daemon stop
我知道原帖使用了这句话,但是为了给那些寻找简单命令的人(比如我自己)做个总结。

只是清除它。 或者在rc3.d、rc4.d和rc5.d中禁用它。 所以要以su / root身份运行。
apt-get purge avahi-daemon
是的
然后它应该从您的系统中删除。检查您的/etc/rc3.d和其他文件,它应该从启动中消失。
不要使用systemd来禁用,最好的方法是在运行层中将运行脚本更改为K而不是S。