호스트 이름을 변경했는데 왜 내 bash PS1 프롬프트가 변경되지 않습니까?


21

/ etc / hostname을 편집하여 호스트 이름을 변경했으며 hostnameand hostname -F명령을 사용하여 새 호스트 이름을 볼 수 있습니다 .

그러나 쉘 프롬프트에는 여전히 이전 호스트 이름이 표시됩니다.

그건 그렇고 우분투 11.0.4입니다. 프롬프트는 .bashrc편집하지 않은 것으로 설정되어 있습니다. 로그 아웃하고 재부팅해도 효과가 없습니다.

표준 우분투 관련 섹션 .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:~$ 

워렌의 대답에서 정확한 명령을 사용하여 프로세스를 반복했습니다. 호스트 이름은 재부팅 할 때까지 작동하지만 /etc/hostname새 호스트 이름이 포함되어 있어도 손실됩니다 .


무엇을 echo $PS1보여줍니까?
Keith

@Keith-PS1을 표시하도록 질문을 업데이트했습니다.
Dizzley

업데이트 덕분에 dhcp는 결코 그것을 허용하지 않았기 때문에 dhcp가 그렇게 할 수 있다는 것을 기억하지 못했기 때문에 나를 버렸습니다. 다시 돌아와서 질문 위에 머물면서 (결국) 편집 내용을 답변으로 추가해 주셔서 감사합니다.
Caleb

답변:


24

Keith와 Warren의 이전 답변과 실제 해결책에 비추어 내 자신의 질문에 대답하고 있습니다. 인식 된 문제는 "호스트 이름을 변경했는데 왜 내 bash PS1 프롬프트가 변경되지 않습니까?" 였습니다. 실제 문제는 "재부팅시 왜 시스템이 이전 호스트 이름으로 되돌아 갔습니까?" 였습니다.

이 특별한 경우에 대한 대답은 다음과 같습니다. DHCP가 로컬 설정을 무시하도록 구성되었습니다.

호스트 이름을 변경하는 효과적인 방법

다음은 Ubuntu, 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 단계는 나에게 소식이었고 나를 사로 잡았다. 이 답변에 전체 프로세스를 문서화하는 것이 도움이 될 것이라고 생각했습니다. 이 단계는 (리 노드) 호스팅 서비스의 지침에 따라 제공 됩니다.


이 답변이 적절 해 보인다면, 본인의 답변에 투표 할 수 없기 때문에 다른 사람들의 찬성에 감사드립니다.
Dizzley 2016 년

2

파일 /etc/hostname은 호스트 이름의 영구 사본을 보유하며 부팅 중에 런타임 사본을 설정하는 데 사용됩니다. 재부팅하지 않고 런타임 사본을 변경하려면 다음과 같이 말합니다.

$ sudo hostname `cat /etc/hostname`

또는 새 호스트 이름을 매개 변수로 hostname(1)명령에 전달하십시오.


내 문제는 지속성입니다. 런타임 호스트 이름을 사용하고 확인했습니다 (질문 참조). 또한 "sudo hostname -F / etc / hostname"은 다른 형식의 명령 (man hostname)입니다. 그러나 나는 당신이 제안한대로했습니다. 재부팅시 호스트 이름이 유실됩니다. :( 또한 FQDN을 /etc/host.conf에 넣고 /etc/host.conf는 bind 만 사용하도록 설정되어 있습니다. 여전히 손실이 있습니다.
Dizzley

Q를 해결책으로 업데이트했으며 잠시 후 내 질문에 대답 할 것입니다. 감사합니다 워렌 / 키이스.
Dizzley

'FQDN을 / etc / hosts에 넣었습니다.'
Dizzley 2016 년

-1

나는 당신이 당신을 가지고 /h있고 PS1FQDN을 언급하는 것을 보았습니다 . 이제, 당신이 사용하려고하는 오래된 호스트 이름과 새 호스트 이름을 게시 할 수 있습니까?

  • /h 첫 번째 '.'까지 호스트 이름을 표시합니다.
  • /H 전체 FQDN을 보여줍니다

시도 해봐


안녕 to 토. NB / h가 아닙니다. 프로덕션 서버 인 경우 호스트 이름을 "oldname"및 "newname"(점 없음)으로 비공개로 유지하고 싶습니다. 나는 유닉스의 노련한 사람이지만 이것은 나를 쿵쾅 거리게했다. 나는 dhcpcd가 이런 식으로 사용되는 것을 보지 못했다. PS1 프롬프트가 잘못된 것처럼 보였지만 실제 문제는 부팅시 dhcpcd가 / etc / hostname을 덮어 쓰는 것입니다. Dhcpcd는 내 컴퓨터 이미지를 다른 IP 주소 설정으로 재배치하거나 복제 할 수 있으므로 호스트 호스트 인 Linode가 DHCP를 사용하여 기본값을 생성하므로 내 Ubunto 이미지의 각 인스턴스가 고유하기 때문에 Dhcpcd가 사용됩니다. 저는 클라우드 초보자이므로 재미있었습니다.
Dizzley 2016 년

-1
  • 에서 대문자 h를 사용하십시오 PS1:

    PS1='${debian_chroot:+($debian_chroot)}\u@\H:\w\$ '
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.