以前發(fā)現(xiàn)在Ubuntu重啟后,hosts
文件又恢復到了修改前,十分奇怪。
一開始覺得是Linux的問題,最近在Mac上同樣的現(xiàn)象又出現(xiàn)了。
查看 /etc/目錄下,發(fā)現(xiàn)了兩個一摸一樣的文件,hosts
和hosts.ac
,vimdiff一下,居然一模一樣!
看來原因找到了。
Cisco AnyConnect 搗的鬼
仔細回想了一下,發(fā)現(xiàn)/ect/hosts.ac是出現(xiàn)在 VPN 客戶端:Cisco AnyConnect
后,hosts.ac應該是any client的縮寫。
這貨每次在重啟后,都會把/etc/hosts重新覆蓋一遍。
所以,除非你同時修改了/etc/hosts.ac 文件,否則單獨只修改/etc/hosts都會被重置。
下面開始實驗證明一下
首先測試下做個軟鏈是否有效:
刪除原來hosts.ac sudo rm /etc/hosts.ac 建立軟鏈 sudo ln -s /etc/hosts.ac /etc/hosts
重啟后發(fā)現(xiàn),兩個hosts文件都不在了。。。悲劇 。
嘗試反著操作
刪除原來hosts sudo rm /etc/hosts 建立軟鏈 sudo ln -s /etc/hosts /etc/hosts.ac
再次重啟,發(fā)現(xiàn)軟連接消失了,依舊變成了連個一模一樣的hosts.ac 。
實驗證明
每次重啟,hosts.ac都會重新復制給hosts,
所以如果你希望hosts保留的話,每次修改hosts后,請同時復制給hosts.ac文件
如果不小心被誤刪除了,可以使用原始的hosts文件內(nèi)容恢復:
255.255.255.255 broadcasthost ::1 localhost fe80::1%lo0 localhost
偷懶的解決方案
在BASH的PATH目錄下,創(chuàng)建mh
腳本,以后通過這個腳本修改hosts文件
#!/bin/bash #!/bin/bash
modify hosts
if [ -f /etc/hosts ];then echo "/etc/hosts exists,back up to ~/hosts.bak" cp /etc/hosts ~/hosts.bak sudo rm /etc/hosts fi if [ ! -L /etc/hosts ];then echo "link /etc/hosts.ac => /etc/hosts" sudo ln -s /etc/hosts.ac /etc/hosts fi sudo vi /etc/hosts.ac