কীভাবে ব্যাশ স্ক্রিপ্টে ইউনিক্সে পুরোপুরি যোগ্যতাসম্পন্ন নাম (এফকিউএন) পাবেন?


15

আমি hostnameবেশ কয়েকটি সার্ভারে (রেডহ্যাট, উবুন্টু) পরীক্ষা করেছি এবং hostname -fঅবিশ্বাস্য প্রমাণিত হয়েছি, কেবলমাত্র ( এই প্রশ্নে বর্ণিত হিসাবে ) সংক্ষিপ্ত নামটি আবার ফিরে আসছি ।

এলিয়াসে আমি fqn দেখতে পাচ্ছি: hostname -a( এলিয়াসগুলির মধ্যে একটি হ'ল fqn আমি সন্ধান করি), তবে এলিয়াসগুলির ক্রম স্থির নয়।

সম্পূর্ণরূপে যোগ্যতাসম্পন্ন নামটি নির্ভরযোগ্যতার সাথে পাওয়ার এবং এটিকে ব্যাশ ভেরিয়েবলে সঞ্চয় করার অন্য কোনও উপায় আছে কি?


যদি কখনও কখনও সিএনএম হ'ল আপনি যা খুঁজছেন এবং এ-রেকর্ড নয়, আপনি কীভাবে জানবেন যে "ডান" এফকিউএন কী?
নিলস

উত্তর:


11

আমি CentOS5 এ চেষ্টা করেছি:

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

আমাকে টিসিপি-মোডে আমার ডিএনএস জিজ্ঞাসা করতে হবে। যদি ইউডিপি আপনার পরিবেশে কাজ করে তবে "টি" বিকল্পটি ছেড়ে দিন।


দ্রষ্টব্য: উবুন্টু অতিথির (ভার্চুয়ালবক্স) এটি কাজ করবে না:

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

সুতরাং সমস্ত মামলা কভার:

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

1
আমি host -TtA $(hostname -s)|grep "has address"|awk '{print $1}'আমার
রেডহাট

এটি ম্যাক ওএসএক্স 10.11.6 এ কাজ করে, যদিও আইপি প্রতি এক লাইন দেয় তবে ওএসএক্স 10.12.1 এ নয়। আমি নিশ্চিত না যে এটি আমার মেশিনের সেটআপের কারণে বা সহজাতভাবে v12 এ ব্যর্থ হয়েছে।
অ্যানি দ্য অ্যাজিল

হালনাগাদ; AD LDAP ব্যবহার করার জন্য ম্যাকের জন্য, সহজতম উপায়টি পার্স করা: dsconfigad
show

5

আমি এখানে একটি উপায় খুঁজে পেয়েছি fqn:

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

অন্য কথায়, আমার nslookupআইপি অ্যাড্রেসটি ছিল, যা আমাকে এরকম কিছু দেয়:

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

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

সেখান থেকে, এটি সরানোর কি আমি চাইনি মাধ্যমে শুধু একটি প্রশ্ন ছিল ব্যাশ স্ট্রিং হেরফেরের

খুব সহজ উপায় আছে?


5

আপনার পদ্ধতিটি কেবলমাত্র যদি আপনি আপনার হোস্টনামটি সঠিকভাবে কনফিগার করেছেন, এবং সঠিক ডিএনএস সেটিংস ইত্যাদি রয়েছে তখনই কাজ করে যদি আপনার সমস্ত কিছু থাকে তবে আপনি ইতিমধ্যে আপনার fqdn টি জানেন।

Fqdn পাওয়ার কোনও নির্ভরযোগ্য উপায় নেই। একটি আইপি ঠিকানায় বেশ কয়েকটি fqdn থাকতে পারে, এবং একটি একক fqdn এর বিভিন্ন আইপি ঠিকানা থাকতে পারে ... এবং প্রচুর আইপি-তে কোনও fqdn থাকে না।

যদি আপনার মেশিনটি সরাসরি ইন্টারনেটে সংযুক্ত থাকে তবে কেবলমাত্র আইপি ঠিকানাটি ব্যবহার করুন এবং একটি বিপরীত ডিএনএস অনুরোধ করুন: host 1.2.3.4
তবে এটি প্রায়শই আপনাকে পছন্দসই উত্তর দেয় না (উদাহরণস্বরূপ গুগল দিয়ে চেষ্টা করুন)।


সত্য, তবে আমার প্রসঙ্গে (ওয়ার্ল্ড-ওয়াইড এন্টারপ্রাইজ), আমার সমস্ত সার্ভারের একটি fqn রয়েছে এবং সঠিক ডিএনএস সেটিংস রয়েছে। আমার যে সার্ভারগুলির প্রয়োজন তা কেবল একটি ফিকডিএন থাকা উচিত।
ভোনসি

সুতরাং hostকেবলমাত্র এ-রেকর্ড পেতে (বা একটি বর্ণন অনুসারে তৈরি করুন) এর উত্তরটি পার্স করুন ।
নিলস

@ নীল: এটি একটি ভাল পরামর্শ বলে মনে হচ্ছে। আপনি কি আমাকে উত্তর দিতে এবং (পরীক্ষার পরে) গ্রহণ করার জন্য এটি একটি উত্তর দিতে পারেন?
ভোনসি

4

আপনার hostname --fqdnজন্য কাজ করে না ?


না, যেমন প্রশ্নে স্পষ্টভাবে বলা হয়েছে। সার্ভারগুলিতে আমাকে এফকিউডিএন তথ্য পেতে হয়, hostname --fqdnসংক্ষিপ্ত নামটি ফিচার করে, হোস্টনামের একটি নাম হিসাবে সংজ্ঞায়িত fqdn দিয়ে।
ভনসি

ওহ ঠিক আছে, আমি বুঝতে পারি না -fএবং --fqdnএকই জিনিস।
ThatGraemeGuy


2

ক্রস প্ল্যাটফর্ম বিকল্পের জন্য, অজগর ব্যবহার করতে আপনার আপত্তি না থাকলে (কমপক্ষে পাইথন ২.7 এবং পাইথন 3 এ চালায়)

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

-1

একটি ওএস এক্স নিরাপদ বাশ কেবলমাত্র পদ্ধতি, যা সম্ভবত কমান্ড আউটপুটে ভিন্নতার কারণে অন্যান্য * নিক্স স্বাদে কাজ করবে না :

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

পাইথন সম্ভবত প্রশস্ত সামঞ্জস্যের জন্য আপনার সেরা বাজি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.