“Hostname --fqdn” neden Ubuntu bilgisayarımda çalışmıyor?


10

Ben Ubuntu 10.04 LTS kullanıyorum ve ben komutu yazdığınızda hostname --fqdn, ben mesajı alıyorum: hostname: Name or service not known.

Bu nedenle, globalbaşarıyla yükleyemiyorum ve denediğimde aşağıdaki hatayı alıyorum:

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)

Benim /etc/nsswitch.confaşağıda.

# /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

Bunun ne anlama geldiğini ve bunu nasıl düzeltebileceğimi bilen var mı?


1
Neden bir FQDN istiyorsunuz? Sormak zorunda kalırsanız, muhtemelen birini istemezsiniz veya birini veya her ikisini de kullanamazsınız.
msw

Yanıtlar:


11

İçeriğini sağlayabilir misiniz /etc/nsswitch.conf?

/Etc/nsswitch.conf "hosts" satırı için kötü bir değere sahip gibi görünüyor. "Dosyalar" ile mi başlıyor?

Aksi takdirde FQDN, / etc / hosts dosyasını düzenleyerek ve FQDN'yi ana bilgisayar adının göründüğü satıra koyarak ayarlanır. Ana bilgisayar adınız "foo" olduğunu ve bir satır bulduğunuzu varsayalım:

127.0.0.1 foo

Bu şekilde düzenlersiniz:

127.0.0.1 foo.localdomain foo

foo.localdomain yeni FQDN'niz olur.


İstediğiniz gibi bu dosyanın içeriğini ekledim! Yanıtınız için teşekkürler!! :)
RadiantHex

@Rapael / etc / hosts dosyasını değiştirdim ancak ad çözümlemesinde geçici hata vermeye başladı. Neden olduğuna dair bir fikrin var mı?
Muhammad Adeel Zahid

6

/ etc / hosts'i FQDN'nizi eklemek için düzenleyin

Sözdizimi hakkında bilgi burada bulunur: http://www.faqs.org/docs/securing/chap9sec95.html

Güncelleme: Sorunuzu tekrar okumak neredeyse yolunuzun doğru ayarlanmamış olması gibi görünüyor ya da hostname programında bir sorun var.

'hangi ana bilgisayar adını' yap

'/ bin / hostname' yoluyla dönmelidir

bu işe yararsa komutu tekrar deneyin,

'/ bin / hostname --fqdn'


Teşekkürler!!! Bunu sorarsam özür dilerim ama FQDN'mi nasıl bulabilirim?
RadiantHex

1
Bu 'Tam Nitelikli Etki Alanı Adı' anlamına gelir superuser.com bir FQDN'dir. Bir alan adınız varsa onu kullanabilirsiniz, aksi takdirde dahili bir ağdaysanız bir şey oluşturabilirsiniz.
Mudfly

1
Teşekkürler @Mudfly! Talimatlarınızı denedim, son komutlar tekrar "hostname: Name veya service unknown" döndürür!
RadiantHex

Daha fazla bilgi olmadan probleminizin koşullarını bilmek zor. EG: Bu yerel bir yükleme mi, ssh üzerinden oturum açtınız mı, bir kullanıcı hesabı mı kullanıyorsunuz veya oturum açmış mısınız? Ubuntuforums.org adresini ziyaret etmek ve benzer sorunları çözen başkalarını aramak isteyebilirsiniz .
Mudfly

1
Bu burada vahşi bir sıçrama yapıyor, ancak Ubuntu kök kullanımı üzerinde sudo kullanmayı tercih ediyor. Kabuğun doğru şekilde ayarlanmamış olması mümkündür. Bunu test etmek çok basit. Öncelikle 'ls -al / root /' yapabilir ve bir .bashrc görüp göremeyeceğinizi görebilirsiniz .bashrc skel'den kopyalayın 'cp ​​/etc/skel/.bashrc ./' dosya zaten olsa bile bu. Üçüncü olarak bash kullandığınızdan emin olmak için '/ bin / bash' yapın. Son olarak orijinal komutunuzu tekrar deneyin, tamamen yapılandırılmış bir bash kabuğunda çalışıyor olmalısınız.
Mudfly

0

Basit hostnamekomut çağrısının aksine, çağırma hostname --fqdnbirkaç şey daha yapmaya çalışır, bu da genellikle bazı DNS aramalarıyla sonuçlanır.

Aşağıdaki (başarılı) çağrıyı ele alalım (bu bir Red Hat kutusundan, ancak Ubuntu için aynı olması gerektiğini düşünürüm):

# 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

Çok yararlı --verboseseçeneğe dikkat edin.

Kısacası, basit dışında herhangi bir şey hostnamemuhtemelen beklediğinizden daha fazlasını yapıyor. İşte başka bir örnek:

# 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

Ve yuvarlamak için:

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

Bir sistemin ana bilgisayar adının (gethostname tarafından döndürülen şekilde) bana yalnızca 'myserver' gibi nitelenmemiş bir ana bilgisayar adı olabileceğini unutmayın. Bu yüzden yüklemek istediğiniz programın hostname --fqdnyerine kullanıyor .

Hata iletisi çözümleyici işlevlerinden hostname: Name or service not knowngelir : bunlar sistem kitaplığının adlar ve adresler (genellikle DNS adları ve IP adresleri) arasında çeviri yapan parçalarıdır.

Aslında, çözümleyici sadece DNS'den fazlasını (ve sadece ana bilgisayar adları ile IP adresleri arasında çeviri yapmaktan daha fazlasını yapar); davranışı kısmen dosya tarafından yapılandırılır /etc/nsswitch.confve genellikle aşağıdakilere, genellikle bu sırayla danışır:

  • 'hosts' (Linux'ta / etc / hosts anlamına gelir)
  • (bazen) nscd (ad hizmeti önbelleğe alma arka plan programı)
  • 'Dns'

(not, yukarıdaki nokta için dnsmasqd --- gibi bir önbellek DNS sunucunuz da olabilir, bu hala 'dns' mekanizması altındadır).

Kazmak , ev sahibi ve saygıdeğer nslookup gibi araçların bu sırayı takip etmediğini belirtmek gerekir; bunlar açıkça DNS sorgulama araçlarıdır. Bu, onlara güvenirseniz (örneğin bir komut dosyasında), normal istemci programlarının (sistem çözümleyicisini kullanan) ne olacağından farklı bir sonuç elde edebileceğiniz anlamına gelir. Bu nedenle, özellikle nscd çalışıyor gibi bir önbellek bileşeniniz varsa getent programını komut dosyalarında kullanın .

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

Dolayısıyla, buradaki önemli paket, a) kendi makineniz için bir girişle iyi yapılandırılmış / etc / host'larınız varsa ve b) /etc/nsswitch.conf'nuzun olağan yapılandırmaya sahip olması durumunda - hosts: files dnsbu sırayla, c) bile ortamınızda iyi yapılandırılmış DNS'niz yoksa, hostname --fqdnçalışmalıdır.

İyi yapılandırılmış bir DNS'de, sunucunuzun 'standart' adını veren bir 'ters' adresiniz ("PTR kaydı") olması beklenir ve bu adın da aranabilmesi gerekir (" "IPv4 için bir kayıt).

Kısa versiyon: ekle --verbose; sizi eksik olduğunuza işaret edecektir.

Umarım neler olup bittiğini anlamanıza yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.