ฉันจะเปลี่ยนชื่อโฮสต์โดยไม่ต้องรีสตาร์ทได้อย่างไร


497

ฉันต้องการเปลี่ยนชื่อโฮสต์ระบบปฏิบัติการ แต่ฉันไม่ต้องการรีสตาร์ท

ฉันแก้ไขแล้ว/etc/hostnameแต่ต้องมีการเริ่มระบบใหม่เพื่อให้ใช้งานได้ จะหลีกเลี่ยงสิ่งนี้ได้อย่างไร


3
คำเตือน: จะไม่ทำงานกับ Ubuntu 18+ ซึ่งใช้งาน cloud-init ตามค่าเริ่มต้นซึ่งควบคุมชื่อโฮสต์เมื่อบูต
nslntmnx

@nslntmnx ขอขอบคุณ!
MiB

คำตอบ:


642

มันเป็นเรื่องง่าย. เพียงคลิกไอคอนรูปเฟือง (อยู่ที่มุมขวาบนของหน้าจอ) เปิดหน้าจอ "เกี่ยวกับคอมพิวเตอร์เครื่องนี้" (อยู่ที่ไอคอนรูปเฟือง) และแก้ไข "ชื่ออุปกรณ์"

หรือในเทอร์มินัลใช้คำสั่งต่อไปนี้:

sudo hostname your-new-name

สิ่งนี้จะตั้งชื่อโฮสต์เป็นชื่อใหม่ของคุณจนกว่าคุณจะรีสตาร์ท ดูman hostnameและฉันจะเปลี่ยนชื่อคอมพิวเตอร์ได้อย่างไร สำหรับข้อมูลเพิ่มเติม. ห้ามใช้_ในชื่อของคุณ

บันทึก

หลังจากรีสตาร์ทการเปลี่ยนแปลงของคุณ/etc/hostnameจะถูกนำมาใช้ดังนั้น (ตามที่คุณพูดในคำถาม) คุณยังควรใช้

sudo -H gedit /etc/hostname

(หรือตัวแก้ไขอื่น ๆ ) เพื่อให้ไฟล์มีชื่อโฮสต์

เพื่อทดสอบว่าตั้งค่าไฟล์อย่างถูกต้องหรือไม่ให้เรียกใช้:

sudo service hostname start

คุณควรแก้ไข/etc/hostsและเปลี่ยนบรรทัดที่อ่าน:

127.0.1.1     your-old-hostname

เพื่อให้ตอนนี้มีชื่อโฮสต์ใหม่ของคุณ (สิ่งนี้จำเป็นต้องใช้มิฉะนั้นคำสั่งจำนวนมากจะหยุดทำงาน)


4
ฉันไม่ต้องการรีสตาร์ท
Deepak Rajput

23
ฉันรู้ว่า. นั่นเป็นเหตุผลที่คุณควรใช้คำสั่ง 'ชื่อโฮสต์' ฉันแค่ต้องการชี้แจงว่าคำสั่ง 'hostname' จะเปลี่ยนชื่อโฮสต์เท่านั้นจนกว่าคุณจะรีสตาร์ท / crash / etc หลังจากนั้นมันจะอ่านชื่อจากไฟล์อีกครั้ง
jasperado

5
ขึ้นอยู่กับ หากคุณป้อนคำสั่งคุณไม่จำเป็นต้องรีสตาร์ท ชื่อโฮสต์ถูกเปลี่ยนไปแล้ว แต่จนกว่าจะรีสตาร์ทครั้งต่อไปของคุณ
jasperado

19
โปรดทราบว่าคุณต้องเปลี่ยน/etc/hosts(ดูคำตอบอื่น ๆ )
JB

9
โดยย่อแม้ว่าhostnameจะทำให้ชื่อใหม่มีผลในทันที แต่จะไม่ "ถาวร" เว้นแต่คุณจะเปลี่ยน/etc/hostnameและ/etc/hostsเนื่องจากไฟล์เหล่านั้นเป็นไฟล์ที่จะอ่านหลังจากรีสตาร์ทหรือเกิดความผิดพลาดซึ่งแน่นอนว่าคุณอาจไม่ คาดหวังล่วงหน้า
ทิม Parenti

