Ubuntu 컴퓨터에서“hostname --fqdn”이 작동하지 않는 이유는 무엇입니까?


10

Ubuntu 10.04 LTS를 사용하고 있으며 명령을 입력 hostname --fqdn하면 메시지가 나타납니다 hostname: Name or service not known.

이로 인해 global성공적으로 설치할 수 없으며 시도 할 때 다음 오류가 발생합니다.

Setting up global (5.7.1-1) ...
hostname: Name or service not known
dpkg: error processing global (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 global
E: Sub-process /usr/bin/dpkg returned an error code (1)

/etc/nsswitch.conf아래에 있습니다.

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

누구나 이것이 무엇을 의미하는지, 어떻게 해결할 수 있는지에 대한 아이디어가 있습니까?


1
왜 FQDN을 원하십니까? 물어봐야한다면 아마 하나를 원하지 않거나 둘 중 하나를 사용하지 못할 수도 있습니다.
msw

답변:


11

의 내용을 제공 할 수 있습니까 /etc/nsswitch.conf?

/etc/nsswitch.conf의 "hosts"줄에 잘못된 값이있는 것 같습니다. "파일"로 시작합니까?

그렇지 않으면 / etc / hosts를 편집하고 호스트 이름이 나타나는 줄에 FQDN을 넣어 FQDN을 설정합니다. 호스트 이름이 "foo"이고 다음과 같은 줄이 있다고 가정합니다.

127.0.0.1 foo

다음과 같이 편집하십시오.

127.0.0.1 foo.localdomain foo

foo.localdomain 새로운 FQDN이 될 것입니다.


요청한대로 해당 파일의 내용을 포함 시켰습니다! 답장을 보내 주셔서 감사합니다!! :)
RadiantHex

@Rapael / etc / hosts 파일을 변경했지만 이름 확인에서 일시적인 오류가 발생하기 시작했습니다. 왜 그런 일이 일어나고 있습니까?
Muhammad Adeel Zahid

6

/ etc / hosts를 편집하여 FQDN을 추가하십시오

여기에있는 구문에 대한 정보 : http://www.faqs.org/docs/securing/chap9sec95.html

업데이트 : 질문을 다시 읽으면 경로가 올바르게 설정되지 않았거나 호스트 이름 프로그램에 문제가있는 것처럼 들립니다.

'어떤 호스트 이름'을 수행

'/ bin / hostname'경로와 함께 리턴되어야합니다.

작동하면 다음과 같이 명령을 다시 시도하십시오.

'/ bin / hostname --fqdn'


감사!!! 물어 보면 죄송하지만 FQDN을 어떻게 알 수 있습니까?
RadiantHex

1
이는 '완전한 도메인 이름'을 의미합니다 . superuser.com 은 FQDN입니다. 도메인을 소유 한 경우 도메인을 사용할 수 있습니다. 그렇지 않으면 내부 네트워크에있는 경우 무언가를 구성 할 수 있습니다.
Mudfly

1
감사합니다 @ Mudfly! 지시 사항을 시도했는데 마지막 명령은 "호스트 이름 : 이름 또는 서비스를 알 수 없음"을 다시 반환합니다.
RadiantHex

더 많은 정보가 없으면 문제의 상태를 알기가 어렵습니다. EG : 로컬 설치입니까, ssh를 통해 로그인 했습니까, 사용자 계정을 사용 중입니까, 루트 로그인입니까? ubuntuforums.org 를 방문 하여 유사한 문제를 해결 한 다른 사람을 검색 할 수 있습니다 .
Mudfly

1
우분투는 루트를 사용하는 것보다 sudo를 사용하는 것을 선호합니다. 쉘이 올바르게 설정되지 않았을 가능성이 있습니다. 이것을 테스트하는 것은 매우 간단합니다. 먼저 'ls -al / root /'를 수행하고 .bashrc가 표시되는지 확인하십시오. .bashrc가 없으면 skel 'cp /etc/skel/.bashrc ./'에서 복사하십시오. 이미 파일이있는 경우에도 마찬가지입니다. 셋째, '/ bin / bash'를 수행하여 bash를 실행하고 있는지 확인하십시오. 마지막으로 원래 명령을 다시 시도하십시오. 완전히 구성된 bash 쉘에서 실행 중이어야합니다.
Mudfly

0

간단한 hostname명령 호출 과 달리 호출 hostname --fqdn은 몇 가지 작업을 더 시도하여 일부 DNS 조회가 발생합니다.

예를 들어 다음과 같은 (성공적인) 호출 (Red Hat 상자에서 가져온 것이지만 우분투에서도 동일해야한다고 생각합니다) :

# hostname --fqdn --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
myserver.example.com

매우 유용한 --verbose옵션에 유의하십시오 .

간단히 말해서, 단순 이외의 hostname것은 아마도 예상보다 많은 일을하고있을 것입니다. 또 다른 예는 다음과 같습니다.

# hostname --ip --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
10.1.2.3

그리고 반올림 :

# hostname --verbose
gethostname()=`myserver.example.com'
myserver.example.com

gethostname에 의해 리턴 된 시스템의 호스트 이름은 'myserver'와 같은 규정되지 않은 호스트 이름 일 수 있습니다. 설치하려는 프로그램이 hostname --fqdn대신 사용하는 이유 입니다.

오류 메시지 hostname: Name or service not known리졸버 기능 에서 비롯됩니다. 시스템 라이브러리에서 이름과 주소 (일반적으로 DNS 이름 및 IP 주소)를 변환하는 부분입니다.

실제로, 리졸버는 단순한 DNS 이상 (호스트 이름과 IP 주소 간을 변환하는 것 이상)을 수행합니다. 그 동작은 파일에 의해 부분적으로 구성되며 /etc/nsswitch.conf일반적으로 다음 순서대로 일반적으로이 순서를 따릅니다.

  • '호스트'(Linux에서는 / etc / hosts를 의미 함)
  • (때로는) nscd (이름 서비스 캐싱 데몬)
  • 'dns'

(위의 시점에서 dnsmasqd와 같은 캐싱 DNS 서버를 가질 수 있으며 여전히 'dns'메커니즘에 속합니다).

dig , host 및 유서 깊은 nslookup 과 같은 도구 는이 순서를 따르지 않습니다. 그들은 명시 적으로 DNS 쿼리 도구입니다. 이것은 (예를 들어 스크립트에서) 그것들에 의존하면 일반 클라이언트 프로그램과 다른 결과 (시스템 리졸버를 사용하는)와 다른 결과를 얻을 수 있음을 의미합니다. 이러한 이유로, 특히 nscd와 같은 캐싱 구성 요소가 실행중인 경우 스크립트 에서 getent 프로그램을 사용하십시오 .

# getent hosts myserver.example.com
10.1.2.3    myserver.example.com

여기서 중요한 점은 a) 자신의 컴퓨터에 대한 항목으로 / etc / hosts를 잘 구성한 경우 b) /etc/nsswitch.conf는 일반적인 hosts: files dns순서로 구성한 것입니다. 환경에 DNS가 제대로 구성되어 있지 않으면 hostname --fqdn작동해야합니다.

잘 구성된 DNS에서는 서버의 '정식'이름을 제공하는 하나의 '역방향'주소 ( "PTR 레코드")가 있어야하며 해당 이름도 조회 할 수 있어야합니다 ( " IPv4의 경우 레코드 ").

짧은 버전 : add --verbose; 그것은 당신이 부족한 것을 가리킬 것입니다.

무슨 일이 일어나고 있는지 이해하는 데 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.