Không giống như cách hostname
gọi lệnh đơn giản, lệnh gọi hostname --fqdn
sẽ cố gắng thực hiện một số điều nữa, điều này thường sẽ dẫn đến một số tra cứu DNS.
Lấy ví dụ như cách gọi (thành công) sau đây (đây là từ hộp Red Hat, nhưng tôi sẽ tưởng tượng nó sẽ giống với Ubuntu):
# hostname --fqdn --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
myserver.example.com
Lưu ý các --verbose
tùy chọn rất hữu ích .
Nói tóm lại, bất cứ điều gì khác hơn là đơn giản hostname
có thể làm được nhiều hơn bạn mong đợi. Đây là một ví dụ khác:
# hostname --ip --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
10.1.2.3
Và làm tròn nó ra:
# hostname --verbose
gethostname()=`myserver.example.com'
myserver.example.com
Lưu ý rằng tên máy chủ của một hệ thống (được trả về bởi gethostname) có thể cho tôi một tên máy chủ không đủ tiêu chuẩn, chẳng hạn như 'myserver'. Đây là lý do tại sao chương trình bạn muốn cài đặt sử dụng hostname --fqdn
thay thế.
Thông báo lỗi hostname: Name or service not known
xuất phát từ các chức năng của trình phân giải : đây là các phần của thư viện hệ thống dịch giữa tên và địa chỉ (thường là tên DNS và địa chỉ IP).
Trên thực tế, trình phân giải không chỉ làm DNS (và nhiều hơn là chỉ dịch giữa tên máy chủ và địa chỉ IP); hành vi của nó được cấu hình một phần bởi tệp /etc/nsswitch.conf
và thông thường nó sẽ tham khảo các mục sau, thường là theo thứ tự sau:
- 'máy chủ' (trên Linux, phương tiện / etc / hosts)
- (đôi khi) nscd (daemon bộ nhớ đệm dịch vụ tên)
- 'dns'
(lưu ý, bạn cũng có thể có một máy chủ DNS lưu trữ, chẳng hạn như dnsmasqd --- cho điểm ở trên, vẫn nằm trong cơ chế 'dns').
Điều đáng nói là các công cụ như đào , máy chủ và nslookup đáng kính không tuân theo thứ tự này; chúng rõ ràng là các công cụ truy vấn DNS. Điều này có nghĩa là nếu bạn dựa vào chúng (ví dụ trong tập lệnh), bạn có thể sẽ nhận được một kết quả khác với những chương trình máy khách thông thường (sử dụng trình phân giải hệ thống). Vì lý do này, hãy sử dụng chương trình getent trong các tập lệnh, đặc biệt nếu bạn có một thành phần bộ đệm như nscd đang chạy.
# getent hosts myserver.example.com
10.1.2.3 myserver.example.com
Vì vậy, điểm mấu chốt ở đây là a) nếu bạn có / etc / hosts được cấu hình tốt với một mục nhập cho máy của riêng bạn và b) /etc/nsswitch.conf của bạn có cấu hình thông thường - hosts: files dns
theo thứ tự đó, sau đó c) nếu bạn không có DNS được cấu hình tốt trong môi trường của mình, thì nó hostname --fqdn
sẽ hoạt động.
Trong một DNS được cấu hình tốt, bạn sẽ có một địa chỉ 'đảo ngược' ("bản ghi PTR") cung cấp tên 'chính tắc' cho máy chủ của bạn và tên đó cũng có thể được tìm kiếm (" Một bản ghi "cho IPv4).
Phiên bản ngắn: thêm --verbose
; nó sẽ chỉ cho bạn những gì bạn đang thiếu.
Hy vọng rằng sẽ giúp bạn hiểu những gì đang xảy ra.