280

Ubuntu 13.04 เป็นต้นไป

hostnamectlคำสั่งเป็นส่วนหนึ่งของการติดตั้งเริ่มต้นในทั้งสองรุ่น Desktop และเซิร์ฟเวอร์

มันรวมการตั้งชื่อโฮสต์ผ่านทางคำสั่งและการแก้ไขhostname /etc/hostnameเช่นเดียวกับการตั้งค่าชื่อโฮสต์แบบคงที่ก็สามารถตั้งค่าชื่อโฮสต์ "สวย" ซึ่งไม่ได้ใช้ใน Ubuntu น่าเสียดายที่การแก้ไข/etc/hostsยังต้องแยกต่างหาก

hostnamectl set-hostname new-hostname

คำสั่งนี้เป็นส่วนหนึ่งของsystemd-servicesแพ็คเกจ (ซึ่งใน Ubuntu 14.04 นั้นรวมถึงtimedatectlและlocalectlคำสั่งด้วย) ขณะที่อูบุนตูย้ายไปที่systemdเครื่องมือนี้เป็นอนาคต


1
โปรดทราบว่านี่ไม่สามารถใช้ได้ทุกที่ เพิ่งดูการติดตั้ง Ubuntu 14.04 LTS ARM-7 ของฉันและhostnamectlไม่มีอยู่จริง เดาอูบุนตูบางอย่างที่ยังไม่ได้ใช้ systemd
Stéphane

1
@ Stéphaneคำสั่งเป็นส่วนหนึ่งของ systemd suite แต่มันมีให้ใช้อย่างอิสระ ในกรณีนี้ 13.04-14.10 ไม่ใช้ systemd เป็น init โดยคำสั่งจะพร้อมใช้งาน
muru

1
@ H2ONaCl ตัวแปรเชลล์ถูกตั้งค่าเมื่อเริ่มต้นเพียงแค่เปิดเชลล์อื่นและตัวแปรชื่อโฮสต์ควรใช้ได้ สำหรับ sudo ข้อผิดพลาดเกี่ยวกับการแก้ไขชื่อโฮสต์ไม่เคยทำให้ฉันทำอะไรได้เลย
muru

1
@ H2ONaCl ah แต่ตัวแปร HOSTNAME ไม่ได้มาตรฐาน - IIRC dash และ ksh ไม่ได้มี zsh ใช้ HOST ตราบใดที่ตัวแปรเชลล์ดำเนินไปนี่เป็นส่วนล่างสุดของฮีป
muru

3
ยังคงใช้งานได้ใน Ubuntu 18.04 LTS
LucaM

63

โดยไม่ต้องเริ่มต้นใหม่

การเปลี่ยนชื่อโฮสต์หรือชื่อคอมพิวเตอร์ใน ubuntu โดยไม่ต้องรีสตาร์ท

แก้ไข / etc / hostname และเปลี่ยนเป็นค่าใหม่

nano /etc/hostname 

แก้ไข / etc / hosts และเปลี่ยนบรรทัด 127.0.1.1 เก่าเป็นชื่อโฮสต์ใหม่ของคุณ

127.0.0.1   localhost
127.0.1.1   ubuntu.local    ubuntu   # change to your new hostname/fqdn

หมายเหตุ : ฉันได้อ่านมันในฟอรัม> แก้ไข / etc / hosts และเปลี่ยนบรรทัดเก่า 127.0.1.1 เป็นชื่อโฮสต์ใหม่ของคุณ (ถ้าคุณไม่ทำเช่นนี้คุณจะไม่สามารถใช้ sudo ได้อีกต่อไปถ้าคุณไม่ได้ทำไปแล้ว กด ESC บนเมนูด้วงเลือกการกู้คืนและแก้ไขไฟล์โฮสต์ของคุณเป็นการตั้งค่าที่ถูกต้อง)

