如何立即激活新的 /etc/hosts

如何立即激活新的 /etc/hosts

我正在使用终端命令来替换 /etc/hosts 文件。

alias nonews="sudo -S chattr -i /etc/hosts < /etc/password_file && sudo -S cp /etc/hosts_all_blocked /etc/hosts < /etc/password_file && sudo -S chattr +i /etc/hosts < /etc/password_file"

其中 hosts_all_blocked 是一个用来阻止干扰网页的文件。/etc/password_file 包含 sudo 密码。

所以使用后我希望相关页面立即被阻止。我尝试了该命令,有时它会立即按预期工作,但有时即使文件已更改,也不会影响打开网页的可能性。

我如何确保 /etc/hosts 中的更改立即生效?

顺便说一句:为了解除封锁,我使用了 20 分钟的延迟:

alias getnews="sleep 1200 && sudo -S chattr -i /etc/hosts < /etc/password_file && sudo -S cp /etc/hosts_all_allowed /etc/hosts < /etc/password_file && sudo -S chattr +i /etc/hosts < /etc/password_file"

答案1

浏览器通常会在缓存中保留 DNS 查询的本地副本,以便在加载网站时节省一点时间。这意味着您需要清除浏览器的缓存,以便/etc/hosts已加载的网站(包括可能在之前关闭的选项卡中加载的网站)能够看到文件更改。

考虑到这一点,您可能希望将您的别名扩展为一个 shell 脚本,该脚本也会删除浏览器缓存(但保留 cookie 不变……除非您想每次都使用一个对您过去的使用情况一无所知的“全新”浏览器)。

如果您使用 Firefox 作为主浏览器,则可以使用以下命令通过 shell 脚本清除缓存:

rm -r ~/.cache/mozilla/firefox/*.default*/*

如果您使用 Google Chrome 作为主浏览器,则可以这样清除缓存:

rm ~/.cache/google-chrome

对于其他浏览器,您需要挖掘~/.cache目录来找到它们保存临时资源的位置。

请注意,这些命令应作为用户,不与sudo

相关内容