ฉันเปลี่ยนชื่อโฮสต์ทำไมข้อความแจ้งเตือนทุบตี PS1 ของฉันไม่เปลี่ยนแปลง


21

ฉันเปลี่ยนชื่อโฮสต์โดยแก้ไข / etc / hostname และสามารถดูชื่อโฮสต์ใหม่โดยใช้คำสั่งhostnameและhostname -F

แต่เชลล์พรอมต์ยังคงแสดงชื่อโฮสต์เก่าอยู่

นี่คือ Ubuntu 11.0.4 โดยวิธีการ พรอมต์ตั้งอยู่ในของฉัน.bashrcซึ่งฉันไม่ได้แก้ไข ออกจากระบบและแม้กระทั่งการรีบูตไม่มีผล

ส่วนที่เกี่ยวข้องของ Ubuntu มาตรฐาน.bashrc:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

($ debian_chroot ไม่ได้ตั้งค่าในขณะที่ฉันเข้าสู่ระบบ ... )

ฉันเดาว่าชื่อโฮสต์ถูกเลือกโดยตัวละครพิเศษ \ h

นี่คือการตั้งค่า PS1 ตามที่รายงานในเชลล์:

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

และนี่คือสิ่งที่ PS1 แสดง:

username@oldhostname:~$ 

ฉันทำขั้นตอนซ้ำโดยใช้คำสั่งที่แน่นอนในคำตอบของ Warren ปรากฎว่าชื่อโฮสต์ทำงานจนกว่าจะรีบูต แต่ก็หายไปแม้ว่าจะ/etc/hostnameมีชื่อโฮสต์ใหม่


สิ่งที่ไม่echo $PS1แสดง?
Keith

@Keith - ฉันได้อัปเดตคำถามเพื่อแสดง PS1
Dizzley

ขอบคุณสำหรับการอัปเดตที่โยนฉันออกไปเพราะฉันจำไม่ได้ว่า dhcp สามารถทำเช่นนั้นได้เพราะฉันไม่เคยปล่อยให้มันทำ ขอบคุณสำหรับการกลับมาและอยู่ด้านบนของคำถามและ (ในที่สุด) การเพิ่มการแก้ไขของคุณเป็นคำตอบยินดีต้อนรับสู่ unix.SE!
Caleb

คำตอบ:


24

ฉันกำลังตอบคำถามของฉันเองโดยคำนึงถึงคำตอบก่อนหน้าโดย Keith และ Warren และการแก้ไขที่แท้จริง ปัญหาการรับรู้คือ"ฉันเปลี่ยนชื่อโฮสต์ของฉันทำไมทุบตี PS1 ของฉันไม่เปลี่ยนแปลง" ปัญหาที่แท้จริงคือ"ทำไมระบบของฉันเปลี่ยนกลับเป็นชื่อโฮสต์เดิมเมื่อรีบูต"

คำตอบในกรณีนี้คือ: DHCP ถูกกำหนดค่าให้แทนที่การตั้งค่าท้องถิ่น

วิธีที่มีประสิทธิภาพในการเปลี่ยนชื่อโฮสต์

ต่อไปนี้จะมีผลบังคับใช้อูบุนตูYMMV

  1. /etc/hostnameเปลี่ยนชื่อโฮสต์ถาวรโดยการแก้ไขไฟล์

    echo 'mynewhostname' | sudo tee /etc/hostname
  2. ในการเปลี่ยนชื่อโฮสต์สำหรับระบบที่ใช้งานอยู่ให้ใช้คำสั่งhostname หากไม่มีขั้นตอนที่ 1 จะเป็นการรีเซ็ตเมื่อรีบูต มันสมเหตุสมผลที่จะใช้ค่าที่คุณเพิ่งตั้งค่า:

    sudo hostname -F /etc/hostname

    หรือเทียบเท่า:

    sudo hostname `cat /etc/hostname`
  3. ตั้งชื่อโดเมน (แบบเต็ม FQDN) /etc/hostsใน

    ข้อความที่ตัดตอนมา:

    127.0.0.1    mynewhostname.mydomainname.com    mynewhostname
  4. ตรวจสอบว่าเครื่องกำลังรันไคลเอ็นต์ DHCP หรือไม่ นอกจากที่อยู่ IP แล้วเซิร์ฟเวอร์ DHCP อาจแทนที่การตั้งค่าเช่นชื่อโฮสต์และการแก้ไข DNS บริการโฮสติ้ง "คลาวด์" อาจทำเช่นนี้เพื่อให้ภาพของเครื่องบนดิสก์สามารถนำมาใช้ซ้ำได้หลายครั้งโดยไม่ต้องแก้ไขไฟล์กำหนดค่า

    ถ้ามีการแก้ไขแฟ้มการกำหนดค่าไคลเอ็นต์ DHCP /etc/default/dhcpcdจะแสดงความคิดเห็นออกSET_HOSTNAMEคำสั่ง:

    #SET_HOSTNAME='yes'
  5. เมื่อเป็นไปได้รีบูตระบบและตรวจสอบชื่อที่มีการเปลี่ยนแปลงด้วย:

    hostname

