天天看點

Linux作業系統主機名(hostname)簡說

原文出處:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2152436

1、 什麼是主機名;

無論在區域網路還是INTERNET上,每台主機都有一個IP位址,是為了區分此台主機和彼台主機,也就是說IP位址就是主機的門牌号。但IP位址不

友善記憶,是以又有了域名。域名隻是在公網(INtERNET)中存在(以實驗為目的的區域網路域網實驗性除外),每個域名都對應一個IP位址,但一個IP

位址可有對應多個域名。域名類型 linuxsir.org 這樣的;

主機名是用于什麼的呢?在一個區域網路中,每台機器都有一個主機名,用于主機與主機之間的便于區分,就可以為每台機器設定主機名,以便于以容易記憶的方法來互相通路。比如我們在區域網路中可以為根據每台機器的功用來為其命名。

主機名相關的配置檔案:/etc/hosts;

2. 主機名配置檔案;

主機名的配置檔案大多是/etc/hosts ;

hosts - The static table lookup for host name(主機名查詢靜态表);

由于 Linux 發行版本衆多,與主機名相關的配置檔案有時也有所不同。現在我們說說常見版本的主機名配置檔案;

2.1    主機名配置檔案 /etc/hosts解說;

Fedora/Redhat 或以Fedora/Redhat為基礎打包的發行版,主機名配置檔案是 /etc/hosts

Debian或以Debian為基礎打包的發行版,主機名配置檔案是 /etc/hostname 和/etc/hosts

Slackware的主機名配置檔案是 /etc/hosts 

那我們來讀讀 /etc/hosts的内容,看這個檔案是用來做什麼的。hosts 配置檔案是用來把主機名字映射到IP位址的方法,這種方法比較簡單。但這種映射隻是本地機的映射,也就是說每台機器都是獨立的,所有的計算機都不能互相通過hostname來通路。

注:在debian 中還有一個/etc/hostname的檔案,這個檔案就是直接把本地主機名寫進去就行了,但要和 /etc/hosts中的本地主機名保持一緻。

/etc/hosts 的内容一般有如下類似内容:

127.0.0.1               localhost.localdomain  localhost

192.168.1.195              debian.localdomain   debian

注:

一般情況下hosts的内容關于主機名(hostname)的定義,每行為一個主機,每行由三部份組成,每個部份由空格隔開。其中#号開頭的行做說明,不被系統解釋。

第一部份:網絡IP位址;

第二部份:主機名.域名,注意主機名和域名之間有個半角的點,比如  localhost.localdomain

第二部份:主機名(主機名别名) ,其實就是主機名;

當然每行也可以是兩部份,就是主機IP位址和主機名;比如  192.168.1.195  debian 

127.0.0.1 是回環位址,比如我們不想讓區域網路的其它機器看到我們測試的網絡程式,就可以用回環位址來測試。 

為什麼需要定義域名呢?其實了解也簡單,比如我們有三台主機,每台做不同的事,一台做MAIL伺服器,一台做FTP伺服器,一台做SMB伺服器,是以我們就可以這樣來設計hostname;

127.0.0.1               localhost.localdomain  localhost

192.168.1.2   ftp.localdomain  ftp

192.168.1.3                   mail.localdomain  mail

192.168.1.4                         smb.localdomin  smb

把這上面這個配置檔案的内容分别寫入每台機器的/etc/hosts内容中,這樣這三台區域網路的機器就可以通過hostname來通路了。

2.2     主機名(hostname)和域名(Domain)的差別;

主機名就機器本身的名字,域名是用來解析到IP的。但值得一說的是在區域網路中,主機名也是可以解析到IP上的;比如我們前面所說舉的例子;

2.3  區域網路的機器,不能通過主機名互訪的原因;

有的弟兄可能會說,我的hostname彼此不能互訪,其實這也問題也簡單,我們前面已經提到了一個簡單的解決辦法。就是要讓區域網路中的所有主機都有一個通用的,并且包含所有主機的/etc/hosts檔案;

另一個是做解決辦法是做區域網路DNS伺服器,如果您的主機特别少,就用前面所說的簡單方法就行;如何做DNS伺服器,我将在以後的文檔中專題介紹;

