閑扯
什么時候開始有“UNIX/LINIX”這一詞匯,我忘了?只知道它是一個操作系統,跟dos一個級別的?!也就停留在這個概念的層次上,所以很多對我來說都是迷。UNIX也走過了40多個年頭的路程,而它的每一個組織不斷得到改進;21世紀開源勢頭正猛,前進的步伐更快了!
正文
眼過千邊,不如收過一遍!以下結論來自apue、互聯網或者些許自己的理解,實踐環境:Linux 2.6。
當內核加載完成之后,會創建init進程,它是系統的第一個進程init。init進程ID為1,也因此它是之后所有進程的“祖宗”!init進程是系統進入了多用戶的狀態,允許多個終端設備登錄(tty1,tty2...)。對於每一個終端設備,init進程調用一次fork生成一個子進程,緊接着調用exec執行getty程序。
下面的文件是/ect/init/tty1.conf,這足以說明init的動作。
getty進程所要做的:
- open:調用open打開輸入輸出(fd為0,1,2的文件);
- read:輸出“hostname login:”提示信息,接着讀取用戶輸入的用戶名;
- exec:根據用戶名和從文件中讀入的初始環境調用exec,實際上是execle。
現在,getty完成它的使命,把現場交給(exec)login進程。login做的事情可多啦:
- 提示用戶輸入密碼兵營驗證密碼;如果驗證多次不成功,又把現在交給init,init知道子進程被XX了,接下來的事情跟上面的一樣;
- 驗證成功的話,設置當前工作目錄
- 更改終端所有者
- 對終端的權限改為讀與寫
- 設置進程組ID
- 設置起始目錄(HOME),shell(SHELL),用戶名(USER和LOGNAME),系統默認路徑(PATH)
login已完成使命(主要是以上步驟),shell登場(exec)。
- 登錄shell的文件描述符0、1、2設置為終端設備
- 讀取用戶啟動文件(我用的是ubuntu 12,內核是Linux,用的GNU bash,它用的啟動文件是起始目錄下的.profile),執行初始化操作
- 等待用戶鍵入命令
根據上面的第二條:
我在.profile第九行添加“Daoluan Logins In Succeed!”,在進入命令提示符的前一行,就有顯示這一字符串,說明這是初始化的必經之地。經常我們需要自定義我們的工作環境的時候,通常要在工作目錄下的.bashrc(在.profile文件里有一個行執行.bashrc的代碼),從而達到自定義環境的目的。
用apue上一幅圖來結束這篇學習總結!
上面是終端登錄的過程;網絡登錄的話,會有偽終端設備驅動程序,配合talnet來對終端進行仿真。
歡迎斧正!
本文完 2012-07-13



