Tôi đang chạy RHEL 5.7 và hostname
lệnh cho tôi tên máy chủ chính xác.
Nhưng hostname -s
và hostname -f
trở về : Unknown host
. Tại sao?
/etc/hostname
gì?
hostname -f
sử dụng DNS, bạn có mục DNS ngược cho IP của mình không?
Tôi đang chạy RHEL 5.7 và hostname
lệnh cho tôi tên máy chủ chính xác.
Nhưng hostname -s
và hostname -f
trở về : Unknown host
. Tại sao?
/etc/hostname
gì?
hostname -f
sử dụng DNS, bạn có mục DNS ngược cho IP của mình không?
Câu trả lời:
(được sao chép từ một trong những câu trả lời của tôi trên SF )
Các hostname
lệnh trả về kết quả từ DNS và /etc/hosts
.
hostname
tương đương uname -n
và là "tên máy chủ" hoặc "tên nút" thực sự của hộp.
Tất cả các hostname
đối số khác sử dụng tên nút này để tra cứu thông tin.
Vì vậy, trước khi đi xa hơn, tôi nên giải thích /etc/hosts
định dạng tập tin.
Trường đầu tiên khá rõ ràng, địa chỉ IP của nó là tất cả các tên máy chủ lưu trữ trên dòng nên giải quyết. Trường thứ hai là tên máy chủ chính cho IP đó. Các trường còn lại là bí danh.
Vì vậy, nếu bạn chạy hostname -f
nó trước tiên sẽ cố gắng giải quyết IP cho tên nút của bạn. Tùy thuộc vào cách bạn có hosts:
mục được cấu hình trong /etc/nsswitch.conf
phương pháp này sẽ khác nhau.
/etc/resolv.conf
cho đến khi nhận được IP từ DNS. /etc/hosts
một dòng trong đó tên máy chủ chính hoặc tên bí danh là tên nút hiện tại của bạn ( uname -n
), sau đó trả về địa chỉ IP trong dòng đó. Khi đã có IP rồi nó sẽ thử tra cứu ngược lại trên IP đó. Một lần nữa, nó sẽ sử dụng DNS cho việc này và tập tin máy chủ của bạn dựa trên nsswitch.conf
. Trong trường hợp sử dụng tệp máy chủ của bạn, nó sẽ trả về mục nhập chính (là trường đầu tiên sau IP trong tệp).
hostname -a
sẽ chỉ hoạt động với tệp máy chủ vì thực hiện tra cứu ngược trong DNS chỉ cung cấp cho bạn 1 kết quả. Với tệp máy chủ, nó trả về các giá trị trong dòng phù hợp (là tất cả mọi thứ sau mục nhập đầu tiên, tên máy chủ chính).
Vì vậy, trong ngắn hạn, lý do có thể cho vấn đề của bạn là bạn không có mục nào trong /etc/hosts
đó có tên máy chủ của bạn ( uname -n
).
Ví dụ
Nếu tên nút của bạn là 'foobar' và bạn có một mục /etc/hosts
như thế này:
127.0.0.1 foobar.example.com foobar localhost.localdomain localhost
Sau đó, bạn sẽ nhận được kết quả lệnh sau:
# hostname
foobar
# uname -n
foobar
# hostname -f
foobar.example.com
# hostname -a
foobar localhost.localdomain localhost