不過我值得一提的是做任何伺服器都是以效率優先的原則為基礎。比如我們在區域網路中兩台機器,我們還有必要做DNS伺服器嗎?無論怎麼解決,最終的都是用最

有效率的辦法解決問題;我們不能說明DNS多進階。如果DNS是為外網服務的,那就另說了,不做也得做。對不對?

3、主機名修改工具 hostname;

其實主機名的修改也有專用工具,就是hostname ;我認為如果用這個工具來修改主機名,不如直接修改 /etc/hosts 來的友善;您可以檢視 hosname --help或 man hostname的幫助 。在這裡我們隻說簡單的用法;

hostname 工具是用來顯示和設定系統主機名,看下面的洋文;

hostname - show or set the system’s host name

舉例解說:

* 顯示主機名:

[[email protected] ~]# hostname

linuxsir01

此主機的主機名是linuxsir01,不加參數是用來顯示目前操作的主機的主機名;

* 臨時設定主機名:

我們可以用 hostname 後接主機名,這樣就可以設定目前操作的主機的主機名,比如我們想把主機名設定為linuxsir02;

[[email protected] ~]# hostname linuxsir02

[[email protected] ~]# hostname  注:顯示主機名

linuxsir02

通過hostname 工具來設定主機名隻是臨時的,下次重新開機系統時,此主機名将不會存在;是以您想修改主機名,想一直有效的,還是用前面所說修改主機名配置檔案 /etc/hosts;

* 顯示主機IP:

顯示目前主機名的IP,可以用-i參數;

[[email protected] ~]# hostname -i

192.168.1.3

4、本文未盡事宜;

有時我們在登入桌面時,會提示找不到hostname ,這時您要做的是修改/etc/hosts,為您的機器添加一個主機名;先用 ifconfig -a 來檢視主機的IP位址,然後把你主機的IP位址,指定主機名;

5、關于本文;

好多天沒有寫文檔了,不是因為我沒有時間,而是測試了一些我沒有用過的硬體。想寫幾篇硬體文檔,但由于條件限制,硬體文檔沒寫出來,還把本來計劃好

的網絡基礎系統檔案給耽隔下來。這些天一直在想我這樣做是不是失誤了?事情已經過去,雖然努力未能成功,但并不能說我沒有努力,隻是結果沒有得到我所需要

的。看來做任何事都不是一帆風順的。隻要支援下來,就可能出要我們所想所要的。

今天又開始寫網絡文檔了,先寫一篇小一點的練練手,本來計劃了一篇比較大的網絡基礎文檔,一個自己的規劃就感覺無從下手,内容太多,大家也讀着累,

是以把大的文檔拆分成小的文檔,這樣寫起來不累,而且讀着更不累。如果想知道更詳細的,我會把這些小文檔再組合起來,這樣就能成為一個系列文檔了。

看來寫文檔規劃很重要,請大家給點建議或意見吧,謝謝;

本文是關于主機名的文檔,寫的有點簡單, 有些地方寫的太含乎,還請高手多多指點,謝謝;

—— 北南南北  at   LinuxSir.Org 

6、更新日志;

2006-07-02        v0.1b        正文初稿完成    ; 

7、參考文檔;

8、相關文檔;

By 北南南北 at 2006/07/02 - 12:53 | 

網絡基礎

Linux

基礎知識

參與評論

| 7220 閱讀

修改一下原文的錯誤吧,北南兄别見怪,呵呵

以我所用的ubuntu系統為例。

首先說一下hosts檔案,這個檔案每行分3個域:

            IP     主機名     别名

原文提到别名是主機名,實際是不對的,别名隻是為了友善使用,對它的修改是不會影響到之際名的。真正影響主機名的是hostname(在Debian系統是這樣的)。這裡特别提醒大家注意的是,如果在hostname中修改了主機名,一定要在hosts裡加入這樣的行:

           127.0.0.1      localhost     你修改的主機名

或者這樣

           127.0.0.1      你修改的主機名

因為在linux裡很多指令都會用到gethostbyname()這個函數,如果你改了主機名而又沒有在hosts裡更新,那麼這個指令是無法執行的。

ps:在FC系統中,配置檔案與Debian不一樣,它的hostname設定是在/etc/sysconfig/network裡