ขั้นตอนที่ 4 เป็นข่าวให้ฉันและจับฉันออก ฉันคิดว่ามันจะมีประโยชน์ในการบันทึกกระบวนการทั้งหมดในคำตอบนี้ ขั้นตอนนั้นเป็นมารยาทของ (Linode) คำแนะนำบริการโฮสติ้งของฉันซึ่งฉันควรอ่านอย่างถูกต้อง


หากคำตอบนี้เหมาะสมแล้วการลงคะแนนจากผู้อื่นจะได้รับการชื่นชมเนื่องจากฉันไม่สามารถลงคะแนนสำหรับคำตอบของฉันเองได้
Dizzley

2

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

$ sudo hostname `cat /etc/hostname`

หรือเพียงแค่ส่งชื่อโฮสต์ใหม่เป็นพารามิเตอร์ไปยังhostname(1)คำสั่ง


ปัญหาของฉันยังคงอยู่ ฉันใช้และตรวจสอบชื่อโฮสต์รันไทม์ (ดูคำถาม) นอกจากนี้ "sudo hostname -F / etc / hostname" เป็นรูปแบบทางเลือกของคำสั่ง (man hostname) อย่างไรก็ตามฉันทำตามที่คุณแนะนำ ชื่อโฮสต์จะหายไปเมื่อรีบูต :( ฉันยังใส่ FQDN ลงใน /etc/host.conf และ /etc/host.conf มีการตั้งค่าให้ใช้การผูกเท่านั้นฉันยังคงอยู่ในความสูญเสีย
Dizzley

ฉันได้อัปเดตคำถามด้วยความละเอียดแล้วและจะตอบคำถามของฉันเองในเวลาไม่นาน ขอบคุณ Warren / Keith
Dizzley

'ฉันได้ใส่ FQDN ไว้ใน / etc / hosts ด้วย'
Dizzley

-1

ฉันเห็นว่าคุณมี/hอยู่PS1แล้วจากนั้นพูดถึง FQDN ตอนนี้คุณช่วยโพสต์ชื่อโฮสต์เก่า & ชื่อใหม่ที่คุณพยายามใช้ได้ไหม

  • /h แสดงชื่อโฮสต์สูงสุด '.'
  • /H แสดง FQDN แบบเต็ม

ให้มันลอง


สวัสดี njekto NB มัน \ h ไม่ใช่ / h ฉันต้องการให้ชื่อโฮสต์ของฉันเป็นแบบส่วนตัวเมื่อเป็นเซิร์ฟเวอร์ที่ใช้งานจริงดังนั้น "oldname" และ "newname" (ไม่มีจุด) ฉันเป็นมือเก่าที่ Unix แต่สิ่งนี้ทำให้ฉันนิ่งงัน - ฉันไม่เคยเห็น dhcpcd ถูกใช้แบบนี้ ดูเหมือนว่าพรอมต์ PS1 นั้นผิด แต่ปัญหาที่แท้จริงคือ / etc / hostname ถูกเขียนทับโดย dhcpcd เมื่อบู๊ต Dhcpcd ถูกใช้เพราะอิมเมจเครื่องของฉันสามารถนำไปปรับใช้ซ้ำหรือทำซ้ำไปยังการตั้งค่าที่อยู่ IP อื่นได้ดังนั้น Linode ของฉันจะสร้างค่าเริ่มต้นโดยใช้ DHCP ดังนั้นอินสแตนซ์ของ Ubunto แต่ละภาพจึงไม่ซ้ำกัน ฉันเป็นมือใหม่บนคลาวด์ดังนั้นมันสนุกดี
Dizzley

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