在啟動時將 Linux Mint 桌面上的主機名更改為隨機值
在執行 Linux Mint(17.1 Rebecca,Cinnamon 64 位)的機器上將主機名更改為一組隨機的字母數字字元時,我遇到了一些問題。
以下腳本將主機名更改為一組隨機的字母數字字元:
#!/bin/bash ### BEGIN INIT INFO # Provides: randomhostname # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Changing hostname to random value # Description: Changing hostname to random value ### END INIT INFO old=$(cat /etc/hostname) new=$(tr -dc 'A-Z0-9' < /dev/urandom | head -c12) sed -i "s/$old/$new/g" /etc/hosts sed -i "s/$old/$new/g" /etc/hostname exit 0
理想情況下,無需重新啟動系統即可更改主機名,但由於
/etc/init.d/hostname.sh start
必須在之後執行,並且此版本的 Linux Mint 中不存在該文件(不確定其他版本),因此我必須重新啟動系統才能進行更改生效。因此,目前在啟動時執行此操作似乎是我的下一個最佳選擇。我將文件移動到*/etc/init.d/*目錄並使用
sudo chmod +x randomhostname
. 之後,我將其添加到引導序列中sudo update-rc.d randomhostname defaults
。當我重新啟動系統並登錄 Linux Mint 時,我可以看到*/etc/hostname和/etc/hosts*中主機名的變化,在這種情況下是
YKNG7Z4PJD7H
. 但是,我在使用終端(即使用者名@BFZJ7LB0BKAD)時看不到這一點,並且在使用 sudo 時收到以下消息:username@BFZJ7LB0BKAD ~ $ sudo true sudo: unable to resolve host BFZJ7LB0BKAD
我認為這個問題是由於腳本在錯誤的時間執行(可能在某些服務已經啟動之後)並且系統尚未再次重新啟動以使之前的更改生效。
將這樣的腳本添加到引導序列以使更改生效而無需再次重新啟動的正確方法是什麼?還是有更好的方法來實現這一目標?
我非常感謝有關此問題的任何幫助。
解決方案
正如roaima指出的那樣,我只需
hostname "$new"
在腳本末尾添加即可使更改生效。我還添加了網路管理器服務的停止和啟動,以強制客戶端使用新主機名向網路註冊。#!/bin/bash ### BEGIN INIT INFO # Provides: randomhostname # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Changing hostname to random value # Description: Changing hostname to random value ### END INIT INFO service network-manager stop old=$(cat /etc/hostname) new=$(tr -dc 'A-Z0-9' < /dev/urandom | head -c12) sed -i "s/$old/$new/g" /etc/hosts sed -i "s/$old/$new/g" /etc/hostname hostname "$new" service network-manager start exit 0
重寫後您似乎沒有設置主機名
/etc/hostname
。這應該可以解決問題,在兩sed
行之後添加:hostname "$new"
如果您使用的是 DHCP 並且這還沒有解決問題,請查看我更改了我的主機名,為什麼我的 bash PS1 提示沒有改變,看看這是否與您的情況完全相關。
“Rebecca”使用
systemd
,用於設置主機名的文件是/etc/init/hostname.conf
. 如何將您的更改主機名腳本添加到systemd
我將留給另一個問題(通常稱為“讀者練習”)。