By Anonymous at 周一, 2006/08/21 - 21:07 | 

回複

謝謝

兄弟客氣了。哈哈。我寫網絡的時候,本來就是讓大家批着看的。

兄弟如果有時間最好能修訂一下全文,先謝謝 。。。

修改完成後,請發到我的信箱。

北南 呈上

By Anonymous at 周三, 2006/08/23 - 10:05 | 

回複

修改主機名三部曲

1. 變更目前主機名

    兩種方法: echo new-hostname > /proc/sys/kernel/hostname

    或者: hostname new-hostname

2. 修改配置檔案,使得下次重新開機的時候,使用新的主機名

    編輯檔案: /etc/sysconfig/network

    修改: HOSTNAME=new-hostname.domainname

3. 配置本機的域名解析檔案,使得本機的應用程式能夠解析新的主機名

    編輯檔案: /etc/hosts

    修改: xxx.xxx.xxx.xxx new-hostname.domainname new-hostname

    (這裡的xxx代表本機的網絡位址,也可以是環回位址127.0.0.1)

By ahumdk at 周五, 2006/08/11 - 11:49 | 

回複

錯了

在host

裡面改是不行了,那個檔案隻是用來做dns解析用的,系統啟動的時候不會讀取裡面的東西,要在/etc/sysconfig/network裡面設定.下

面的有反映說啟動不了了,其實等等就啟動了,隻是裡面一個服務遇到了問題,postfix遇到問題了,說找不到localhost了.在host改後啟動

後系統的名字是沒有便的,隻有在上面的那個路徑下面檔案該後才會正确顯示,在windows底下ping

自己的名字是能ping通的,而linux底下不知道為什麼不行,是以還要在host底下加一條新的名字解析.

By Anonymous at 周日, 2006/08/06 - 23:48 | 

回複

個人覺得/etc/hosts并不是設定主機名的

我個人覺得/etc/hosts并不是設定主機名的,而是相當于DNS的作用的,這個東西和主機名應該是不同的

主機名是用來标志某一台主機的,但是未必是給别人機器使用的,而是給這台機器自身用的,比如在登入的時候的提示,在Shell的提示符上,都可以顯示出來,這樣的話,使用者可以知道自己用的是哪台機器。而這台機器也未必需要在網絡上

而/etc/hosts卻是設定IP和對應的名稱的關系,這種關系甚至是随意的,比如主機名可以叫A(如果設定好了的話,登入和Shell的提示符

上會顯示),但是在/etc/hosts中我可以給它設定對應于C,或者www.sohu.com,在我的機器上,就可以用C,或者是

www.sohu.com這樣的名稱來通路它,甚至兩個同時設定,但是主機名仍然應該是一個

可以這樣考慮:

我是在B主機上,并且在B主機上的/etc/hosts中設定C對應A主機的IP,在A機上開了sshd,那麼我可以在B上用類似ssh

C這樣的指令來通路A機,但是在A的登入的提示上出現的應該還是A login:這樣的提示,而不是C

login,在Shell的提示符中顯示的,應該是[[email protected]

~]$這樣的提示(如果設定的是顯示主機名的話),我覺得主機名的作用應該是在這個地方,确定所登入的機器,免得誤操作或者用錯使用者名登入(也許使用者在

兩台不同的機器上擁有兩個不同的賬号)

還有另一個方法可以說明這個問題,比如你的/etc/hosts裡面設定的是A對應A的IP,那麼用hostname修改了主機名,比如叫

test,之後再ping的時候,ping test是不起作用的,還是隻能ping

A,這說明ping的地方用的名稱或者其它網絡通路時用的名稱(也就是由/etc/hosts設定的名稱)和主機名是不同的

是以我覺得,主機名和/etc/hosts沒什麼關系,隻不過如果/etc/hosts中的IP和主機名不對應的話,就不能用主機名來通路這台主機了,但是自己的機器的網絡操作并不是很多,是以也沒什麼大關系

是以手工設定主機名,應該改的是另外的一個配置檔案(比如說是/etc/sysconfig/network,或者是其它的什麼),修改了之後“最好”把/etc/hosts也對應修改一下

By laneast at 周日, 2006/07/30 - 14:06 | 

回複

有些道理

