我正在使用终端命令来替换 /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
。