`Hostname` lưu trữ tên máy chủ mà tôi đã đặt ở đâu?


15

Điều này khá khó hiểu. Có ai biết hostnamelệnh lưu trữ và đọc tên máy chủ từ đâu không?

Tôi nghĩ đó là / etc / hostname nhưng không có tệp nào trên hệ thống Linux này mà tôi đang sử dụng. Tôi đã thử sử dụng strace để tìm vị trí của nó nhưng không có cuộc gọi đọc nào trả về thông tin này:

$ 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

Sau đó, tôi nhận thấy nó đã phá hủy tòa nhà đã trả lại thông tin này:

uname({sys="Linux", node="server-name", ...}) = 0

Một grep đệ quy trong / etc / không trả về gì:

grep "server-name" -r /etc 

Trường hợp nào uname lưu trữ thông tin này? Chỉ trong ký ức?


1
bạn đang sử dụng bản phân phối linux nào?
amir jj

Câu trả lời:


9

Hãy xem câu hỏi và trả lời liên quan đến U & L này có tiêu đề: Uname lấy thông tin từ đâu? . Thông tin như tên máy chủ vẫn tồn tại trong cấu trúc dữ liệu trong nhân Linux, trong khi hệ thống đang chạy. Trong quá trình khởi động hệ thống, thông tin này có thể được lấy lại thông qua nhiều cơ chế thường là bản phân phối cụ thể.

Nếu bạn nhìn vào man 2 unametrang man, có một cấu trúc dữ liệu được đề cập ở đó:

           struct utsname {
               char sysname[];    /* Operating system name (e.g., "Linux") */
               char nodename[];   /* Name within "some implementation-defined
                                     network" */
               char release[];    /* Operating system release (e.g., "2.6.28") */
               char version[];    /* Operating system version */
               char machine[];    /* Hardware identifier */
           #ifdef _GNU_SOURCE
               char domainname[]; /* NIS or YP domain name */
           #endif
           };

Phần tử thứ 2 của cấu trúc đó, nodename[]là một nơi lưu trữ tên máy chủ trong nhân Linux.

/ Proc

Nếu bạn nhìn vào /proc/sys/kernel/hostname, tên máy chủ cũng được hiển thị ở đây. Đây là một vị trí ảo /proc, nhưng nó cung cấp cho bạn một phương thức thay thế để truy cập tên máy chủ. Tên miền của hệ thống cũng ở đây /proc/sys/kernel/domainname.

LƯU Ý: Quan tâm, các giá trị này là không gian tên UTS cụ thể .

Thí dụ

$ sudo hostname
oldhost
$ sudo unshare --uts /bin/bash
$ sudo echo newhost > /proc/sys/kernel/hostname 
$ hostname
newhost
$ exit
$ hostname
oldhost

Thao tác tên máy chủ

Trên hệ thống với Systemd, bạn có thể sử dụng công cụ cli hostnamectlđể nhận / đặt tên máy chủ. Điều này sẽ thay đổi nó vĩnh viễn giữa các lần khởi động lại.

$ sudo hostnamectl set-hostname --static somehostname

Bạn cũng có thể tìm ra giá trị của nó thông qua sysctl:

$ sudo sysctl -a | grep kernel.hostname
kernel.hostname = myhostname

Đối với các bản phát hành Fedora, câu hỏi và hỏi này của Ask.fedoraproject.org bao gồm chủ đề khá kỹ lưỡng, có tiêu đề: Đặt chính xác tên máy chủ - Fedora 20 trên Amazon EC2 .


1
Meh. hostnamectl chỉ đơn giản gọi một cuộc gọi hệ thống. Làm thế nào để tòa nhà lưu trữ thông tin sao cho nó bền bỉ trong suốt quá trình khởi động lại? Đó là câu hỏi của tôi, nếu không phải là OP.
Otheus

6

Các hostnamelệnh không lưu trữ bất cứ nơi nào tên nhưng bộ nhớ hạt nhân.

Làm thế nào hệ thống quyết định tên của nó là gì khi khởi động phụ thuộc vào cách hệ thống được cấu hình. Các tùy chọn bao gồm từ đọc tên từ một tệp, đến sử dụng DNS hoặc / etc / hosts để đặt tên sau khi giao diện mạng phù hợp được đưa lên.


2
Không bao giờ /etc/hosts(dành cho tra cứu DNS - một hệ thống đọc tên máy chủ của nó từ đó rất sai) ... nhưng có thể /etc/hostname(chứa tên đủ điều kiện) hoặc hiếm khi /etc/sysconfig/network(có thể chứa HOSTNAME=...lệnh shell). Trên một ví dụ EC2 của amazon, bạn cũng có thể phải sửa đổi /etc/cloud/cloud.cfg...
David Tonhofer

4

hostname(1)chỉ là một giao diện người dùng cho sethostname(3)cuộc gọi hệ thống, về cơ bản ghi tên máy chủ vào nơi mà hạt nhân dự kiến ​​sẽ được lưu trữ.

Nếu bạn muốn thay đổi là vĩnh viễn, theo triết lý chung của Unix, bạn phải tự lưu trữ nó. Tuy nhiên, vị trí chính xác phụ thuộc rất nhiều vào hệ thống init của bạn. Chẳng hạn, init của OpenBSD đọc tên máy chủ từ /etc/myname(trong netstart).

Tất cả điều này nên được mô tả trong các trang của hệ thống hoặc tài liệu hỗ trợ của bạn.


2

Trong một thời gian dài * nix sysadmin, tôi sẽ nêu rõ, không có tham chiếu RTFM trực tiếp: :)

   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 fallback value 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).

Điều này đúng với hầu hết các distro "linux".

--mem


1

Trong thời gian chạy, nó được lưu trữ trong bộ nhớ như đã được trả lời bởi những người khác ở đây.

Để tồn tại khi khởi động lại, nó phải được lưu trữ trên tệp ở đâu đó, đó là phân phối linux cụ thể. Trên Fedora 20 của tôi, nó / etc / hostname

Nó rất có thể được lưu trữ trong / etc. Cố gắng tìm kiếm tên máy chủ thực tế trong vv

grep -r `hostname` /etc

Đây ask.fedoraproject.org Q có tất cả các cách bạn có thể thiết lập / lấy hostname trên F20 sử dụng hostnamectlv.v .: ask.fedoraproject.org/en/question/37413/...
SLM
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.