在本機上面設定了DNS後呢,一般通路一個"名字"的時候,流程大緻是這樣的,

command->Local host name->hosts files->dns

server->wins->lmhost.windows地下這樣解析的順序,linux底下也一頁,既然第二步是解析Local 

host name,而第三步才是到hosts.想必倆個不是同類在一起的.windows裡面,hostname可以是多樣的,而host裡面的對應

的,一般隻有一個位址,那就是:127.0.0.1 localhost.host在以前的網絡中就是現在的dns作用一樣,後來随着網絡的發展,它的缺

點不适應了.是以現在host作用仍然是dns作用的.也不知道linux是不是把hostname歸結到host裡面了,不太清楚.呵呵.因為偶不知道

在哪兒該hostname.不過我們假設先.假設hostname和host檔案是倆馬事兒,看能不能解析,改變host檔案後,我們測試新的的名字,肯

定是能用的,因為計算機會到host找對照表一旦發現名稱對應了.那肯定是能夠通路了.呵呵,是以還待有人幫我回答.到底是怎麼說才對

By Anonymous at 周日, 2006/08/06 - 23:07 | 

回複

hosts在windows裡面隻是為了解析域名用的

hosts在windows裡面隻是為了解析域名用的,不知道在linux底下是不是有所歸在一起了?就是在系統啟動的時候加載host裡面的名字使得它成為計算機的名字呢?

By Anonymous (沒有被驗證) at 周日, 2006/08/06 - 23:28 | 

回複

修改hostname出現的問題

  昨天修改了一下hostname,結果導緻今天不能登陸網絡。我使用的是DHCP + FC5。通過網絡配置工具,我已經正确建立了以太網連接配接和相應的硬體,但是卻不能激活。使用service network restart會出現如下的資訊:

正在關閉接口 eth0: [确定]

關閉環回借口: [确定]

禁用 Ipv4 包傳送 [确定]

彈出環回接口: [确定]

彈出界面 eth0: [确定]

正在決定 eth0 的IP資訊 ... 完成

RTNETLINK answers: No such device //問題所在呀

但是我通過lsmod指令确實看到了我的網絡驅動子產品b44.ko被加載了。而且通過lspci指令也可以看到檢測出來的網卡。

不知道怎麼處理,如知請回呀!!!

By Anonymous at 周二, 2006/08/01 - 21:46 | 

回複

兩個第二部分?

第二部份:主機名.域名,注意主機名和域名之間有個半角的點,比如 localhost.localdomain

第二部份:主機名(主機名别名) ,其實就是主機名;

兩個第二部分?筆誤吧?

By Anonymous at 周三, 2006/07/19 - 08:18 | 

回複

辛苦了

但是中文是不是應該好好改改,讀得雲裡霧裡!!!

By Anonymous at 周一, 2006/07/17 - 08:36 | 

回複

還是我

隻是一個小建議,沒時間就算了,不管怎樣,非常感謝您的辛勤勞動!!!

By Anonymous at 周一, 2006/07/17 - 09:20 | 

回複

比如INTERNET網上的主機

比如INTERNET網上的主機,也就是公網上的主機。有時域名就是主機名。

北南兄,我覺得這句也不是太對,就算公網上的主機,域名也不就是主機名,我覺得應該是主機名和域名的總和才是網絡上的真是主機名!

By Anonymous (沒有被驗證) at 周一, 2006/07/10 - 22:36 | 

回複

修改主機名不是修改

修改主機名不是修改/etc/hosts檔案就可以的了!我測試過,修改/etc/hosts檔案根本就不起作用的,應該修改/etc/sysconfig/network

By Anonymous (沒有被驗證) at 周一, 2006/07/10 - 22:31 | 

回複

修改主機名不是修改

主機名見/etc/HOSTNAME檔案

用hostname修改的是臨時的主機名

By Anonymous at 周五, 2006/09/15 - 22:45 | 

回複

如果隻修改/etc/hosts内的主機名

在很多時候,如果隻修改/etc/hosts内的主機名,會導緻下次啟動時出現不能找到主機名的問題,我認為除了修改/etc/hosts還應該修改/etc/sysconfig/network,北南,你覺得呢?

By Anonymous (沒有被驗證) at 周三, 2006/07/05 - 09:32 | 

