## 第?15?章?基本系統
**目錄**
[](ch15.html#id3066195)
[目錄結構](ch15s02.html)
[啟動流程](ch15s03.html)
[更改運行級別](ch15s03.html#id3066385)
[服務管理](ch15s04.html)
[更改啟動服務](ch15s04.html#id3066469)
[手動控制服務](ch15s04.html#init.d)
[常見系統服務](ch15s04.html#id3066659)
[配置文件](ch15s05.html)
[全局配置文件](ch15s05.html#id3067198)
[用戶配置文件](ch15s05.html#id3067438)
[環境變量](ch15s06.html)
[常用環境變量](ch15s06.html#id3067727)
## 目錄結構
各種 Linux 發行版的目錄結構可能不太一樣,但它們都遵循 FHS(Filesystem Hierarchy Stand)。
實際上 FHS 只是規定了根目錄下的各主要目錄應該放些什么文件,僅了解這些還不夠,下面是一般情況下 Linux 系統的目錄結構
```
/ 根目錄
│
├boot/ 啟動文件。所有與系統啟動有關的文件都保存在這里
│ └grub/ Grub 引導器相關的文件
│
├dev/ 設備文件
├proc/ 內核與進程鏡像
│
├mnt/ 臨時掛載
├media/ 掛載媒體設備
│
├root/ root用戶 的 $HOME 目錄
├home/
│ ├user/ 普通用戶 的 $HOME 目錄
│ └.../
│
├bin/ 系統程序
├sbin/ 管理員系統程序
├lib/ 系統程序庫文件
├etc/ 系統程序和大部分應用程序的全局配置文件
│ ├init.d/ SystemV 風格的啟動腳本
│ ├rcX.d/ SystemV 啟動腳本的鏈接,定義運行級別
│ ├rc.d/ BSD 風格的啟動腳本
│ ├rc.xxx BSD 風格啟動腳本,定義運行級別
│ ├network/ 網絡配置文件
│ ├X11/ 圖形界面配置文件
│
├usr/
│ ├bin/ 應用程序
│ ├sbin/ 管理員應用程序
│ ├lib/ 應用程序庫文件
│ ├share/ 應用程序資源文件
│ ├src/ 應用程序源代碼
│ ├local/
│ │ ├soft/ 用戶程序
│ │ └.../ 通常使用單獨文件夾
│ ├X11R6/ 圖形界面系統
│
├var/ 動態數據
│
├temp/ 臨時文件
```
## 啟動流程
1. 讀取 MBR 的信息,啟動 Boot Manager
2. 加載系統內核,啟動 init進程
3. init進程 讀取 `/etc/inittab` 文件中的信息,并進入預設的運行級別,按順序運行該運行級別對應文件夾下的腳本。腳本通常以 start 選項啟動,并指向一個系統中的程序。
4. 根據 `/etc/rcS.d/`文件夾中對應的腳本啟動 Xwindow 服務器 xorg 
5. 啟動登錄管理器,等待用戶登錄 
> [](ch15s03.html#boot1) Windows 使用 NTLDR 作為 Boot Manager,如果您的系統中安裝多個版本的 Windows,您就需要在 NTLDR 中選擇您要進入的系統。 Linux 通常使用功能強大,配置靈活的 GRUB 作為 Boot Manager,我們將在[第?22?章 _Grub_](ch22.html "第?22?章?Grub")中向您介紹它的使用方式。
> [](ch15s03.html#boot2) init進程 是 Linux 的根進程,所有的系統進程都是它的子進程。
> [](ch15s03.html#boot3) 通常情況下, `/etc/rcS.d/` 目錄下的啟動腳本首先被執行,然后是 `/etc/rcN.d/` 目錄。例如您設定的運行級別為 3,那么它對應的啟動目錄為 `/etc/rc3.d/` 。
> [](ch15s03.html#boot4) Xwindow 為 Linux 下的圖形用戶界面系統。
> [](ch15s03.html#boot5) 大多 Linux 系統默認使用 GDM 作為登錄管理器,您在登錄管理器界面中輸入用戶名和密碼后,便可以登錄系統。(您可以在 `/etc/rc3.d/` 文件夾中找到一個名為 `S13gdm` 的鏈接)
### 更改運行級別
在 `/etc/inittab` 文件中找到如下內容:
```
# The default runlevel.
id:2:initdefault:
```
> [](ch15s03.html#runlevel1) 2 為系統的運行級別,默認的運行級別涵義如下:
| | |
| --- | --- |
| 0 | 關機 |
| 1 | 單用戶維護模式 |
| 2~5 | 多用戶模式 |
| 6 | 重啟 |
## 服務管理
### 更改啟動服務
在運行級別對應的文件夾中,您可以看到許多文件名以 S## 和 K## 起始的啟動腳本鏈接。例如:
```
/etc/rcS.d/S35mountall.sh 掛載文件系統
/etc/rcS.d/S40networking 啟用網絡支持
/etc/rc2.d/S13gdm 啟動登錄管理器
/etc/rc2.d/S20makedev 創建設備文件
/etc/rc2.d/S23xinetd 啟動超級進程
/etc/rc2.d/K20powernowd 針對某種硬件的電源管理支持
```
> [](ch15s04.html#runlevel21) init進程將以 **start** 為選項,按文件名順序執行所有以 S## 起始的腳本。腳本名稱中的數字越小,它將被越早執行。例如在 `/etc/rc2.d/` 文件夾中, `S13gdm` 文件名中的數字小于 `S23xinetd` , `S13gdm` 將比 `S23xinetd` 先執行。
> [](ch15s04.html#runlevel22) 如果一個腳本鏈接,以 K## 起始,表示它將以 **stop** 選項被執行。如果相應服務沒有啟動,則不執行該腳本。
* 如果您想禁止某一服務在啟動時自動運行,您可以將相應運行級別中的腳本由 S##xxx 重命名為 K##xxx 。
### 手動控制服務
您也可以手動運行帶有以下選項的啟動腳本,來控制系統服務。 **start** 啟動 **stop** 停止 **restart** 重啟
```
/etc/rc2.d/K20powernowd start
```
有時您并不清楚某一運行級別有什么啟動腳本;而且此類腳本的前三位字符并不固定,不便于記憶。這時,可以直接使用 `/etc/init.d/` 文件夾中的啟動腳本( `/etc/rcX.d/` 中的啟動腳本鏈接到 `/etc/init.d/` 文件夾下相應腳本),這也是推薦的方式。
```
/etc/init.d/powernowd start
```
> 注意:以上命令的位置并沒有包含在環境變量的搜索路徑中,所以要輸入完整路徑。
### 常見系統服務
| | |
| --- | --- |
| acpi-support | 高級電源管理支持 |
| acpid | acpi 守護程序.這兩個用于電源管理,非常重要 |
| apmd | acpi 的擴展 |
| alsa | 聲音子系統 |
| alsa-utils | 聲音子系統實用工具 |
| cron | 任務調度系統,建議開啟 |
| anacron | cron 的子系統,將系統關閉期間的計劃任務,在下一次系統運行時執行 |
| atd | 類似于 cron 的任務調度系統。建議關閉 |
| binfmt-support | 核心支持其他二進制的文件格式 |
| bluez-utiles | 藍牙設備支持 |
| bootlogd | 啟動日志。開啟它 |
| syslog-ng | 系統日志,建議開啟 |
| klogd | 同上,使用一種就可以了 |
| sysklogd |
| cupsys | 打印機子系統 |
| dbus | 消息總線系統(message bus system)。非常重要 |
| dns-clean | 使用撥號連接時,清除 dns信息 |
| evms | 企業卷管理系統 |
| fetchmail | 郵件用戶代理守護進程,用于收取郵件 |
| gdm | gnome 登錄管理器 |
| gpm | 終端中的鼠標支持 |
| halt | 別動它 |
| hdparm | 調整硬盤的腳本,配置文件為 `/etc/hdparm.conf` |
| hibernate | 系統休眠 |
| hotkey-setup | 筆記本功能鍵支持 |
| hotplug and hotplug-net | 即插即用支持,比較復雜,建議不要動它 |
| ifrename | 網絡接口重命名腳本。如果您有十塊網卡,您應該開啟它 |
| inetd | 配置文件為 `/etc/inetd.conf` |
| linux-restricted-modules-common | 受限模塊支持。 |
| lvm | 邏輯卷管理系統支持 |
| makedev | 創建設備文件,非常重要 |
| mdamd | 磁盤陣列 |
| module-init-tools | 從`/etc/modules`加載擴展模塊,建議開啟 |
| networking | 網絡支持。按 `/etc/network/interfaces` 文件預設激活網絡,非常重要 |
| ntpdate | 時間同步服務,建議關閉 |
| pcmcia | pcmcia 設備支持 |
| powernowd | 移動 CPU 節能支持 |
| ppp | 撥號連接 |
| ppp-dns |
| readahead | 預加載庫文件 |
| reboot | 別動它 |
| resolvconf | 自動配置 DNS |
| rmnologin | 清除 nologin |
| rsync | rsync 守護程序 |
| sendsigs | 在重啟和關機期間發送信號 |
| single | 激活單用戶模式 |
| sshd | ssh服務器 |
| sudo | 檢查 sudo 狀態 |
| udev | 用戶空間 dev文件系統(userspace dev filesystem)。重要 |
| umountfs | 卸載文件系統 |
| urandom | 隨機數生成器 |
| usplash | 開機畫面支持 |
| vbesave | 顯卡 BIOS 配置工具。保存顯卡的狀態 |
| xorg-common | 設置 X 服務 ICE socket |
| adjtimex | 調整核心時鐘的工具 |
| dirmngr | 證書列表管理工具 |
| hwtools | irqs 優化工具 |
| libpam-devperm | 系統崩潰之后,用于修理設備文件許可的守護程序 |
| lm-sensors | 板載傳感器支持 |
| mdadm-raid | 磁盤陳列管理器 |
| screen-cleanup | 清除開機屏幕的腳本 |
| xinetd | 管理其他守護進程的一個 inetd 超級守護程序 |
> [](ch15s04.html#srv11) `/lib/linux-restricted-modules/` 文件夾中的模塊為受限模塊。例如某些驅動程序,如果您沒有使用受限模塊,就不需要開啟它。
## 配置文件
> 小心:無論任何情況下,修改配置文件之前,先備份它
建議使用這個命令
```
sudo cp xxx xxx_`date +%y%m%d_%H:%M`
```
當然這很麻煩,您可以新建一個名為 bak 的文件,內容如下:
```
#!/bin/bash
sudo cp $1 $1_`date +%y%m%d_%H:%M`
```
把它放在您能夠記住的目錄下,比如 `/home` ,執行命令 **sh /home/bak xxx** ,就可以將當前文件夾下的文件 `xxx` 另存為 `xxx_yymmdd_HH:MM` 的格式了
### 全局配置文件
**表?15.1.?**
| 系統初始化 | /etc/inittab | 運行級別、控制臺數量 |
| --- | --- |
| /etc/timezone | 時區 |
| /etc/inetd.conf | 超級進程 |
| 文件系統 | /etc/fstab | 開機時掛載的文件系統 |
| /etc/mtab | 當前掛載的文件系統 |
| 用戶系統 | /etc/passwd | 用戶信息 |
| /etc/shadow | 用戶密碼 |
| /etc/group | 群組信息 |
| /etc/gshadow | 群組密碼 |
| /etc/sudoers | Sudoer 列表 |
| Shell | /etc/shell | 可用 Shell 列表 |
| /etc/inputrc | ReadLine 控件設定 |
| /etc/profile | 用戶首選項 |
| /etc/bash.bashrc | bash 配置文件 |
| 系統環境 | /etc/environment | 環境變量 |
| /etc/updatedb.conf | 文件檢索數據庫配置信息 |
| /etc/issue | 發行信息 |
| /etc/issue.net |
| /etc/screenrc | 屏幕設定 |
| 網絡 | /etc/iftab | 網卡 MAC地址綁定 |
| /etc/hosts | 主機列表 |
| /etc/hostname | 主機名 |
| /etc/resolv.conf | 域名解析服務器地址 |
| /etc/network/interfaces | 網卡配置文件 |
> [](ch15s05.html#conf11) 請使用“visudo”命令修改此文件,而不要直接編輯
### 用戶配置文件
`/etc/` 目錄下的文件,只有 root用戶 才有權修改。應用軟件的全局配置文件,普通用戶也不應該修改,因為所有用戶都要用到。
如果要通過配置軟件,來適應特殊需求,您可以修改用戶配置文件。
用戶配置文件通常為全局配置文件的同名隱藏文件,放在`$HOME`目錄下,例如:
| 全局配置文件 | 用戶配置文件 |
| --- | --- |
| /etc/inputrc | /home/user/.inputrc |
| /etc/vim/vimrc | /home/user/.vim/vimrc |
| /etc/bash.bashrc | /home/user/.bashrc  |
> [](ch15s05.html#conf12) 也有少數例外,通常是系統程序
## 環境變量
環境變量是作用在整個系統中的變量。
很多軟件工作的時候都要讀取環境變量[[21](ch15s06.html#ftn.id3067542)]的值來確定其工作方式。例如 cd 這個程序,如果不帶任何選項執行,它會讀取 `$HOME` 這個變量的值,然后進入到這個目錄,也就是用戶的 HOME 目錄。使用 **echo** 顯示一個環境變量:
```
echo $HOME
/home/user
echo HOME
HOME
```
> [](ch15s06.html#sys-env) 依據慣例,變量名稱通常使用大寫字母;`$` 告訴 echo 這是一個變量,不要將字符串“HOME”直接輸出到屏幕
> [](ch15s06.html#sys-env1) 輸出字符串“HOME”到屏幕
```
WELCOME="Hello!"
echo $WELCOME
Hello!
env | grep WELCOME
export WELCOME
env | grep WELCOME
Hello!
```
> [](ch15s06.html#sys-env2) 定義一個變量
> [](ch15s06.html#sys-env3) 輸出這個變量
> [](ch15s06.html#sys-env4) env 輸出所有環境變量
> [](ch15s06.html#sys-env6) 將輸出通過管道發送到 grep,檢查其中是否有“WELCOME”這個值
> [](ch15s06.html#sys-env5) export 將變量 WELCOME 導出為環境變量
定義一個環境變量,可以將定義變量和導出變量一起進行
```
export WELCOME ="Hello!"
```
> [](ch15s06.html#sys-env7) 實際上不會有什么程序要用到 `$WELCOME` 這個變量,定義它只是為了演示
### 常用環境變量
| 變量名 | 說明 |
| --- | --- |
| SHELL | 默認 Shell |
| HISTSIZE | 歷史紀錄 |
| PATH | 搜索路徑 |
| EDITOR | 默認編輯器 |
| TERM | 默認終端 |
| HOME | 用戶目錄 |
| LANG | 系統語言 |
| XMODIFIERS=@im | 默認輸入法 |
* * *
> [[21](ch15s06.html#id3067542)] 必須由大量不同程序共享,獨立于應用程序的優先選項,通常由環境變量指定,
> 如果通過配置文件給每個程序分別指定,既麻煩又容易出差錯。
> 例如[語言環境](ch20s03.html "設置 locale"),如果所有能夠使用多語言的程序都使用自己的配置文件確定其工作界面的語言,逐一去修改它們的配置文件將是一件苦惱的事情
- 開源世界旅行手冊
- 授權
- 致謝
- 序言
- 更新紀錄
- 導讀
- 如何寫作科技文檔
- 部分?I.?氣候
- 第?1?章?GUI? CLI?
- 第?2?章?UNIX 縮寫風格
- 第?3?章?版本號的迷霧
- 第?4?章???Vim 還是 Emacs
- 第?5?章???DocBook 還是 TeX
- 第?6?章?完全用 Gnu/Linux 工作
- 第?7?章?病毒
- 第?8?章?磁盤 分區
- 第?9?章?文件系統
- 第?10?章???發行版介紹
- 第?11?章???編程語言
- 第?12?章?無根的根:無名師的 Unix 心傳
- 部分?II.?地理
- 第?13?章?基礎知識
- 第?14?章?命令系統
- 第?15?章?基本系統
- 第?16?章?軟件管理
- 第?17?章?核心工具集
- 第?18?章?編譯工具鏈
- 第?19?章?圖形界面
- 第?20?章?國際化
- 第?21?章???內核
- 第?22?章?Grub
- 第?23?章?服務器
- 第?24?章?Vim 編輯器
- 第?25?章?Emacs 入門
- 第?26?章?正則表達式
- 第?27?章?docbook 指南
- 第?28?章?Git 版本控制系統
- 第?29?章?ConTeXt 入門指南
- 部分?III.?景觀
- 第?30?章?終極 Shell -- ZSH
- 第?31?章?完美工作站 Archlinux
- 第?32?章?組織你的意念:Emacs org mode
- 第?33?章???Zsh+screen
- 第?34?章???gentoo stage3
- 第?35?章???硬件問題
- 第?36?章???網絡設置
- 第?37?章???自制 LiveCD
- 第?38?章?awesome
- 第?39?章?openbox 工作環境
- 第?40?章???Emacs muse
- 第?41?章???寫作工具鏈
- 第?42?章?使用 lftp
- 第?43?章???Firefox 使用技巧
- 第?44?章???FVWM
- 部分?IV.?地質
- 第?45?章?Unix
- 第?46?章???Gnu
- 第?47?章?軟件業自由之神——Richard Stallman
- 第?48?章?Linux
- 第?49?章?GNOME與KDE的戰爭
- 第?50?章???Vim Emacs
- 第?51?章???年代紀
- 第?52?章?我的選擇
- 第?53?章???補遺