Hostnamectl komutunun anlamı nedir?


17

/ Etc / hostname (veya etc / hostname) komutunun aksine, ya da nerede alakalı?

İyi bir sebep olmalı (umarım) - genel olarak her şeyin bir metin dosyası olduğu "eski" yolu tercih ederim. Çekişmeli olmaya çalışmıyorum - gerçekten bilmek istiyorum ve bunun iyi bir neden olup olmadığına kendim karar vermek istiyorum. Teşekkürler.


2
Kesinlikle yalnız değilsiniz --- Systemd birçok yeni arayüz tanıttı ve bu nedenle "her şeyin bir metin dosyası olduğu eski yolu" tercih eden insanlardan çok fazla plak aldı.
Federico Poloni

1
@FedericoPoloni Ya da DNS sorguları nedensiz XML'e dönüştürülür gibi her şeyin bir metin dosyası olmadığı yerlerde.
chrylis -on strike-

DNS-> xml. Üzgünüz, bir örnek bulmanız gerekecek, lütfen. IMO XML şeytan olan BTW'nin icadıdır.
Graham Nicholls

Yanıtlar:


22

Arka fon

hostnamectl systemd'nin bir parçasıdır ve bir sunucunun ana bilgisayar adlarını standart bir şekilde ayarlamak için uygun bir API sağlar.

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

Daha önce systemd kullanmayan her dağıtımın, bunu yapmak için çok fazla karmaşıklık gerektiren kendi yöntemleri vardı.

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 ayrıca birçok farklı veriyi önyüklemek için tek bir konuma bir araya getirir:

$ 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

Burada bilgi geliyor /etc/*release, uname -asunucunun hostname dahil vb.

Dosyalar ne olacak?

Bu arada, her şey hala dosyalarda, hostnamectlsadece bu dosyalarla nasıl etkileşimde bulunacağımızı veya her konumlarını nasıl bileceğimizi basitleştiriyor.

Bunun kanıtı olarak, strace -s 2000 hostnamectlhangi dosyaları çektiğini görebilir ve görebilirsiniz:

$ 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?

Zeki gözlemciye göre, yukarıda stracetüm dosyaların mevcut olmadığını fark etmelisiniz . hostnamectlaslında systemd-hostnamectl.service, çoğu yöneticinin aşina olduğu dosyaların çoğuyla "etkileşimde bulunma" gibi bir hizmetle etkileşim halindedir /etc/hostname.

Bu nedenle, çalıştırdığınızda hostnamectlhizmetten ayrıntılar alırsınız. Bu bir ondemand hizmetidir, bu nedenle sürekli çalışıp çalışmadığını göremezsiniz. Sadece çalışırken hostnamectl. Bir watchkomut çalıştırır ve sonra hostnamectlbirden çok kez çalıştırmaya başlarsanız bunu görebilirsiniz :

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

Bunun kaynağı burada: https://github.com/systemd/systemd/blob/master/src/hostname/hostnamed.c ve eğer bakarsanız, /etc/hostnamevb . Referansları göreceksiniz .

Referanslar


Doğrudan dosya okuma örnekleri için unix.stackexchange.com/a/454785/5132 adresine bakın .
JdeBP

Çıktıyı kullanmak yerine grep etmenin bir nedeni var mı -e open,openat?
ydaetskcoR

@ydaetskcoR - Teknik bir neden yok, tembel ve strace8-) geçişleri bakmadı . Dürüst olmak gerekirse, yine grepde çıktıyı göstermek istediğim şekilde almam gerekiyordu, b / c stracehala hostnamectlcmd'nin çıktısını göstermişti , bu yüzden yolum daha kısaydı.
slm

"... bir sunucunun ana bilgisayar adlarını standart bir şekilde ayarlamak için uygun bir API sağlar." Başka bir deyişle, bir standart daha eklediler. :-) Ayrıca, başlangıcından bu yana, projeden en az yarım düzine çatal olduğunu ve bu da muhtemelen yarım düzine daha fazla "standart" anlamına geldiğini not edebilir.
UncaAlby

Size sadece bu kullanışlı deyim için +1 veriyorum rpm -qf $(type -P hostnamectl), bunu hatırlamam lazım!
Mark Borgerding

1

Hala bir metin dosyası, yine de düzenleyebilirsiniz ve bir sorun olmayacak.

Metin dosyası olarak standartlaştırılmıştır /etc/hostname.


Bakımcıya göre, systemd-hostname, systemd-timedated vb. Hizmetler GNOME gibi mevcut GUI (ler) için çok tasarlanmıştır. systemd-hostnamed, bir GUI'nin ana bilgisayar adının kök olarak çalışmadan değişmesine izin verir (polkit politikasına bağlı olarak). Dbus ayrıca GUI ihtiyaçlarına uygun değişiklikleri abone etmek için bir yöntem sağlar. Belki bu durumlarda toplam bir uygulama tarafından kullanılır :). Bilmiyorum, belki saatler saat dilimi yeniden yapılandırmasını dinlemek için systemd-timedated kullanır?

Hostnamectl'i, yararlı bir CLI yardımcı programı da olabilir veya olmayabilir GUI arka ucunu kullanmak için bir saplama olarak düşünün. systemd-hostnamed özellikle GUI kodu tarafından kullanılmayan tüm özellikleri eklemek için tasarlanmamıştır.


Systemd-hostnamed hizmeti dağıtımlar arasındaki farkları soyutlamaya yönelik değildir . Akış yukarı sistemd /etc/hostname, örneğin Debian ve Redhat tabanlı dağıtımlarda daha önce farklı yapılandırma dosyalarının bulunduğu tek bir yapılandırma dosyasında standartlaştırılmıştır .

Bu, hostnamectl'in systemd-hostnamed'in standart uygulamasıyla konuştuğunu varsayar. Ancak AFAIK, kullanılan dosya adını yatıran geçerli bir dağıtım yoktur.

/etc/hostnameÖnyükleme zamanında yüklemenin sistemd PID 1 tarafından erken gerçekleştirildiğini belirtmek istiyorum . Systemd-hostnamed'i çalıştırmaya bağlı değildir.


Hayal olabilir bir sistem ayarları GUI açık ve aynı zamanda makine adını gösteren varsa, bir zararsız fark. Düzenlerseniz /etc/hostnameve kullanırsanızhostname --file /etc/hostnameDeğişikliği çalışan sisteme uygulamak için , GUI ekranı anında güncellenmeyebilir. systemd-hostnamed, barındırdığı tüm ana bilgisayar ad sürümlerinde yapılan değişiklikler hakkında dbus bildirimleri sağlar, bu nedenle GUI modern Linux çekirdeklerinde sağlanan sistem ana bilgisayar adı bildirimlerini dinlemek için uğraşmayabilir.

(Geleneksel olarak, ana makine adını çalışma zamanında değiştirmek kötü bir fikirdir. X gibi yazılımlarda sorunlara neden olabilir . Bu sorunun systemd tarafından ele alınmadığından eminim . Belki de systemd kullanan dağıtımlar tarafından giderildi) .

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.