หลังจากรีบูตชื่อโฮสต์ของคุณจะเป็นชื่อใหม่ที่คุณเลือก

โดยไม่ต้องรีบูตเครื่อง

หากต้องการเปลี่ยนแปลงโดยไม่ต้องรีบูทคุณสามารถใช้ชื่อโฮสต์ได้หลังจากคุณแก้ไข / etc / hostname คุณต้องเก็บชื่อโฮสต์ทั้งสองไว้ใน / etc / hosts (127.0.0.1 newhost oldhost) จนกว่าคุณจะรันคำสั่งด้านล่าง:

sudo service hostname start

หมายเหตุ : คำสั่งด้านบนเพื่อให้การเปลี่ยนแปลงใช้งานได้ ชื่อโฮสต์ที่บันทึกในไฟล์นี้ (/ etc / ชื่อโฮสต์) จะถูกเก็บไว้ในการรีบูตระบบ (และจะถูกตั้งค่าโดยใช้บริการเดียวกัน)


บน Ubuntu 12.10 sudo: unable to resolve host old-hostnameซึ่งเป็นส่วนหนึ่งที่ผ่านมาไม่ได้ทำงานกับข้อผิดพลาดดังต่อไปนี้ สำหรับส่วนนั้นโซลูชัน @jesperado ทำงานได้ดี
Frédéric Grosshans

3
หากคุณไม่อัปเดต/etc/hostsสิ่งต่าง ๆ ที่เริ่มจะล้มเหลวใน 12.04.2 LTS รวมถึงwคำสั่ง Apache /sbin/rebootและอีกมากมาย อย่าลืมอัปเดต/etc/hosts
Josh

คุณอ้างถึงทั้ง127.0.0.1สำหรับlocalhostและ127.0.1.1สำหรับชื่อโฮสต์ที่กำหนดเอง ขวา? จากนั้นในช่วงสุดท้ายของคำตอบของคุณสำหรับการดำเนินการได้โดยไม่ต้อง rebotคุณอ้างอิงและ/etc/hosts 127.0.0.1 newhost oldhostดังนั้นไม่จำเป็นต้องมี127.0.1.1ที่อยู่หรือไม่?
Nikos Alexandris

1
ไม่ได้ผลสำหรับฉัน ฉันต้องใช้sudo nano /etc/hostsเพื่อให้การเปลี่ยนแปลงมีผล โดยไม่ต้อง sudo เพียงแค่nano /etc/hostsไม่ได้บันทึกการเปลี่ยนแปลง
conman253

2
ความแตกต่างระหว่างการเริ่มระบบใหม่และการเริ่มระบบใหม่คืออะไร
พายุ

43

ชื่อเริ่มต้นถูกตั้งค่าเมื่อคุณติดตั้ง Ubuntu คุณสามารถเปลี่ยนเป็นสิ่งที่คุณต้องการได้ทั้งบนเดสก์ท็อปและเซิร์ฟเวอร์โดยแก้ไขไฟล์โฮสต์และชื่อโฮสต์ ด้านล่างเป็นอย่างไร:

  1. กดCtrlAlttบนแป้นพิมพ์เพื่อเปิดเครื่อง เมื่อเปิดขึ้นให้เรียกใช้คำสั่งด้านล่าง:sudo hostname NEW_NAME_HERE

สิ่งนี้จะเปลี่ยนชื่อโฮสต์จนกว่าจะรีบูตครั้งถัดไป การเปลี่ยนแปลงจะไม่ปรากฏในเทอร์มินัลปัจจุบันของคุณทันที เริ่มเทอร์มินัลใหม่เพื่อดูชื่อโฮสต์ใหม่

  1. หากต้องการเปลี่ยนชื่ออย่างถาวรให้เรียกใช้คำสั่งเพื่อแก้ไขไฟล์โฮสต์:

    sudo -H gedit /etc/hostname และ sudo -H gedit /etc/hosts

