จะเปลี่ยนชื่อโฮสต์บน CentOS 6.5 ได้อย่างไร


49

ฉันไม่สามารถเปลี่ยนชื่อโฮสต์บนโฮสต์ CentOS 6.5 ของฉันได้ ฉันทำตามคำแนะนำที่พบที่นี่: http://www.rackspace.com/knowledge_center/article/centos-hostname-change

ฉันตั้งค่าของฉัน/etc/hostsดังนั้น ...

    [root@mig-dev-006 ~]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain 
    192.168.32.128  ost-dev-00.domain.com ost-dev-00
    192.168.32.129  ost-dev-01.domain.com ost-dev-01

... จากนั้นฉันก็ทำ/etc/sysconfig/networkไฟล์ของฉันเป็นเช่นนั้น ...

    [root@mig-dev-006 ~]# cat /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=ost-dev-00.domain.com
    NTPSERVERARGS=iburst

... จากนั้นฉันก็วิ่งไปhostnameเรื่อย ๆ ...

    [root@mig-dev-006 ~]# hostname ost-dev-00.domain.com

... และจากนั้นฉันก็ทุบตีและดูเหมือนว่าจะดี ...

    [root@mig-dev-006 ~]# bash

... แต่เมื่อฉันรีสตาร์ทเครือข่ายชื่อโฮสต์เก่าจะกลับมา:

    [root@ost-dev-00 ~]# /etc/init.d/network restart
    Shutting down interface eth0:  Device state: 3 (disconnected)
                                                               [  OK  ]
    Shutting down loopback interface:                          [  OK  ]
    Bringing up loopback interface:                            [  OK  ]
    Bringing up interface eth0:  Active connection state: activating
    Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/6
    state: activated
    Connection activated
                                                               [  OK  ]
    [root@ost-dev-00 ~]# bash
    [root@mig-dev-006 ~]# 

... ฉันคิดไม่ออก ฉันทำอะไรผิดที่นี่


1
คุณแก้ไข/etc/hostnameไฟล์ของคุณแล้วหรือยัง?
Anthon

ไม่มี/etc/hostnameไฟล์ [root@smp-mig-dev-006 ~]# ls -l /etc/hostnameขาออกls: cannot access /etc/hostname: No such file or directory
Red Cricket

อาจเป็นสิ่งที่ Centos manpage ของคุณบอกอะไรคุณเกี่ยวกับความคงทนของhostname somenameมันว่ามันมีผลกระทบยาวนาน? (ถ้าไม่ใช่ทำไมคุณโทรออก?)
Anthon

3
ฉันคิดว่า/etc/hostnameอยู่ใน CentOS 7 แต่ไม่ได้อยู่ใน CentOS 6
Pavel Šimerda

ฉันรู้ว่านี่เป็นรุ่นเก่า แต่ฉันได้กลิ่น NetworkManager ในที่ทำงานไม่เช่นนั้นหรือคุณอาจมี HOSTNAME = ตั้งอยู่ในไฟล์อื่นนอกเหนือจากเครือข่าย (เช่นในสคริปต์เครือข่าย) ไฟล์ / etc / hostname ไม่ได้ใช้ใน CentOS 6 (เป็น systemd; นั่นหมายถึง CentOS 7 ขึ้นไป) ตรวจสอบเนื้อหาของไฟล์ / etc / sysconfig / network-script / ifcfg-eth0 อะไรอยู่ในนั้น? หมายเหตุ: หากคุณดูที่สคริปต์ if_post ของ Redhat ใน network-สคริปต์ / คุณจะเห็นว่า set_hostname เรียกใช้ "hostname $ HOSTNAME" โดยที่ HOSTNAME เป็นชุดตัวแปรของเชลล์ในไฟล์เครือข่ายหรือไฟล์ ifcfg-eth0
Mike S

คำตอบ:


67

ในการเปลี่ยนชื่อโฮสต์อย่างถาวรคุณต้องเปลี่ยนชื่อในสองแห่ง:

vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=newHostName

และ: เป็นความคิดที่ดีถ้าคุณมีแอปพลิเคชันใด ๆ ที่จำเป็นต้องแก้ไข IP ของชื่อโฮสต์)

