Bir bash komut dosyasında Unix'te tam adı (FQN) nasıl alabilirim?


15

hostnameBirkaç sunucuda (RedHat, Ubuntu) test ettim ve hostname -fgüvenilmez, bazen sadece kısa adı ( bu soruda açıklandığı gibi) dönen kanıtladı .

Takma adlarda fqn'yi görebiliyorum: hostname -a(takma adlardan biri aradığım fqn), ancak takma adların sırası sabit değil.

Tam olarak nitelenmiş adı güvenilir bir şekilde almanın ve bir bash değişkeninde saklamanın başka bir yolu var mı?


Bazen CNAME, A kaydı değil, aradığınız şeyse, hangisinin "doğru" FQN olduğunu nasıl anlarsınız?
Nils

Yanıtlar:


11

Bunu CentOS5'te denedim:

host -TtA $SERVERNAME|grep "has address"|awk '{print $1}'

TCP Modunda DNS'imi sorgulamam gerekiyor. UDP ortamınızda çalışıyorsa "T" seçeneğini bırakın.


Not: Bir Ubuntu misafirinde (VirtualBox) çalışmaz:

git@aHostname:~/$ host -TtA $(hostname -s)
Host aHostname not found: 3(NXDOMAIN)

Yani tüm vakaları kapsamak için:

fqn=$(host -TtA $(hostname -s)|grep "has address"|awk '{print $1}') ; \
if [[ "${fqn}" == "" ]] ; then fqn=$(hostname -s) ; fi ; \
echo "${fqn}"

1
Ben var host -TtA $(hostname -s)|grep "has address"|awk '{print $1}'benim redhat sunucularında çalışan
VonC

Bu, IP başına bir satır vermesine rağmen mac osx 10.11.6'da çalışır, ancak osx 10.12.1'de çalışmaz. Makinemin kurulumu nedeniyle veya doğal olarak v12'de başarısız olup olmadığından emin değilim.
AnneTheAgile

Güncelleme; AD LDAP kullanan mac için en kolay yol ayrıştırmaktır: dsconfigad -show
AnneTheAgile

5

İşte fqn buldum bir yolu:

fqn=$(nslookup $(hostname -i)) ; fqn=${fqn##*name = } ; fqn=${fqn%.*} ; echo $fqn

Başka bir deyişle, bana nslookupIP gibi bir şey verdim :

Server:         128.xxx.yyy.zzz
Address:        128.xxx.yyy.zzz#ww

aa.bb.cc.dd.in-addr.arpa        name = myserver.fully.qualified.name.

Oradan, sadece bash string manipülasyonları ile istemediğimi kaldırmak bir soruydu .

Belki daha basit bir yol var?


5

Yönteminiz yalnızca ana makine adınızı doğru şekilde yapılandırdıysanız ve doğru dns ayarlarına vb. Sahipse çalışır. Tüm bunlara sahipseniz, fqdn'nizi zaten biliyorsunuzdur.

Fqdn almanın güvenilir bir yolu yoktur. Tek bir IP adresi birden fazla fqdn içerebilir ve tek bir fqdn birkaç IP adresi içerebilir ... ve birçok IP'nin hiç fqdn'si yoktur.

Makineniz doğrudan internete bağlıysa, sadece IP adresini kullanın ve ters DNS isteği yapın: host 1.2.3.4
Ancak bu genellikle size istenen cevabı vermiyor (sadece google ile deneyin).


Doğru, ancak bağlamımda (dünya çapında kuruluş), tüm sunucularım bir fqn'ye ve doğru dns ayarlarına sahip. İhtiyacım olan sunucular sadece bir fqdn olmalıdır.
VonC

Bu yüzden hostsadece A kaydını almak için cevabı ayrıştırın (veya uygun bir arama yapın).
Nils

@Nils: Bu iyi bir öneri gibi görünüyor. Bir cevap verebilir misiniz, benim için oylamayı kabul edip (testten sonra) kabul eder misiniz?
VonC

5

hostname --fqdnSenin için çalışmıyor mu ?


Hayır, soruda açıkça belirtildiği gibi. Sunucularda FQDN bilgilerini almak zorundayım hostname --fqdn, kısa adı döndürür ve fqdn ana bilgisayar adı diğer adlarından biri olarak tanımlanır.
VonC

Ah doğru, fark etmedim -fve --fqdnaynı şeyim.
ThatGraemeGuy


2

Platformlar arası alternatif için, python kullanmayı düşünmezseniz (en azından python 2.7 ve python 3'te çalışır)

python -c 'import socket; print(socket.getfqdn())'

-1

Bir OS X güvenli bash olasılıkla tek yöntem, olmayacak nedeniyle komut çıktısında varyasyonlara diğer * Nix tatlar çalışır:

fqn=$(nslookup $(hostname) | sed -n s/Name:.//p);

Python, geniş uyumluluk için muhtemelen en iyi bahistir.

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.