สำหรับเซิร์ฟเวอร์ Ubuntu โดยไม่ต้อง GUI เรียกใช้sudo vi /etc/hostnameและsudo vi /etc/hostsและแก้ไขพวกเขาหนึ่งโดยหนึ่ง ในทั้งสองไฟล์เปลี่ยนชื่อเป็นสิ่งที่คุณต้องการและบันทึก

ในที่สุดรีสตาร์ทคอมพิวเตอร์ของคุณเพื่อใช้การเปลี่ยนแปลง


16

นี่คือสคริปต์ที่เปลี่ยนชื่อโฮสต์ตามวิธีที่กำหนด ทำให้มั่นใจได้ว่าไม่เพียงsudoแต่ยังแอปพลิเคชั่น X11 ยังคงทำงานได้อย่างต่อเนื่องโดยไม่ต้องรีสตาร์ท

การใช้งาน: sudo ./change_hostname.sh new-hostname

#!/usr/bin/env bash
NEW_HOSTNAME=$1
echo $NEW_HOSTNAME > /proc/sys/kernel/hostname
sed -i 's/127.0.1.1.*/127.0.1.1\t'"$NEW_HOSTNAME"'/g' /etc/hosts
echo $NEW_HOSTNAME > /etc/hostname
service hostname start
su $SUDO_USER -c "xauth add $(xauth list | sed 's/^.*\//'"$NEW_HOSTNAME"'\//g' | awk 'NR==1 {sub($1,"\"&\""); print}')"

บรรทัดสุดท้ายในสคริปต์su $SUDO_USER -c "xauth add $(xauth list | sed 's/^.*\//'"$NEW_HOSTNAME"'\//g' | awk 'NR==1 {sub($1,"\"&\""); print}')"ทำอะไร แค่สงสัย.
Fr0zenFyr

4
@ Fr0zenFyr: ใช้โทเค็นการตรวจสอบความถูกต้อง X11 ที่ถูกต้องxauth listและแทนที่ชื่อโฮสต์เก่าด้วยชื่อโฮสต์ใหม่ ( sed) จากนั้นawkใส่เครื่องหมายคำพูดล้อมรอบอาร์กิวเมนต์แรกเป็นxauth addเพราะxauthรูปแบบอินพุตและเอาต์พุตไม่สมมาตร
Lucas

ขอบคุณสำหรับคำอธิบาย ฉันรีบูตเครื่องเสมอเพื่อให้การเปลี่ยนแปลงมีผล +1
Fr0zenFyr

@trakz: ที่จริงแล้ว 127.abc ไม่ว่าตัวเลขจะเป็น localhost ตาม IETF RFC (คนส่วนใหญ่ก็ไม่ทราบเรื่องนี้ แต่ส่วนใหญ่ไม่ได้รับการแก้ไขแก้ไข)
Fabby

14

โดยไม่ต้องรีสตาร์ท:

  1. เปลี่ยนชื่อโฮสต์ใน /etc/hostname
  2. อัปเดต/etc/hostsตาม
  3. sudo sysctl kernel.hostname=mynew.local.host

ตรวจสอบชื่อโฮสต์ปัจจุบันของคุณด้วย hostname -f


ด้วย 16.04, sysctl ,sudo: unable to resolve host oldname sysctl: setting key "kernel.hostname": Read-only file systemอาจเป็นเพราะ CT ภายใน Proxmox
Pablo

14

การคงอยู่ของชื่อโฮสต์ Cloud-init (Ubuntu 18+)

ในขณะที่วิธีการข้างต้น ( hostnamectl, etc/hostnameและอื่น ๆ ) ทำงานเพื่อเปลี่ยนชื่อโฮสต์ทันทีด้วยการถือกำเนิดของcloud-init - ซึ่งสามารถควบคุมการตั้งค่าชื่อโฮสต์ - ในสิ่งอื่น ๆ อีกมากมาย ดังนั้นจะไม่ติดหลังจากรีบูตหากติดตั้ง cloud-init หากคุณต้องการให้การเปลี่ยนแปลงดำเนินต่อไปหลังจากรีบูตแล้วคุณจะต้องแก้ไขไฟล์กำหนดค่าcloud-initให้ปิดใช้งานโมดูลชื่อ / การตั้งค่าชื่อโฮสต์ของ cloud-init :

