होस्टनामेक्टेल कमांड का क्या मतलब है?


17

संपादन / आदि / होस्टनाम के विपरीत, या जहाँ भी प्रासंगिक है?

एक अच्छा कारण होना चाहिए (मुझे उम्मीद है) - सामान्य तौर पर मैं "पुराने" तरीके को पसंद करता हूं, जहां सब कुछ एक पाठ फ़ाइल थी। मैं विवादास्पद होने की कोशिश नहीं कर रहा हूं - मैं वास्तव में जानना चाहता हूं, और अगर यह एक अच्छा कारण है तो खुद के लिए फैसला करना है। धन्यवाद।


2
आप निश्चित रूप से अकेले नहीं हैं --- सिस्टमड ने बहुत सारे नए इंटरफेस पेश किए और इस वजह से इसे "पुराने तरीके से सब कुछ एक पाठ फ़ाइल" पसंद करने वाले लोगों से बहुत अधिक मिला।
फेडेरिको पोलोनी

1
@FedericoPoloni या जहाँ सब कुछ एक पाठ फ़ाइल नहीं थी, जैसे DNS प्रश्नों को बिना किसी कारण के XML में परिवर्तित किया जा रहा है।
चिरलीस-स्ट्राइक-

डीएनएस-> एक्सएमएल। क्षमा करें, आप एक उदाहरण के साथ आने वाले हैं, कृपया। IMO XML शैतानी, BTW का आविष्कार है।
ग्राहम निकोल्स

जवाबों:


22

पृष्ठभूमि

hostnamectl सिस्टमड का हिस्सा है, और एक मानकीकृत तरीके से सर्वर के होस्टनाम सेट करने से निपटने के लिए एक उचित एपीआई प्रदान करता है।

$ rpm -qf $(type -P hostnamectl)
systemd-219-57.el7.x86_64

पहले प्रत्येक डिस्ट्रो जो सिस्टमड का उपयोग नहीं करता था, उसके पास ऐसा करने के लिए अपने तरीके थे जो बहुत सारी अनावश्यक जटिलता के लिए बने थे।

DESCRIPTION
  hostnamectl may be used to query and change the system hostname and
  related settings.

  This tool distinguishes three different hostnames: the high-level 
  "pretty" hostname which might include all kinds of special characters 
  (e.g. "Lennart's Laptop"), the static hostname which is used to
  initialize the kernel hostname at boot (e.g. "lennarts-laptop"), and the 
  transient hostname which is a default received from network 
  configuration. If a static hostname is set, and is valid (something
   other than localhost), then the transient hostname is not used.

   Note that the pretty hostname has little restrictions on the characters 
   used, while the static and transient hostnames are limited to the 
   usually accepted characters of Internet domain names.

   The static hostname is stored in /etc/hostname, see hostname(5) for 
   more information. The pretty hostname, chassis type, and icon name are 
   stored in /etc/machine-info, see machine-info(5).

   Use systemd-firstboot(1) to initialize the system host name for mounted 
   (but not booted) system images.

hostnamectl बूट करने के लिए एक ही स्थान पर एक साथ कई असमान डेटा भी खींचता है:

$ hostnamectl
   Static hostname: centos7
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 1ec1e304541e429e8876ba9b8942a14a
           Boot ID: 37c39a452464482da8d261f0ee46dfa5
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-693.21.1.el7.x86_64
      Architecture: x86-64