vi /etc/hosts 
127.0.0.1 newHostName
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

แล้ว

 rebooting the system

7
ในตอนท้ายของการเปลี่ยนแปลงทั้งสองนี้เพิ่มhostname newHostNameไม่จำเป็นต้องรีบูตฉันคิดว่า
Edakos

4
ดูเหมือนว่าการแก้ไขไฟล์ / etc / hosts จะไม่จำเป็น
jgritty

2
คำตอบได้รับการยอมรับ แต่ก่อนอื่น/etc/hostsการเปลี่ยนแปลงมีไว้เพื่อให้ชื่อโฮสต์สามารถแก้ไขได้เท่านั้นไม่สามารถเปลี่ยนได้และ/etc/sysconfig/networkจะเหมือนกับใน OP ทุกคนสามารถอธิบายสิ่งที่ OP ต้องการเพื่อเปลี่ยนแปลงเพื่อให้ทำงานได้จริงหรือไม่
Pavel Šimerda

3
ฉันคิดว่าคำตอบที่ถูกต้องควรเป็นคำตอบสำหรับคำถาม ข้อมูลที่ทำซ้ำจากคำถามนั้นดีตราบใดที่คำตอบระบุว่า OP กำหนดค่าไว้อย่างถูกต้อง แต่ไม่ได้ดำเนินการที่จำเป็นในการโหลดการกำหนดค่าใหม่ (เช่นรีบูต)
Pavel Šimerda

2
ไม่จำเป็นต้องบูตเครื่องใหม่ ตรวจสอบ strace -f ชื่อโฮสต์ blah เคอร์เนลได้รับข้อความทันที / etc / hosts ไม่มีผลกับชื่อโฮสต์ของโฮสต์ใน CentOS 6.5 (และ 7) อย่างน้อย และคำตอบนี้ไม่ถูกต้องเนื่องจากไม่มีคำสั่ง hostname ซึ่งแจ้งเคอร์เนลของชื่อโฮสต์
Mike S

65

ทางออกสำหรับ CentOS 7 สามารถพบได้ที่นี่ :

hostnamectl set-hostname <new hostname>

3
"hostnamectl" เป็นโซลูชันเดียวที่ทำงานได้สำหรับฉันใน CentOS Linux รีลีส 7.2.1511
AJN

.. และรีบูตในกรณีของฉัน
WesternGun

ฉันไม่คิดว่าคุณจำเป็นต้องรีบูตเพียงแค่เริ่มระบบใหม่ควรทำงาน
FearlessHyena

5
คำถามเกี่ยวกับ CentOS 6.5 CentOS 7 เป็นสัตว์ที่แตกต่างอย่างสิ้นเชิงและคำตอบนี้ไม่ได้อยู่ที่นี่
Harald

15

คุณสามารถเปลี่ยนชื่อโฮสต์ของคุณด้วยคำสั่งเดียว

  • คำสั่ง: hostname- แสดงชื่อโฮสต์เก่า
  • คำสั่ง: hostname <new name>-this จะตั้งชื่อโฮสต์ใหม่

ตัวอย่าง

$ hostname mynewhost

สำหรับการคงชื่อโฮสต์ใหม่ไว้ระหว่างการรีบูท

แก้ไขไฟล์ / etc / sysconfig / networkให้มีลักษณะดังนี้

NETWORKING=yes
HOSTNAME=myhostanme

สำหรับวิธีใช้วิดีโอ


ฉันเชื่อว่านี่เป็นคำตอบที่ถูกต้องที่สุด มูลค่าเพิ่มที่ทำงาน: ชื่อโฮสต์ของมนุษย์; แสดงตัวเลือกเพิ่มเติมสำหรับการตั้งค่าแบบสวยแบบชั่วคราวแบบคงที่และอื่น ๆ อีกมากมาย
ekerner

ฉันคิดว่ามันไม่เพียงพอที่จะขัดขืนเมื่อรีบูต คุณต้องแก้ไขไฟล์ / etc / sysconfig / network ด้วย
Pozinux

6

นอกเหนือจากคำตอบที่มีให้สำหรับ CentOS 6.5 แล้ว

