Berbeda dengan mengedit / etc / hostname, atau di mana pun relevan?
Pasti ada alasan yang bagus (saya harap) - secara umum saya lebih suka cara "lama", di mana semuanya adalah file teks. Saya tidak berusaha untuk bertengkar - saya benar-benar ingin tahu, dan memutuskan sendiri apakah itu alasan yang bagus. Terima kasih.
Jawaban:
Latar Belakang
hostnamectl
adalah bagian dari systemd, dan menyediakan API yang tepat untuk berurusan dengan pengaturan nama host server dengan cara standar.Sebelumnya setiap distro yang tidak menggunakan systemd, memiliki metode sendiri untuk melakukan ini yang dibuat untuk banyak kompleksitas yang tidak perlu.
hostnamectl
juga menarik banyak data yang berbeda menjadi satu lokasi untuk di-boot:Info di sini berasal
/etc/*release
,uname -a
, dll termasuk nama host dari server.Bagaimana dengan file?
Kebetulan, semuanya masih dalam file,
hostnamectl
hanya menyederhanakan bagaimana kita harus berinteraksi dengan file-file ini atau mengetahui setiap lokasi mereka.Sebagai buktinya, Anda dapat menggunakan
strace -s 2000 hostnamectl
dan melihat dari mana file itu diambil:systemd-hostname.service?
Untuk pengamat yang lihai, Anda harus memperhatikan di atas
strace
bahwa tidak semua file ada.hostnamectl
sebenarnya berinteraksi dengan layanan,systemd-hostnamectl.service
yang sebenarnya melakukan "berinteraksi" dengan sebagian besar file yang paling akrab dengan admin, seperti/etc/hostname
.Karena itu ketika Anda menjalankan
hostnamectl
Anda mendapatkan detail dari layanan. Ini adalah layanan ondemand, jadi Anda tidak akan melihat apakah berjalan sepanjang waktu. Hanya saathostnamectl
dijalankan. Anda dapat melihatnya jika Anda menjalankanwatch
perintah, dan kemudian mulai menjalankanhostnamectl
beberapa kali:Sumbernya ada di sini: https://github.com/systemd/systemd/blob/master/src/hostname/hostnamed.c dan jika Anda melihatnya, Anda akan melihat referensi ke
/etc/hostname
dll.Referensi
sumber
-e open,openat
?strace
8-). Semua jujur saja saya masih akan membutuhkangrep
untuk mendapatkan output dengan cara saya ingin menunjukkannya, b / cstrace
masih akan menunjukkan output darihostnamectl
cmd, jadi cara saya lebih pendek.rpm -qf $(type -P hostnamectl)
saya ingat satu itu!Ini masih berupa file teks, Anda masih bisa mengeditnya, dan tidak akan ada masalah.
File teks telah distandarisasi ke
/etc/hostname
.Menurut pengelola, layanan systemd-hostname, systemd-timedated dll sangat dirancang untuk GUI yang ada seperti GNOME. systemd-hostnamed memungkinkan GUI meminta perubahan nama host tanpa menjalankan sebagai root (tergantung pada kebijakan polkit). Dbus juga menyediakan metode untuk berlangganan perubahan, yang disesuaikan dengan kebutuhan GUI. Mungkin digunakan oleh total satu aplikasi dalam kasus ini :). Saya tidak tahu, mungkin jam menggunakan systemd-timedated untuk mendengarkan konfigurasi ulang zona waktu?
Anggap hostnamectl sebagai sebuah rintisan untuk menjalankan backend GUI, yang mungkin atau mungkin juga bukan utilitas CLI yang berguna. systemd-hostnamed secara khusus tidak dimaksudkan untuk menambahkan seluruh fitur yang tidak dijalankan oleh kode GUI.
Layanan systemd-hostnamed tidak dimaksudkan untuk abstrak atas perbedaan antara distribusi. Sistem hulud distandarisasi pada file konfigurasi tunggal,
/etc/hostname
,, di mana sebelumnya ada file konfigurasi yang berbeda pada misalnya distribusi berbasis Debian vs Redhat.Ini mengasumsikan hostnamectl sedang berbicara dengan implementasi standar dari systemd-hostnamed. Tapi AFAIK tidak ada distribusi saat ini yang menambal nama file yang digunakan.
Saya ingin menunjukkan bahwa memuat
/etc/hostname
pada saat boot dilakukan sejak dini oleh systemd PID 1. Tidak tergantung pada menjalankan systemd-hostnamed.Saya membayangkan Anda mungkin melihat satu perbedaan yang tidak berbahaya, jika Anda memiliki pengaturan sistem GUI terbuka dan menunjukkan nama host pada saat yang sama. Jika Anda mengedit
/etc/hostname
dan kemudian gunakanhostname --file /etc/hostname
untuk menerapkan perubahan pada sistem yang sedang berjalan, tampilan GUI mungkin tidak secara instan diperbarui. systemd-hostnamed menyediakan notifikasi dbus tentang perubahan semua versi hostname yang dipertahankannya, sehingga GUI mungkin tidak mau repot-repot mendengarkan notifikasi hostname sistem yang disediakan pada kernel Linux modern.(Secara tradisional, itu adalah ide yang buruk untuk melakukan perubahan nama host pada saat runtime. Hal itu dapat menyebabkan masalah dengan perangkat lunak seperti X. Saya yakin masalah ini tidak ditangani oleh systemd . Mungkin itu telah diatasi oleh distribusi yang menggunakan systemd) .
sumber