sudo sed 's/preserve_hostname: false/preserve_hostname: true/' /etc/cloud/cloud.cfg

หรือปิดการใช้งาน cloud-init ทั้งหมด:

sudo touch /etc/cloud/cloud-init.disabled

1
กรุณาโหวตคำตอบนี้ มันใช้งานได้ดีสำหรับฉัน คำตอบอื่น ๆ ใช้ไม่ได้กับการใช้ cloud-init
nslntmnx

@nslntmnx มีการติดตั้งตามค่าเริ่มต้นบนเดสก์ท็อป 18.04 เฉพาะเซิร์ฟเวอร์เท่านั้นหรือไม่ /etc/cloud/cloud.cfgสก์ท็อปไม่ได้ ชื่อแพ็คเกจคืออะไร? เพียงแค่cloud-init?
Ciro Santilli 新疆改造中心法轮功六四事件

1
นอกจากนี้ยังมีวิธีใดที่จะเปลี่ยนชื่อโฮสต์ด้วย cloud-init แทนที่จะปิดใช้งานการแทนที่
Ciro Santilli 新疆改造中心法轮功六四事件

1
ใช่คุณสามารถเปลี่ยนการตั้งค่าต่างๆโดยใช้ระบบคลาวด์ init - ดูเอกสารเชื่อมโยงในคำตอบของฉัน - นี่คือการเชื่อมโยงในการตั้งชื่อโฮสต์: cloudinit.readthedocs.io/en/latest/topics/...
Pierz

7

ในการรับชื่อโฮสต์ปัจจุบันของคุณ:

cat /etc/hostname

สิ่งนี้สามารถเปลี่ยนแปลงได้ในโปรแกรมแก้ไขข้อความใด ๆ คุณจะต้องอัปเดตรายการอื่นนอกเหนือจาก localhost กับ 127.0.0.1 ใน / etc / hosts


1
หรือเพียงแค่เรียกใช้คำสั่ง "ชื่อโฮสต์" จากบรรทัดคำสั่ง
elomage

4
  1. แทนที่เนื้อหาของ/etc/hostnameด้วยชื่อโฮสต์ที่ต้องการ (คุณสามารถแก้ไขได้ด้วยsudo nano /etc/hostname)
  2. ใน/etc/hostsแทนที่รายการถัดจาก 127.0 1 .1 พร้อมชื่อโฮสต์ที่ต้องการ (คุณสามารถแก้ไขได้sudo nano /etc/hosts)
  3. ปฏิบัติ sudo service hostname restart; sudo service networking restart

คำเตือน: จะไม่ทำงานกับ Ubuntu 18+ ซึ่งใช้งาน cloud-init ตามค่าเริ่มต้นซึ่งควบคุมชื่อโฮสต์เมื่อบูต
nslntmnx

@nslntmnx คุณแน่ใจเกี่ยวกับสิ่งนี้หรือไม่ ฉันเห็นใน cloud-config.txt # if you do nothing you'll end up with: # * /etc/hostname (and 'hostname') managed via: 'preserve_hostame: false' # if you do not change /etc/hostname, it will be updated with the cloud # provided hostname on each boot. If you make a change, then manual # maintenance takes over, and cloud-init will not modify it.ฉันยังไม่มี Ubuntu 18 ดังนั้นฉันจึงไม่สามารถทดสอบได้จนกว่าจะถึงสุดสัปดาห์
จอร์จ

4

Ubuntu 16.04

นี่คือโดยไม่ต้องรีสตาร์ทและไม่มีการใช้ขั้วใด ๆ

  • ไปที่การตั้งค่าระบบ -> รายละเอียด
  • นั่นไง ข้างชื่ออุปกรณ์จะมีกล่องข้อความ
  • แก้ไขกล่องข้อความและปิดหน้าต่าง

เปิดเทอร์มินัล ดูตัวเอง

(สำหรับรุ่นเก่ากล่องข้อความไม่สามารถแก้ไขได้)