CentOS 7ยังมีเครื่องมือส่วนติดต่อผู้ใช้แบบข้อความเพื่อเปลี่ยนชื่อโฮสต์ ( และการตั้งค่าเครือข่ายอื่น ๆ ) ซึ่งเป็นส่วนหนึ่งของ Network Manager:

nmtui

เริ่มส่วนต่อประสานผู้ใช้นี้:

ป้อนคำอธิบายรูปภาพที่นี่

Set system hostnameซึ่งมีตัวเลือกให้กับ

อินเทอร์เฟซผู้ใช้ข้อความของ NetworkManager ถูกติดตั้งโดยค่าเริ่มต้นในอิมเมจ CentOS-7-x86_64-DVD-1511.iso, การติดตั้งพื้นฐาน หากคุณไม่มีคุณสามารถติดตั้งโดยใช้คำสั่งต่อไปนี้:

yum install NetworkManager-tui

2

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

ตัวอย่างเช่น: หากคุณตั้งชื่อสคริปต์ changeHost.py ให้เรียกใช้เป็น

changeHost.py [NewHostName]

โดยที่ NewHostName คือชื่อโฮสต์ที่คุณต้องการ

ตรวจสอบให้แน่ใจว่าเรียกใช้สคริปต์นี้ในฐานะรูท



#!/usr/bin/env python
import os

from sys import argv
script, newHostName = argv

print "Modifying network file..."
target = open("/etc/sysconfig/network","w")
target.truncate()
target.write("NETWORKING=yes\n")
target.write("HOSTNAME=")
target.write(newHostName)
target.write("\n")
target.close()

print "Modifying hosts file..."
target = open("/etc/hosts","w")
target.truncate()
target.write("127.0.0.1 ")
target.write(newHostName)
target.write(" localhost.localdomain localhosts\n")
target.close()

print "Set new hostname to %r" % newHostName
os.system('/bin/hostname ' + newHostName)

2
อืมนั่นเป็นสคริปต์ที่น่าเกลียด ฉันสงสัยว่า Puppet จะเป็นเครื่องมือที่ดีกว่าสำหรับการจัดการกับชื่อโฮสต์หรือไม่
Red Cricket


4
สคริปต์นี้มีความยาวประมาณ 3 เท่าตามที่จำเป็น Python เป็นเครื่องมือที่ผิดสำหรับงาน สคริปต์ทุบตีจะสั้นกว่าอ่านและบำรุงรักษาได้มากกว่า
Mike S

2

ไม่จำเป็นต้องรีบู๊ตเพื่อเปลี่ยนชื่อโฮสต์บน CentOS 6.5

คำสั่งต่อไปนี้แจ้งเคอร์เนลของชื่อโฮสต์ใหม่:

# hostname new_hostname

คำสั่งต่อไปนี้เพื่อให้ชื่อโฮสต์คงอยู่ตลอดการบู๊ตใหม่:

# sed -i "s/^HOSTNAME=.*/HOSTNAME=new_hostname/g" /etc/sysconfig/network

2

ถ้าคุณอยู่บน Centos 7.x แทรกคำสั่งต่อไปนี้

nmtui

มันจะมีตัวเลือกของชื่อโฮสต์ระบบชุด กด Enter

เขียนชื่อโฮสต์ของคุณ

คลิกตกลง

ตอนนี้ตรวจสอบกับคำสั่งชื่อโฮสต์

มันจะมีชื่อโฮสต์ที่คุณบันทึกไว้


1

น่าเสียดายที่ฉันไม่สามารถเปลี่ยนชื่อโฮสต์ได้โดยทำรายการใน:

/ etc / sysconfig / เครือข่าย

และ

ไฟล์ / etc / hosts

อย่างไรก็ตามฉันสามารถเปลี่ยนชื่อโฮสต์โดยแก้ไขไฟล์ด้านล่าง:

vi /etc/hostname
server01

รีสตาร์ทและทดสอบชื่อโฮสต์โดย:

hostname

2
หมายเหตุความคิดเห็นเกี่ยวกับการระบุ OP ที่/etc/hostnameมีอยู่ใน CentOS 7 แต่ไม่ใช่ CentOS 6
Fox
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.