यहाँ से जानकारी आ रही है /etc/*release,uname -a सर्वर का होस्टनाम सहित, आदि।

फाइलों के बारे में क्या?

संयोग से, सब कुछ अभी भी फाइलों में है, hostnamectlकेवल यह सरल कर रहा है कि हमें इन फ़ाइलों के साथ कैसे बातचीत करनी है या उनका हर स्थान जानना है।

इसके प्रमाण के रूप में आप उपयोग कर सकते हैं strace -s 2000 hostnamectl और देख हैं कि यह किन फाइलों से खींच रहा है:

$ strace -s 2000 hostnamectl |& grep ^open | tail -5
open("/lib64/libattr.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/proc/self/stat", O_RDONLY|O_CLOEXEC) = 3
open("/etc/machine-id", O_RDONLY|O_NOCTTY|O_CLOEXEC) = 4
open("/proc/sys/kernel/random/boot_id", O_RDONLY|O_NOCTTY|O_CLOEXEC) = 4

systemd-hostname.service?

पर्यवेक्षक को देखने के लिए, आपको उपरोक्त में ध्यान देना चाहिए straceकि सभी फाइलें मौजूद नहीं हैं।hostnamectlवास्तव में एक सेवा के साथ बातचीत कर रहा है, systemd-hostnamectl.serviceजो वास्तव में अधिकांश फ़ाइलों के साथ "इंटरेक्टिंग" करता है , जो कि ज्यादातर एडमींस से परिचित होंगे, जैसे कि /etc/hostname

इसलिए जब आप चलाते हैं hostnamectlतो आपको सेवा से विवरण प्राप्त होता है। यह एक ondemand सेवा है, इसलिए आप यह नहीं देखेंगे कि क्या हर समय चल रहा है। केवल जब hostnamectlदौड़ता है। आप इसे देख सकते हैं यदि आप एक watchकमांड चलाते हैं , और फिर चलना शुरू करते हैंhostnamectl कई बार करते हैं:

$ watch "ps -eaf|grep [h]ostname"
root      3162     1  0 10:35 ?        00:00:00 /usr/lib/systemd/systemd-hostnamed

इसके लिए स्रोत यहाँ है: https://github.com/systemd/systemd/blob/master/src/hostname/hostame.c और यदि आप इसे देखते हैं, तो आप संदर्भ देखेंगे/etc/hostname आदि ।

संदर्भ


फ़ाइल को पढ़ने के एक उदाहरण के लिए unix.stackexchange.com/a/454785/5132 देखें ।
JdeBP

उपयोग के बजाय आउटपुट को grep करने का कोई कारण है -e open,openat?
ydaetskcoR 8

@ydaetskcoR - कोई तकनीकी कारण नहीं, आलसी हो रहा था और 8-8 तक स्विच नहीं दिखता था strace। हालांकि ईमानदार होने के लिए मुझे अभी भी grepआउटपुट की आवश्यकता होगी जिस तरह से मैं इसे दिखाना चाहता था, b / c ने straceअभी भी hostnamectlcmd का आउटपुट दिखाया होगा , इसलिए मेरा रास्ता छोटा था।
slm

"... सर्वर के होस्टनाम को मानकीकृत तरीके से सेट करने से निपटने के लिए एक उचित एपीआई प्रदान करता है।" दूसरे शब्दों में, उन्होंने एक और मानक जोड़ा। :-) एक यह भी ध्यान दे सकता है कि अपनी स्थापना के बाद से, परियोजना से कम से कम आधा दर्जन कांटे हैं, जिसका अर्थ है शायद आधा दर्जन अतिरिक्त "मानक"।
UnAAlby

मैं तुम्हें सिर्फ एक है कि आसान मुहावरे के लिए एक +1 दे रहा हूँ जो rpm -qf $(type -P hostnamectl)मुझे याद है!
मार्क बोरगेरिंग

1

यह अभी भी एक पाठ फ़ाइल है, आप अभी भी इसे संपादित कर सकते हैं, और कोई समस्या नहीं होगी।

पाठ फ़ाइल को मानकीकृत किया गया है /etc/hostname


अनुरक्षक के अनुसार, सेवा सिस्टम-होस्टनाम, सिस्टमड-टाइमडेटेड आदि जीएनओएम जैसे मौजूदा जीयूआई के लिए बहुत डिज़ाइन किए गए थे। सिस्टमड-होस्टनाम एक GUI को होस्टनाम बदलने की अनुमति देता है बिना रूट के चल रहा है (पोलकिट नीति के आधार पर)। डबस परिवर्तनों को सदस्यता देने के लिए एक विधि भी प्रदान करता है, जो GUI आवश्यकताओं के अनुकूल है। शायद इन मामलों में कुल एक ऐप द्वारा उपयोग किया जाता है :)। मुझे पता नहीं, शायद घड़ियों ने समय-समय पर पुन: संयोजन के लिए सुनने के लिए सिस्टमड-टाइमेड का उपयोग किया है?

GUI बैकेंड व्यायाम करने के लिए एक स्टब के रूप में hostnamectl के बारे में सोचें, जो एक उपयोगी सीएलआई उपयोगिता भी हो सकती है या नहीं भी हो सकती है। सिस्टम-होस्टनाम विशेष रूप से संपूर्ण विशेषताओं को जोड़ने के लिए नहीं है जो GUI कोड द्वारा अभ्यास नहीं किए जाते हैं।


सिस्टमड-होस्टनाम सेवा का उद्देश्य वितरण के बीच अंतर पर अमूर्त करना नहीं है । अपस्ट्रीम सिस्टमडैक एक एकल विन्यास फाइल पर मानकीकृत है /etc/hostname, जहां पहले डेबियन बनाम रेडहैट आधारित वितरण पर अलग-अलग विन्यास फाइलें थीं।

यह मानता है कि hostnamectl systemd-hostame के मानक कार्यान्वयन के लिए बात कर रहा है। लेकिन AFAIK का कोई मौजूदा वितरण नहीं है जो उपयोग किए गए फ़ाइलनाम को पैच करता है।

मैं /etc/hostnameयह बताना चाहता हूं कि बूट समय पर लोडिंग को सिस्टमड पीआईडी ​​1 द्वारा जल्दी किया जाता है। यह सिस्टमड-होस्टनाम चलाने पर निर्भर नहीं करता है।


मुझे लगता है कि आप एक हानिरहित अंतर देख सकते हैं , यदि आपके पास एक ही समय में सिस्टम सेटिंग्स GUI खुला और होस्टनाम दिखा रहा है। यदि आप संपादित करते हैं /etc/hostnameऔर फिर उपयोग करते हैंhostname --file /etc/hostname रनिंग सिस्टम में परिवर्तन लागू करने के लिए करते हैं, तो GUI डिस्प्ले तुरंत अपडेट नहीं हो सकता है। systemd-hostame होस्टनाम के सभी संस्करणों में परिवर्तन पर dbus सूचनाएं प्रदान करता है, इसलिए GUI आधुनिक Linux kernels पर उपलब्ध कराई गई सिस्टम hostname सूचनाओं को सुनने के लिए परेशान नहीं कर सकता है।

(परंपरागत रूप से, रनटाइम चीज़ पर होस्टनाम को बदलना एक बुरा विचार है। यह सॉफ्टवेयर जैसे एक्स के साथ समस्या पैदा कर सकता है । मुझे विश्वास है कि यह समस्या सिस्टमड द्वारा संबोधित नहीं है । शायद इसे डिस्ट्रीब्यूशन का उपयोग करने वाले वितरणों द्वारा संबोधित किया गया है। ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.