Ini cukup membingungkan. Adakah yang tahu di mana hostname
perintah menyimpan dan membaca nama host?
Saya pikir itu adalah / etc / hostname tetapi tidak ada file pada sistem Linux yang saya gunakan. Saya mencoba menggunakan strace untuk menemukan di mana ia berada tetapi tidak ada panggilan baca yang mengembalikan informasi ini:
$ strace hostname 2>&1 | grep read
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340^\0\0\0\0\0\0"..., 832) = 832
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\30\2\0\0\0\0\0"..., 832) = 832
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\16\0\0\0\0\0\0"..., 832) = 832
read(3, "nodev\tsysfs\nnodev\trootfs\nnodev\tr"..., 1024) = 248
read(3, "", 1024) = 0
Lalu saya perhatikan itu syscall tidak sama yang mengembalikan informasi ini:
uname({sys="Linux", node="server-name", ...}) = 0
Grep rekursif di / etc / menghasilkan apa-apa:
grep "server-name" -r /etc
Di mana uname menyimpan informasi ini? Hanya dalam ingatan?
Jawaban:
Lihatlah U&L terkait Q&A berjudul: Di mana uname mendapatkan informasinya? . Informasi seperti nama host tetap ada dalam struktur data dalam kernel Linux, saat sistem sedang berjalan. Selama boot sistem informasi ini dapat disambungkan kembali melalui berbagai mekanisme yang biasanya khusus distro.
Jika Anda melihat
man 2 uname
halaman manual ada struktur data yang disebutkan di sana:Elemen ke-2 dari struktur itu,
nodename[]
adalah satu tempat di mana nama host disimpan dalam kernel Linux./ proc
Jika Anda melihatnya
/proc/sys/kernel/hostname
, nama host juga akan ditampilkan di sini. Ini adalah lokasi virtual/proc
, tetapi ini memberi Anda metode alternatif untuk mengakses nama host. Domainname sistem juga ada di sini/proc/sys/kernel/domainname
,.CATATAN: Yang menarik, nilai-nilai ini adalah spesifik namespace UTS .
Contoh
Memanipulasi nama host
Pada sistem dengan Systemd Anda dapat menggunakan alat cli
hostnamectl
untuk mendapatkan / mengatur nama host. Ini akan mengubahnya secara permanen di antara reboot.Anda juga dapat mengetahui nilainya melalui
sysctl
:Untuk rilis Fedora, tanya & Jawab pada ask.fedoraproject.org ini mencakup topik dengan cukup seksama, berjudul: Mengatur nama host dengan benar - Fedora 20 di Amazon EC2 .
sumber
The
hostname
perintah tidak menyimpan nama mana saja tapi memori kernel.Bagaimana sistem menentukan namanya pada saat boot tergantung pada bagaimana sistem dikonfigurasi. Pilihan berkisar dari membaca nama dari file, hingga menggunakan DNS atau / etc / hosts untuk mengatur nama setelah antarmuka jaringan yang sesuai telah muncul.
sumber
/etc/hosts
(yang untuk pencarian DNS - sistem yang membaca nama hostnya dari oh begitu salah) ... tetapi mungkin/etc/hostname
(berisi nama yang sepenuhnya memenuhi syarat) atau jarang/etc/sysconfig/network
(mungkin berisiHOSTNAME=...
perintah shell). Pada contoh amazon EC2 Anda mungkin juga harus memodifikasi/etc/cloud/cloud.cfg
...hostname(1)
hanyalah sebuah front-end untuksethostname(3)
panggilan sistem, yang pada dasarnya menulis nama host ke tempat kernel mengharapkannya untuk disimpan.Jika Anda ingin perubahan menjadi permanen, sesuai filosofi Unix umum Anda harus menyimpannya sendiri. Namun lokasi tepatnya sangat tergantung pada sistem init Anda. Sebagai contoh, init OpenBSD membaca nama host dari
/etc/myname
(selamanetstart
).Semua ini harus dijelaskan di halaman manual sistem Anda atau dokumentasi pendukung.
sumber
Sebagai lama * nix sysadmin, saya akan menyatakan yang jelas, tanpa referensi RTFM langsung: :)
Ini berlaku untuk sebagian besar distro "linux".
--mem
sumber
Saat runtime disimpan dalam memori seperti yang sudah dijawab oleh yang lain di sini.
Untuk bertahan dari reboot harus disimpan di file di suatu tempat, yang khusus distribusi linux. Pada Fedora 20 saya, ini adalah / etc / hostname
Kemungkinan besar disimpan di / etc. Cobalah untuk mencari nama host yang sebenarnya di dll
sumber
hostnamectl
dll .: ask.fedoraproject.org/en/question/37413/…