在Ubuntu系統中,批量修改主機名可以通過以下步驟實現:
創建一個腳本文件:
打開終端,使用文本編輯器(如nano
或vim
)創建一個新的腳本文件。例如:
nano batch_rename_hosts.sh
編寫腳本內容:
在腳本文件中輸入以下內容,假設你想將所有主機名修改為new-hostname-<數字>
的形式:
#!/bin/bash
# 獲取當前主機名
current_hostname=$(hostname)
# 獲取主機名中的數字部分(如果有)
number=$(echo $current_hostname | grep -o -E '[0-9]+')
# 如果沒有數字部分,則默認為1
if [ -z "$number" ]; then
number=1
else
number=$((number + 1))
fi
# 新的主機名
new_hostname="new-hostname-${number}"
# 修改主機名
sudo hostnamectl set-hostname $new_hostname
# 更新/etc/hosts文件
sudo sed -i "s/$current_hostname/$new_hostname/g" /etc/hosts
echo "主機名已修改為: $new_hostname"
保存并退出編輯器:
按Ctrl+X
,然后按Y
確認保存,最后按Enter
退出。
賦予腳本執行權限:
chmod +x batch_rename_hosts.sh
運行腳本:
sudo ./batch_rename_hosts.sh
如果你有多臺服務器需要批量修改主機名,可以使用Ansible自動化這個過程。
安裝Ansible:
sudo apt update
sudo apt install ansible
創建Ansible Playbook:
創建一個新的YAML文件,例如rename_hosts.yml
,并輸入以下內容:
---
- hosts: all
become: yes
tasks:
- name: Rename hostname
shell: |
current_hostname=$(hostname)
number=$(echo $current_hostname | grep -o -E '[0-9]+')
if [ -z "$number" ]; then
number=1
else
number=$((number + 1))
fi
new_hostname="new-hostname-${number}"
hostnamectl set-hostname $new_hostname
sed -i "s/$current_hostname/$new_hostname/g" /etc/hosts
args:
creates: /etc/hostname
運行Ansible Playbook:
ansible-playbook rename_hosts.yml
/etc/hosts
文件時,確保新主機名不會與其他主機名沖突。通過以上方法,你可以輕松地在Ubuntu系統中批量修改主機名。