4

คำตอบแบบดั้งเดิมสำหรับคำถามดั้งเดิมของโปสเตอร์คือเมื่อคุณแก้ไข/etc/hostnameแล้วคุณสามารถใช้โดยไม่ต้องรีสตาร์ทโดยใช้ชื่อโฮสต์ (1)ด้วยตัวเลือก-F( --file) เป็นรูต:

sudo hostname -F /etc/hostname

ชื่อโฮสต์ (5)การจัดการกับ/etc/hostnameและโปรแกรมดังกล่าวได้รับการเดียวกันใน Debian และอนุพันธ์มานานกว่ายี่สิบปีแล้วและแพคเกจให้มันได้รับการติดแท็กที่สำคัญและจำเป็นและ IIRC สคริปต์ init ได้ใช้ตัวอักษรในสิ่งเดียวกันสำหรับ ทศวรรษที่ผ่านมา ( /etc/init/hostname.confยังมีมัน) ดังนั้นฉันต้องบอกว่าฉันงงอย่างแท้จริงว่าไม่มีใครพูดถึงเรื่องนี้แล้ว :)


คำเตือน: จะไม่ทำงานกับ Ubuntu 18+ ซึ่งใช้งาน cloud-init ตามค่าเริ่มต้นซึ่งควบคุมชื่อโฮสต์เมื่อบูต
nslntmnx

@nslntmnx erm อะไรนะ? Ubuntu 18 มีการอ้างอิงอะไรใหม่แนะนำให้ใช้การเริ่มต้นบนคลาวด์ คุณอาจนึกถึงภาพที่ปรับแต่งโดยคลาวด์ซึ่งในกรณีนี้ไม่ควรแปลกใจที่ภาพเหล่านั้นใช้เครื่องมือจัดเตรียมระบบคลาวด์แบบกำหนดเอง
Josip Rodin

3
sudo hostname your-new-name
sudo /etc/init.d/networking restart

นั่นควรจะทำงานที่ฉันคิดว่า


5
ฉันไม่คิดว่าสิ่งนี้จะอยู่รอดได้เมื่อเริ่มต้นใหม่
Collin Anderson

คำเตือน: จะไม่ทำงานกับ Ubuntu 18+ ซึ่งใช้งาน cloud-init ตามค่าเริ่มต้นซึ่งควบคุมชื่อโฮสต์เมื่อบูต
nslntmnx

3

ฉันได้อ่านคำตอบแล้ว แต่ฉันคิดว่าคุณน่าจะมองหาสิ่งนี้:

เพียงรันคำสั่งสองคำสั่งนี้หลังจากแก้ไข/etc/hostnameไฟล์

$ sudo service hostname restart
$ exec bash

นั่นคือทั้งหมดที่ ไม่จำเป็นต้องรีสตาร์ทนอกจากนี้ยังต้องแน่ใจว่าคุณเปลี่ยนชื่อ/etc/hostsไฟล์ด้วย


ไม่เหมือนคำตอบอื่น ๆ มากมายนี่ไม่ได้ปรับปรุง/etc/hosts(ฉันยืนยันเมื่อวันที่ 14.04)
IsaacS

คำเตือน: จะไม่ทำงานกับ Ubuntu 18+ ซึ่งใช้งาน cloud-init ตามค่าเริ่มต้นซึ่งควบคุมชื่อโฮสต์เมื่อบูต
nslntmnx

2

Ubuntu 16.04

โซลูชันขึ้นอยู่กับคำตอบจาก DigitalOcean Comunity

แก้ไขไฟล์โฮสต์

$ sudo nano /etc/hosts

แทนที่oldnameด้วยชื่อใหม่

127.0.0.1 localhost newname

ตั้งค่าชื่อโฮสต์ใหม่

$ sudo hostnamectl set-hostname newname


คำเตือน: จะไม่ทำงานกับ Ubuntu 18+ ซึ่งใช้งาน cloud-init ตามค่าเริ่มต้นซึ่งควบคุมชื่อโฮสต์เมื่อบูต
nslntmnx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.