回複

兄弟說的有理,有時是必要的。

我測試過,有時不需要這樣做。兄弟所說的是RH/FC的系統;

比如主機的IP位址是  192.168.1.55 ,回環位址那行幾乎所有的機器都是那樣的。可改一改,也可以不改。

192.168.1.55    mailserver.localdomain   mailserver 

加上這行,主機名就變成了 mailserver 。我不敢完全确定。我測試過一回,是可以的。

如果 192.168.1.56 這台機器 ,比如他的主機名是 ftpserver。要讓

192.168.1.55能通過主機名來通路。如果不做DNS的話,就可以修改 /etc/hosts,加入

192.168.1.56這台的主機名。當然也得修改 192.168.1.56這台機器的/etc/hosts;

127.0.0.1   localhost.localdomain  localhost

192.168.1.55   mailserver.localdomain mailserver

192.168.1.56  ftpserver.localdomain  ftpserver

其實我在本文中少了一個比較重要的東西。比如一台機器是多個IP位址,每個IP位址,就應該認定為是一台主機。主機名可以綁定到IP上。修改了

/etc/hosts之外,也可以在 /etc/sysconfig/network-scripts/ifcfg-ethX

中加入HOSTNAME的項。

By 北南南北 at 周三, 2006/07/05 - 13:53 | 

回複

安裝過程中指定hostname

樣修改才能達到像在圖形化方式安裝過程中指定hostname的效果????如設hostname為A,,在登入界面的右下方顯示由預設的

localhost.localdomain變為A,,登入後的shell中,由@localhost ~變為@A ~,,在ping

A時的效果與ping localhost的效果相同,,我試過各位的方法,,都沒有成功,請指教。謝謝!!

By lmickie at 周四, 2006/08/10 - 13:25 | 

回複

/etc/hosts

/etc/hosts 就不是個存主機名的地方~~

你們認為呢?

在這個檔案裡面甚至可以什麼也不寫。

一般隻有回環接口。

這隻是一個查尋名字到位址的一個檔案,完全可以用dns來取代之。

機器的名字是什麼,和這個檔案我覺得沒關系。

大家認為呢?

By Anonymous at 周三, 2006/07/05 - 11:15 | 

回複

我認為DNS有DNS的好處。hosts有hosts的好處;

如果隻是有很少的機器,不妨直接修改hosts。這是極為簡單的。

當然DNS是友善,這是肯定的。我感覺也不能忽略了hosts的用處。對吧?

By 北南南北 at 周三, 2006/07/05 - 13:59 | 

回複

讨論一下

"主機名就機器本身的名字,域名是用來解析到IP的。"

這句話說的很不确切,域名指的是什麼,作用是什麼?

By Anonymous at 周二, 2006/07/04 - 11:13 | 

回複

謝謝,請大家說說吧。

我正在思考中,網絡基礎我隻能檢視洋文的DOC。能了解的就寫了,不了解的也寫了一點。向大家請教了。。。

感覺HOSTNAME和DOMAINNAME的沒有說的太清楚。

不過有一點我是搞的清楚了。比如INTERNET網上的主機,也就是公網上的主機。有時域名就是主機名。

By 北南南北 at 周三, 2006/07/05 - 14:02 | 

回複

有個錯字

第一句:

每台主動都有一個IP位址 應該為 :每台主機都有一個IP位址

By Anonymous at 周日, 2006/07/02 - 22:46 | 

回複

不通

但IP位址忘記不友善

應為:

但IP位址不友善記憶.

謝謝你的文章.

By Anonymous at 周一, 2006/07/03 - 11:59 | 

回複

已經修正,謝謝。

謝謝樓上的弟兄,極為真誠的。

北南  呈上

By 北南南北 at 周一, 2006/07/03 - 12:49 | 

回複

早期internet網使用的是hosts

早期internet網使用的是hosts。由于internet的發展,主機數不斷增加,造成hosts不斷增加,解析困難,維護也不友善,于是出現了DNS來解決這一問題。

By Anonymous (沒有被驗證) at 周六, 2006/07/22 - 11:18 | 

回複

本文來自ChinaUnix部落格,如果檢視原文請點:http://blog.chinaunix.net/u/25785/showart_202640.html