目錄
- autoreconf 命令的作用是什么?
- aclocal
- automake -a
- autoconf
- 一條命令搞完三面三步
- 既然有其他的「編譯控制軟件」為何還是使用 make 來進行編譯控制?
- Module-Init-Tools 軟件包的作用是什么?
- Patch 軟件包的作用是什么?
- Psmisc 軟件包的作用是什么?
- Rsyslog 軟件包的作用什么?
- sysvint 軟件包的作用是什么?
- Udev 軟件包的作用是什么?
- DHCPCD 軟件包的作用是什么?
- Xz-Utils 軟件包的作用是什么?
- openssl 軟件包的作用是什么?
- openssh 軟件包的作用是什么?
- Bootscript 軟件包的作用是什么?
- 啟動腳本是什么?
- sysvinit 的運行級是什么概念?
- 系統運行時如何改變運行級?P233
- GRUB 軟件包的作用是什么?
- Linux 內核軟件包的作用是什么?
autoreconf 命令的作用是什么?
大多數軟件包在發布源代碼的時候會提供 configure 配置腳本,該配置腳本多數是由 autoconf 軟件包提供的命令根據 configure.ac 或 configure.in 文件所產生的。
個別軟件包發布時未提供如 configure 等編譯相關的配置文件,在編譯前需要使用 automake 和 autoconf 軟件包中提供的命令來生成相關的文件。
裝備好配置編譯腳本文件的過程是
aclocal
automake -a
autoconf
aclocal
這個命令是根據 configure.ac 文件產生 aclocal.m4 文件,該文件是使用 m4 命令進行解析的宏文件,其中定義了配置過程中需要測試的內容。
automake -a
根據 makefile.am 文件生成 makefile.in 文件,makefile.in 文件會在 configure 腳本處理后生成編譯控制文件 makefile,GNU 軟件發布代碼中通常需要包含 License、README、TODO 和 Changelog 文件,通常情況下這些文件與軟件包的編譯無關,但是如果缺少這些文件 automake 命令不會生成 makefile.in 文件,automake 軟件包中提供了這些文件的模板,automake 命令使用 -a 參數將自動用模板文件補全缺少的文件。
autoconf
這個命令根據 configure.ac 或 configure.in 模板文件來生成 configure 配置腳本文件。
一條命令搞完三面三步
上述幾條明林夠可以合並為一條命令來完成,命令如下:
autoreconf -i
通過這個命令將完成符合編譯條件的源代碼目錄,接着就可以進行配置、編譯和安裝等常規步驟了。
既然有其他的「編譯控制軟件」為何還是使用 make 來進行編譯控制?
軟件編譯大多使用 make 命令控制完成,雖然目前也有其他的編譯控制軟件,如 cmake 和 qmake 等,但是目前 make 命令依然是使用最為廣泛的編譯控制軟件。
make 命令不僅用於編譯,還可以用於處理控制相關的工作,比如並行化的系統啟動以及軟件包依賴管理控制等。
Module-Init-Tools 軟件包的作用是什么?
這個軟件包中包含了可以處理 Linux 內核 2.5.47 以上版本模塊所需要的命令。
Patch 軟件包的作用是什么?
這個軟件包中包含了一個根據補丁文件的內容來修改或者創建文件的程序。
補丁文件通常是用 diff 明林個創建的文本文件,用於修正現有文件的問題或者錯誤。
Psmisc 軟件包的作用是什么?
這個軟件包包含了用於顯示進程信息的相關的程序。
Rsyslog 軟件包的作用什么?
這個軟件包中包含了餓記錄系統日志信息(如發生異常事件時內核發出的消息)的程序。
大多數 linux 系統都具有記錄系統以及軟件運行狀態、錯誤類型等信息報告的功能,以便出現了問題可以進行跟蹤和排查。
sysvint 軟件包的作用是什么?
這個軟件包中包含了餓一組控制系統啟動、運行、關閉的程序。
Udev 軟件包的作用是什么?
這個軟件中包含了一組用於動態創建設備文件的程序,可以將這些程序一並稱呼為 Udev 系統。
大多數 linux 系統都使用 udev 系統來管理 /dev 目錄中的設備文件,Udev 系統會自動檢測計算機並生成設備文件,udev 系統還具有熱插拔設備的管理能力,能夠根據設備的實際使用情況來動態的創建和刪除設備文件,幾大的節省了管理設備文件的難度。
DHCPCD 軟件包的作用是什么?
許多局域網的網絡管理會使用自動分配 IP 的方式,DHCPCD 軟件包提供了自動獲取並分配 IP 地址的功能(需要網絡存在 DHCP 服務),省去了手工去設置 IP 的麻煩。
Xz-Utils 軟件包的作用是什么?
這個軟件包提供了對於 lzma 和 xz 壓縮格式的支持。
目前越來越多的文件采用 lzma 或 xz 的壓縮格式,該格式的壓縮率非常高。
openssl 軟件包的作用是什么?
這個軟件包包含了大量的加密和認證相關的算法,是一個非常重要和基礎的加密算法函數庫,目前有大量的開源軟件使用的加密算法基於該軟件包提供的函數庫,比如安裝了這個軟件包后 wget 可以提供對 HTTPS 等加密協議的支持。
openssh 軟件包的作用是什么?
這個軟件包中包含了使用安全加密算法的網絡鏈接客戶端(ssh)和服務端(sshd)程序,是網絡中進行數據安全傳輸中最為常用的工具。
他提供的 ssh 和scp 命令幾乎出現在現在所有的 Linux 系統中。
Bootscript 軟件包的作用是什么?
大多數 linux 系統都會包含一套啟動和關閉系統的腳本,bootscripts 軟件包中包含了一套腳本專門用於啟動/關閉本次完成的目標系統。
啟動腳本是什么?
大多數 linux 系統使用的是基於運行級(run-levles)概念的啟動工具(sysvinit),在不同的運行級上使用不同的腳本集合,這些腳本集合完成了對應運行級所需要的任務。
不同 linux 系統所包含的啟動腳本大多數情況下是不同的,每個系統根據其自身的規則來定制腳本,這使得在某個 linux 系統發行版上可以正常工作的腳本不一定能夠在另一個 linux 發行版上正常工作。
雖然腳本不同,但是基於 sysvinit 軟件包提供的啟動功能還是具有一定的規范的。
sysvinit 的運行級是什么概念?
sysvinit(從現在開始我們稱之為 init)以運行幾的模式來工作,一般定義了七個運行級(從 0 到 6,實際上還可以有更多的運行級,參考 man 8 init
獲得更多信息),每個運行級對應於一套設定好的任務,當啟動某個運行級時,操作系統就需要執行相應的任務,下面是不同運行級的任務描述:
0,關閉計算機
1,啟動到單用戶模式
2,啟動到無網絡的多用戶模式
3,啟動到有網絡的多用戶模式
4,保留的啟動級別,可用作自定義,默認同運行級 3
5,同運行級 4,一般用於圖形界面(GUI)登錄任務(如啟動到 X 的 xdm、KDE 的 kdm)
6,重新啟動計算機
啟動時根據 /etc/inittab
中的設置來確定使用哪個級別的啟動,該配置文件中有一行內容如下 id:3:initdefault:
這里的數字 3 就代表了默認使用運行級為 3 的啟動任務。
系統運行時如何改變運行級?P233
系統運行時改變運行級的命令是
init <運行級別>
例如要重啟計算機,用戶可以直接運行 init 6 命令,reboot 命令其實知識這個命令的別名,同樣 halt 命令是 init 0 的一個別名。
在 /etc/rc.d 目錄下有一些類似於 rc?.d (這里 ? 是運行級的數字表示)及 rcsysinit.d 目錄,目錄中都包含了許多鏈接文件,以 K 和 S 字幕開頭后跟數字和任務名稱,他們的含義是: K 字母表示是停止一個服務, S 字母表示是啟動一個服務,數字則確定腳本的執行順序,從 00 到 99(數字越小執行的越早),當 init 轉換到某個運行級時,響應的任務就會停止(K 開頭),另一些服務就會啟動(S 開頭)
在 /etc/rc.d/rc?.d 以及 rcsysinit.d 目錄中的都是鏈接文件,真正的腳本文件存放在 /etc/rc.d/init.d 目錄中,每個文件完成一組實際任務。
一般情況下,任務名稱相同的停止腳本和啟動腳本的鏈接都是指向 /etc/rc.d/init.d 目錄中同一個腳本,啟動控制程序會根據鏈接文件的名稱使用不同參數調用腳本,參數包括 start、stop、restart、reload 和 status 等,以 K 開頭的鏈接文件,使用 stop 參數調用運行,以 S 開頭的鏈接文件,調用 start 參數調用運行。
例外的是 rc0.d 和 rc6.d 目錄中以 S 開頭的鏈接文件使用 stop 參數調用,用來停止某些服務,這背后的邏輯是:重啟或者關閉系統時,不會是啟動服務,只會停止。
以下是腳本參數的描述:
start,啟動服務
stop,停止服務
restart,停止服務,然后再啟動
reload,該服務的配置已經更新,在修改了某服務的配置文件后,不想重啟服務的死后可以使用該參數
status,顯示服務的狀態,如果服務正在運行,會顯示該服務進程的 PID 編號
GRUB 軟件包的作用是什么?
這個軟件包是一個可以在 x86 平台上用於啟動常見操作系統的啟動器。
Linux 內核軟件包的作用是什么?
這個軟件包中包含了餓一個類 UNIX 操作系統內核的實現——Linux
為什么不實用 make install 命令來安裝內核?
因為會導致如 /usr/include 目錄中的頭文件丟失的問題。