Saya mengubah nama host saya, mengapa bash PS1 prompt saya tidak berubah

21

Saya mengubah nama host saya dengan mengedit / etc / hostname dan dapat melihat nama host baru menggunakan perintah hostnamedan hostname -F.

Namun prompt shell masih menampilkan nama host lama.

Omong-omong, ini Ubuntu 11.0.4. Prompt diatur pada saya .bashrcyang belum saya edit. Keluar dan bahkan me-reboot tidak berpengaruh.

Bagian yang relevan dari Ubuntu standar .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 tidak disetel saat saya masuk ...)

Saya kira nama host diambil oleh karakter khusus \ h.

Berikut pengaturan PS1 seperti yang dilaporkan dalam shell:

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

Dan inilah yang ditunjukkan PS1:

username@oldhostname:~$ 

Saya mengulangi proses menggunakan perintah yang tepat dalam jawaban Warren. Ternyata nama host berfungsi sampai reboot tetapi kemudian hilang, meskipun /etc/hostnameberisi nama host baru.

Dizzley
sumber
Apa yang echo $PS1ditunjukkan?
Keith
@Keith - Saya memperbarui pertanyaan untuk menampilkan PS1.
Dizzley
Terima kasih atas pembaruannya, itu membuat saya kesal karena saya tidak ingat dhcp bisa melakukannya karena saya tidak pernah membiarkannya. Terima kasih juga untuk kembali dan tetap mengikuti pertanyaan dan (akhirnya) menambahkan suntingan Anda sebagai jawaban, selamat datang di unix.SE!
Caleb

Jawaban:

24

Saya menjawab pertanyaan saya sendiri, mengingat jawaban sebelumnya oleh Keith dan Warren, dan resolusi yang sebenarnya. Masalah yang dirasakan adalah "Saya mengubah nama host saya, mengapa bash PS1 prompt saya tidak berubah?" Masalah sebenarnya adalah "Mengapa sistem saya dikembalikan ke nama host semula saat reboot?"

Jawaban dalam kasus khusus ini adalah: DHCP dikonfigurasikan untuk mengabaikan pengaturan lokal.

Cara Efektif untuk Mengubah Nama Host

Berikut ini berlaku untuk Ubuntu, ymmv .

  1. Ubah nama host persisten dengan mengedit file /etc/hostname.

    echo 'mynewhostname' | sudo tee /etc/hostname
  2. Untuk mengubah nama host untuk sistem yang sedang berjalan, gunakan perintah hostname . Tanpa Langkah 1 ini akan diatur ulang saat reboot. Masuk akal untuk menggunakan nilai yang baru saja Anda tetapkan:

    sudo hostname -F /etc/hostname

    atau yang setara:

    sudo hostname `cat /etc/hostname`
  3. Tetapkan nama domain yang sepenuhnya memenuhi syarat (FQDN) di /etc/hosts.

    Kutipan:

    127.0.0.1    mynewhostname.mydomainname.com    mynewhostname
  4. Periksa apakah mesin menjalankan klien DHCP. Selain alamat IP, server DHCP mungkin juga menimpa pengaturan seperti nama host dan resolusi DNS. Layanan hosting "cloud" mungkin melakukan ini sehingga gambar mesin pada disk dapat digunakan kembali beberapa kali tanpa mengedit file konfigurasi.

    Jika ada, edit file konfigurasi klien DHCP /etc/default/dhcpcduntuk mengomentari SET_HOSTNAMEarahan:

    #SET_HOSTNAME='yes'
  5. Jika memungkinkan, reboot sistem dan periksa namanya telah berubah dengan:

    hostname

Langkah 4 adalah berita baru bagi saya dan membuat saya ketahuan. Saya pikir akan bermanfaat untuk mendokumentasikan seluruh proses dalam jawaban ini. Langkah itu milik (Linode) instruksi layanan hosting saya yang seharusnya saya baca dengan benar.

Dizzley
sumber
Jika jawaban ini tampaknya tepat, suara positif dari orang lain akan dihargai karena saya tidak dapat memilih jawaban saya sendiri.
Dizzley
2

File tersebut /etc/hostnamemenyimpan salinan nama host yang persisten, dan digunakan selama bootup untuk mengatur salinan run-time. Untuk mengubah salinan run-time tanpa me-reboot, katakan:

$ sudo hostname `cat /etc/hostname`

Atau cukup berikan nama host baru sebagai parameter ke hostname(1)perintah.

Warren Young
sumber
Masalah saya adalah kegigihan. Saya menggunakan dan memverifikasi nama host runtime (lihat pertanyaan). Juga, "sudo hostname -F / etc / hostname" adalah bentuk alternatif dari perintah (man hostname). Namun, saya melakukan seperti yang Anda sarankan. Nama host hilang pada saat reboot. :( Saya juga telah menempatkan FQDN ke /etc/host.conf dan /etc/host.conf diatur untuk hanya menggunakan mengikat saya masih bingung..
Dizzley
Saya telah memperbarui Q dengan resolusi dan akan menjawab pertanyaan saya sendiri sebentar lagi. Terima kasih Warren / Keith.
Dizzley
Seharusnya 'Saya juga memasukkan FQDN ke / etc / hosts.'
Dizzley
-1

Saya melihat Anda memiliki /hdi Anda PS1dan kemudian menyebutkan FQDN, sekarang, bisakah Anda memposting nama host lama & baru yang Anda coba gunakan?

  • /h menunjukkan nama host hingga '.'
  • /H menunjukkan FQDN lengkap

Cobalah

njekto
sumber
Hai njekto. NB itu \ h bukan / h. Saya suka merahasiakan nama host saya ketika server produksi jadi "oldname" dan "newname" (tanpa titik). Saya orang tua di Unix tapi ini membuat saya bingung - Saya tidak pernah melihat dhcpcd digunakan seperti ini. Tampaknya prompt PS1 salah, tetapi masalah sebenarnya adalah / etc / hostname ditimpa oleh dhcpcd saat boot. Dhcpcd digunakan karena gambar mesin saya dapat digunakan kembali atau diduplikasi ke pengaturan alamat IP lain sehingga hoster saya, Linode, menghasilkan nilai-nilai default menggunakan DHCP sehingga setiap contoh gambar Ubunto saya unik. Saya seorang pemula cloud, jadi ini menyenangkan.
Dizzley
-1
  • Gunakan huruf kapital hdi PS1:

    PS1='${debian_chroot:+($debian_chroot)}\u@\H:\w\$ '
moosa
sumber