## 第?17?章?核心工具集
**目錄**
[](ch17.html#id3069325)
[細節](ch17s02.html)
[格式約定](ch17s02.html#id3070483)
[系統信息](ch17s03.html)
[uptime](ch17s03.html#id3070564)
[w](ch17s03.html#id3070621)
[who](ch17s03.html#id3070718)
[whoami](ch17s03.html#id3070749)
[last](ch17s03.html#id3070760)
[uname](ch17s03.html#id3070792)
[date](ch17s03.html#id3070856)
[cal](ch17s03.html#id3071187)
[文件管理](ch17s04.html)
[細節](ch17s04.html#id3071207)
[ls [路徑]](ch17s04.html#id3071275)
[cd [目錄路徑] | [特殊路徑]](ch17s04.html#id3071398)
[pwd](ch17s04.html#id3071473)
[file 文件名](ch17s04.html#id3071484)
[du [路徑]](ch17s04.html#id3071510)
[less 文件名](ch17s04.html#id3071575)
[touch 目標文件](ch17s04.html#id3071598)
[mkdir 文件夾](ch17s04.html#id3071612)
[cp 源文件 目標目錄|文件](ch17s04.html#id3071650)
[cp 源目錄 目標目錄](ch17s04.html#id3071665)
[rm 目標目錄|文件](ch17s04.html#id3071748)
[rmdir 目標目錄](ch17s04.html#id3071793)
[mv 源文件 目標目錄|文件](ch17s04.html#id3071810)
[ln 源文件 鏈接](ch17s04.html#id3071855)
[文件操作](ch17s05.html)
[split 源文件 [目標文件名前綴]](ch17s05.html#id3071907)
[cat 文件名](ch17s05.html#id3071966)
[sort [-o 輸出文件] [-t 分隔字符] [+起始字段 -結束字段] [文件]](ch17s05.html#id3072025)
[more](ch17s05.html#id3072110)
[diff 文件1 文件2](ch17s05.html#id3072126)
[patch](ch17s05.html#id3072205)
[cksum [文件名]](ch17s05.html#id3072257)
[md5sum [文件名]](ch17s05.html#id3072270)
[壓縮解壓](ch17s06.html)
[tar [-]c|x|u|r|t[z|j][v] -f 歸檔文件 [待打包文件]](ch17s06.html#id3072327)
[7z|7za 子命令 [選項] 壓縮包 [文件]](ch17s06.html#id3072511)
[搜索](ch17s07.html)
[whereis 程序名稱](ch17s07.html#id3072688)
[locate 文件名稱](ch17s07.html#id3072764)
[find [路徑] 表達式](ch17s07.html#id3072808)
[grep 字符串|正則表達式 文件名|標準輸入](ch17s07.html#id3072957)
[權限管理](ch17s08.html)
[細節](ch17s08.html#id3072982)
[chmod 權限表達式 文件|目錄](ch17s08.html#id3073219)
[chown 歸屬用戶[:歸屬群組] 文件|目錄](ch17s08.html#id3073285)
[chgrp 歸屬群組 文件|目錄](ch17s08.html#id3073349)
[SUID、SGID、Sticky bit](ch17s08.html#id3073363)
[lsattr [路徑]](ch17s08.html#id3073535)
[chattr +|-|=屬性 路徑](ch17s08.html#id3073646)
[用戶管理](ch17s09.html)
[細節](ch17s09.html#id3073693)
[su [用戶名]](ch17s09.html#id3073804)
[sudo 命令](ch17s09.html#id3073857)
[passwd [用戶名]](ch17s09.html#id3073909)
[gpasswd 群組名](ch17s09.html#id3074001)
[chsh -s Shell [用戶名]](ch17s09.html#id3074058)
[usermod 用戶名](ch17s09.html#id3074070)
[useradd 用戶名](ch17s09.html#id3074175)
[userdel 用戶名](ch17s09.html#id3074314)
[id [用戶名]](ch17s09.html#id3074344)
[進程管理](ch17s10.html)
[細節](ch17s10.html#id3074366)
[ps](ch17s10.html#id3074406)
[pstree [ 進程編號 | 用戶 ]](ch17s10.html#id3074720)
[pgrep 進程名](ch17s10.html#id3074793)
[kill [信號代碼] 進程編號](ch17s10.html#id3074836)
[pkill [信號代碼] 進程名稱](ch17s10.html#id3074953)
[xkill](ch17s10.html#id3074966)
[top](ch17s10.html#id3074982)
[renice 優先級 進程](ch17s10.html#id3075218)
[nohup 命令 [選項]](ch17s10.html#id3075284)
[命令 &](ch17s10.html#id3075304)
[命令1 ; 命令2 ; ......](ch17s10.html#id3075317)
[命令1 && 命令2 && ......](ch17s10.html#id3075334)
[Ctrl+z](ch17s10.html#id3075355)
[jobs](ch17s10.html#id3075365)
[bg [任務編號]](ch17s10.html#id3075394)
[fg [任務編號]](ch17s10.html#id3075406)
[磁盤和內存管理](ch17s11.html)
[細節](ch17s11.html#id3075427)
[mount 設備文件 [掛載路徑]](ch17s11.html#id3075463)
[umount 設備文件 | 掛載路徑](ch17s11.html#id3075752)
[df](ch17s11.html#id3075765)
[free](ch17s11.html#id3075845)
[sync](ch17s11.html#id3075923)
[fdisk 磁盤設備文件](ch17s11.html#id3075935)
[cfdisk](ch17s11.html#id3076043)
[mkfs.文件系統類型 分區設備文件](ch17s11.html#id3076054)
[hdparm 磁盤設備文件](ch17s11.html#id3076074)
[硬件管理](ch17s12.html)
[lspci](ch17s12.html#id3076154)
[lsusb](ch17s12.html#id3076242)
[lsmod](ch17s12.html#id3076253)
[modprobe 模塊名稱](ch17s12.html#id3076275)
[網絡管理](ch17s13.html)
[其它](ch17s14.html)
[echo 字符串](ch17s14.html#id3076402)
[clear](ch17s14.html#id3076496)
[alias 輸入內容=實際內容](ch17s14.html#id3076507)
[export 變量名](ch17s14.html#id3076540)
[shutdown](ch17s14.html#id3076556)
[halt](ch17s14.html#id3076642)
[reboot](ch17s14.html#id3076708)
[init 數字](ch17s14.html#id3076720)
[chroot 路徑](ch17s14.html#id3076761)
## 細節
Linux 是大小寫敏感的系統,所有的命令、路徑、選項、參數、變量……都區分大小寫
使用 `TAB` 鍵補全命令,無論任何時候,多按幾次 TAB 總會有所幫助
Shell 的功能鍵能夠協助您更高效的編輯命令,請熟悉其[鍵綁定](ch14s05.html#keybind "表?14.1.?Emacs風格 鍵綁定"),盡量使用它
命令由 `命令名` 、 `分隔符` 、 `選項` 、 `操作對象` 構成
命令名
標識命令的功能,例如**cp**(copy)、**mv**(move)、**rm**(remove)……
有些命令包含一些子命令,您可以認為它的命令名由兩個單詞構成,例如“apt”軟件包管理系統:
```
apt-get install 安裝一個軟件
apt-get remove 刪除一個軟件
```
分隔符
通常為空格,多個連續的空格視為一個空格,下面兩個命令相同:
```
cp a b
cp a b
```
有一些特殊符號也屬于分隔符,例如管道 `|` 、重定向 `>` 、 `>>` 、 `<` 、后臺運行 `&` 、序列執行 `&&` 、 `;` 。使用這些符號時,您不需要再使用空格作為分隔符
```
ls -al|less #兩個命令效果相同
ls -al | less #更容易閱讀
```
選項
精細調節命令的行為,以 `-` 引導,通常為選項的首字母。許多軟件都可以使用 **-h** 選項來閱讀使用說明,例如:
```
apt-get -h
apt-get --help
apt-get -help
apt-get -h -e -l -p
```
> [](ch17s02.html#manage01) 也可以使用選項的全名,一般以 `--` 引導
> [](ch17s02.html#manage02) 多數命令中,使用 `-` 引導多個字符,將會被視為多個選項
> [](ch17s02.html#manage03) 與上面的命令效果一樣
少數命令的選項,不需要以 `-` 引導,或者使用 `-` 引導選項全名,例如:
```
ps aux
/etc/init.d/gdm start
mplayer -loop xxx
```
**遞歸.?** 表示在子層次中重復相同操作。例如遞歸復制某目錄,不但復制當前目錄及其下的所有文件;而且對當前目錄的子目錄,也進行遞歸復制的操作。
### 格式約定[[23](ch17s02.html#ftn.id3070487)]
使用 `[]` 表示可選項,實際輸入為方括號中的內容,例如
```
ls [-l]
```
* 實際輸入為,`ls -l`
使用 `|` 表示 “或” ,以 | 分隔的項目不能同時使用,例如
```
tar [-z|j c|x vf] 歸檔文件 [源文件]
```
* 選項通常緊跟命令名,除非必要,在命令格式中,我們通常省略它們
* * *
> [[23](ch17s02.html#id3070487)] 與man中的約定相同
## 系統信息
### uptime
聯機信息-時間,顯示如下
```
11:27pm up 9 days, 7:12, 3 user, load average: 0.07, 0.12, 0.14
```
> [](ch17s03.html#man-info11) 當前系統時間
> [](ch17s03.html#man-info12) 系統運行時間
> [](ch17s03.html#man-info13) 當前在線用戶數
> [](ch17s03.html#man-info14) 系統負荷:1分鐘前、5分鐘前、15分鐘前
### w
聯機信息-已登錄用戶,顯示如下
```
01:04:10 up 1:34, 2 users, load average: 0.25, 0.16, 0.11
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user tty1 192.168.0.1 23:30 1:33 0.14s 0.12s -bash
```
> [](ch17s03.html#man-info21) uptime 信息
> [](ch17s03.html#man-info22) 用戶名
> [](ch17s03.html#man-info23) 登錄方式
> [](ch17s03.html#man-info24) 來源地址
> [](ch17s03.html#man-info25) 登錄時間
> [](ch17s03.html#man-info26) 發呆時間
> [](ch17s03.html#man-info28) 資源占用
> [](ch17s03.html#man-info29) 當前任務
### who
聯機信息
| | |
| --- | --- |
| -r | 運行級別 |
### whoami
顯示當前用戶名
### last
最近用戶登錄信息
| | |
| --- | --- |
| -數字 | 使用數字作為選項,控制顯示條目 |
### uname
系統信息
| | |
| --- | --- |
| -s | 內核名稱(默認選項) |
| -a | 全部 |
| -p | CPU 信息 |
| -n | 主機名 |
| -r | 內核發行信息(版本號) |
| -v | 內核版本信息 |
### date
顯示、設定系統時間
| | |
| --- | --- |
| -u | 顯示格林尼洛時間(UTC) |
| MMDDhhmm[[CC]YY][.ss] | 設定時間,需要管理員權限。 | date 12292359 |
| MM | 月份 |
| DD | 天數 |
| hh | 小時 |
| mm | 分鐘 |
| CC | 年份前兩位 |
| YY | 年份后兩位 |
| ss | 秒鐘 |
| 秒鐘、年份為可選 | date 122923592006.59 |
| +[%X] | 設定顯示格式,默認輸出格式: | date +%Y年%m月%d日%A%H:%M:%S%Z |
| 格式控制 | %n | 換行 |
| %t | 制表符 |
| 小時 | %H | 00~23 |
| %I | 01~12 |
| %k | 0~23 |
| %l | 1~12 |
| %p | AM|PM |
| 分、秒 | %M | 分鐘(00~59) |
| %S | 秒(00..61) |
| %T | hh:mm:ss |
| %r | hh:mm:ss AM|PM |
| %s | 從 1970年1月1日00:00:00 UTC 到目前為止的秒數 |
| %X | %H:%M:%S |
| %Z | 時區 |
| 星期 | %a | Sun~Sat |
| %A | Sunday~Saturday |
| %w | 一周中的第幾天 (0~6) |
| 年份 | %Y | 0000~9999 |
| %y | 00~99 |
| 月份 | %m | 01~12 |
| %b | Jan~Dec |
| %h |
| %B | January~December |
| 日期 | %c | 完整日期時間 |
| %d | 01~31 |
| %j | 001~366 |
| %x | 本地格式日期 |
| %D | mm/dd/yy |
| 一年中的第幾周 | %U | 以 Sunday 為一周的第一天 |
| %W | 以 Monday 為一周的第一天 |
### cal
顯示日歷
## 文件管理
### 細節
`/` 目錄為文件系統根目錄,所有目錄都是它的子目錄
絕對路徑以 `/` 起始,相對路徑以當前所在目錄起始
目錄是一種特殊類型的文件,如果沒有特別指明, _文件_ 包括文件和目錄
`..` 表示上一級目錄, `.` 表示當前目錄,它們是兩個特殊目錄
**鏈接.?**為當前文件建立在其它路徑中的訪問方法。例如將系統中其它位置的可執行文件,鏈接到 `/usr/local/bin` 目錄下,使用命令調用。
### ls [路徑]
顯示當前目錄文件列表
| | |
| --- | --- |
| --color | 不同屬性以不同顏色顯示(默認選項) |
| -a | 全部顯示 |
| -i | 顯示 inode值 |
| -l | 詳細信息 |
| -F | 顯示文件類型后綴 目錄`/` 鏈接`@` 可執行文件`*` 端口文件`=` 管道文件`|` |
| -A | 顯示隱藏文件 |
| -R | 遞歸顯示子目錄文件列表 |
| -S | 按文件大小排序 |
| -t | 按修改時間排序 |
| -u | 按訪問時間排序 |
| -d | 只顯示目錄,不遞歸顯示目錄下的文件 |
### cd [目錄路徑] | [特殊路徑]
切換目錄,目錄可以使用絕對路徑或者相對路徑
| | |
| --- | --- |
| ~ | $HOME 目錄(默認值) |
| - | 上一次目錄 |
| .. | 上一級目錄 |
| . | 當前目錄 |
* 您可以通過修改 `/etc/environment` 文件,來定義 `$CDPATH` 變量,設定“**cd**”命令的搜索路徑。
### pwd
顯示當前路徑
### file 文件名
顯示文件類型
| | |
| --- | --- |
| -i | 顯示 mime類型 |
### du [路徑]
計算文件或目錄空間占用
| | |
| --- | --- |
| -h | 人性化顯示。自動以 G、M、K 為單位顯示占用空間大小 |
| --max-depth=數字 | 顯示目錄深度 |
| -l | 重復計算硬鏈接文件大小 |
| -L | 計算符號鏈接文件大小 |
| -a | 顯示當前目錄子目錄中的文件 |
| -c | 顯示文件數 |
### less 文件名
瀏覽文件,使用 [VI](ch14s04.html#keybind-vi) 和 [Emacs](ch14s05.html#keybind "表?14.1.?Emacs風格 鍵綁定") 兩種風格的鍵綁定。
### touch 目標文件
觸碰,在不修改文件的前提下,更改其時間屬性。通常用來創建一個空文件
### mkdir 文件夾
創建文件夾
| | |
| --- | --- |
| -p 多級目錄 | 按路徑創建多級目錄 |
| -m 數字權限值 | 設定權限 |
### cp 源文件 目標目錄|文件
將源文件復制為目錄文件,或者將源文件復制到目標目錄。多個源文件使用空格分隔
### cp 源目錄 目標目錄
將源目錄復制到目標目錄中,如果復制多個源目錄,需要使用 **-R** 選項
| | |
| --- | --- |
| -a | 相當于 -dpr 選項 |
| -d | 保留鏈接 |
| -f | 強制復制,覆蓋目標文件 |
| -i | 覆蓋時詢問用戶 |
| -p | 保留修改時間和訪問權限 |
| -r -R | 遞歸復制(目錄=>目錄) |
| -l | 創建鏈接 |
| -v | 顯示過程 |
### rm 目標目錄|文件
刪除
| | |
| --- | --- |
| -r -R | 遞歸刪除(用于刪除目錄) |
| -f | 強制刪除(無需確認,直接刪除。慎用!) |
| -i | 交互式刪除(詢問用戶) |
### rmdir 目標目錄
刪除目錄時,建議您使用“**rm -r**”命令
### mv 源文件 目標目錄|文件
相當于 cp 后刪除源文件,也可以作為“重命名”使用。
| | |
| --- | --- |
| -f | 強制,覆蓋目標文件 |
| -i | 覆蓋時詢問用戶 |
| -v | 顯示過程 |
### ln 源文件 鏈接
鏈接
| | |
| --- | --- |
| -s | 符號鏈接 |
| -f | 強制鏈接,覆蓋目標文件 |
| -i | 覆蓋時詢問用戶 |
## 文件操作
### split 源文件 [目標文件名前綴]
將源文件按一定規則分割成若干個目標文件。默認文件名前綴為 `x`
| | |
| --- | --- |
| -行數 | 按行數分割文件 |
| -l 行數 | 同上 |
| -b 字節 | 按大小分割文件。可以使用 b、k、m 作單位,不指定單位的情況下,默認單位為 b |
| -C 字節 | 按大小分割文件,并盡量保持每行的完整 |
### cat 文件名
輸出文件內容。用空格分隔多個文件名
| | |
| --- | --- |
| -n | 在輸出中添加行號 |
| -b | 在輸出中添加行號,空行不編號 |
| -s | 將兩行或以上的空行,合并為一個空行 |
* 可以將多個文件內容連接到一起輸出。使用重定向合并為一個文件 **cat xaa xab xac > file.split**
### sort [-o 輸出文件] [-t 分隔字符] [+起始字段 -結束字段] [文件]
對文本內容排序
| | |
| --- | --- |
| -m | 合并文件 |
| -c | 檢查文件是否已按規則排序 |
| -b | 忽略行首空格字符 |
| -u | 忽略內容重復行 |
| -f | 忽略大小寫 |
| -l | 忽略非打印字符 |
| -M | 作為月份比較 |
| -d | 按字典順序排序,按照字母、數字、空格、制表符排序 |
| -r | 逆序輸出 |
### more
查看文件內容,建議使用 less
### diff 文件1 文件2
比較文件
| | |
| --- | --- |
| 無選項 | 混合 ed 命令格式 |
| -u [數字] | 統一格式,數字為顯示上下文行數 |
| --unified[=數字] |
| -c [數字] | 上下文格式,數字為顯示上下文行數 |
| --context[=數字] |
| -e | ed 命令格式 |
| --ed |
| -f | RCS 命令格式 |
### patch
使用 **diff -uN[r] 舊文件 新文件 > 補丁文件** 命令創建補丁文件。
在待補丁文件的目錄下使用 **patch -p[數字] <補丁文件** 命令打補丁
**-p [數字]** 表示忽略補丁文件中記錄的目錄,數字為忽略的層數。
**patch -R 已打補丁文件 補丁文件** 將已打補丁文件恢復到原來的狀態
### cksum [文件名]
計算文件的 CRC值。不指定文件名則從標準輸入設備讀入數據
### md5sum [文件名]
計算文件的 md5值。不指定文件名則從標準輸入設備讀入數據
| | |
| --- | --- |
| -t | 以文本模式讀取 |
| -b | 以二進制模式讀取 |
| -c md5紀錄 | 校驗 md5紀錄 中的文件(使用 md5sum 配合重定向生成紀錄文件) |
## 壓縮解壓
### tar [-]c|x|u|r|t[z|j][v] -f 歸檔文件 [待打包文件]
將多個文件打包為一個歸檔文件,可以在打包的同時進行壓縮。支持的格式為 tar(歸檔)、gz(壓縮)、bz2(壓縮率更高,比較耗時)
| | |
| --- | --- |
| 操作選項 | -c | 創建 |
| -x | 解包 |
| -u | 更新 |
| -r | 添加 |
| -t | 查看 |
| -d | 比較壓縮包內文件和文件 |
| -A | 將 tar 文件添加到歸檔文件中 |
| 格式選項 | -z | 使用 gz 壓縮格式 |
| -j | 使用 bz2 壓縮格式 |
| 其它 | -v | 顯示過程 |
| -f 文件名 | 歸檔文件的文件名,使用 `-` 代表標準輸入/輸出 |
| -C 解壓路徑 | 將壓縮包中的文件解壓到指定目錄 |
| --exclude=文件 | 排除文件 |
| -P | 使用絕對路徑壓縮時,保留根目錄“/” |
| -W | 校驗 |
| -p | 還原文件權限 |
| -w | 詢問用戶 |
| --totals | 統計 |
| -T 文件列表 | 處理文件列表中的文件 |
| -X 文件列表 | 排除文件列表中的文件 |
### 7z|7za 子命令 [選項] 壓縮包 [文件]
| | |
| --- | --- |
| 子命令 | a | 添加 |
| d | 刪除 |
| e | 解壓 |
| x | 帶路徑解壓 |
| l | 列表查看 |
| t | 測試 |
| u | 更新 |
| 選項 | -m 壓縮方式 |
| -m0=壓縮算法 | 默認使用 lzma |
| -mx=數字 | 1~9 壓縮級別 |
| -mfb=64 | number of fast bytes for LZMA = 64 |
| -md=字典大小 | 設置字典大小,例如 -md=32m |
| -ms=on|off | 是否固實壓縮 |
| -o輸出目錄 | 設置輸出目錄 |
| -p密碼 | 使用密碼 |
| -r數字 | 遞歸,使用數字定義遞歸子目錄的深度 |
| -sfx[模塊名稱] | 使用自解壓模塊 |
| -si | 從標準輸入設備讀入數據 |
| -so | 將數據寫入標準輸出設備 |
| -y | 所有詢問均回答 Yes |
| -w路徑 | 設置工作目錄 |
## 搜索
### whereis 程序名稱
查找軟件的安裝路徑
| | |
| --- | --- |
| -b | 只查找二進制文件 |
| -m | 只查找幫助文件 |
| -s | 只查找源代碼 |
| -u | 排除指定類型文件 |
| -f | 只顯示文件名 |
| -B 目錄 | 在指定目錄下查找二進制文件 |
| -M 目錄 | 在指定目錄下查找幫助文件 |
| -S 目錄 | 在指定目錄下查找源代碼 |
### locate 文件名稱
在文件索引數據庫中搜索文件
| | |
| --- | --- |
| -d 數據庫路徑 | 搜索指定數據庫 |
* `updatedb` 更新文件索引數據庫
### find [路徑] 表達式
查找文件
| | |
| --- | --- |
| -name 表達式 | 根據文件名查找文件 |
| -iname 表達式 | 根據文件名查找文件,忽略大小寫 |
| -path 表達式 | 根據路徑查找文件 |
| -ipath 表達式 | 根據路徑查找文件,忽略大小寫 |
| -amin 分鐘 | 過去N分鐘內訪問過的文件 |
| -atime 天數 | 過去N天內訪問過的文件 |
| -cmin 分鐘 | 過去N分鐘內修改過的文件 |
| -ctime 天數 | 過去N天內修改過的文件 |
| -anewer 參照文件 | 比參照文件更晚被讀取過的文件 |
| -cnewer 參照文件 | 比參照文件更晚被修改過的文件 |
| -size 大小 | 根據文件大小查找文件,單位 b c w k M G |
| -type 文件類型 | 根據文件類型查找文件。b 塊設備 c 字符設備 d 目錄 p 管道文件 f 普通文件 l 鏈接 s 端口文件 |
| -user 用戶名 | 按歸屬用戶查找文件 |
| -uid 用戶編號 | 按用戶編號查找文件 |
| -group 群組名 | 按歸屬群組查找文件 |
| -gid 群組編號 | 按群組編號查找文件 |
| -empty | 查找空文件 |
### grep 字符串|正則表達式 文件名|標準輸入
在文件中搜索內容
## 權限管理
### 細節
一個文件主要包含下列屬性,`ls -l`
```
- rwxrwxrwx user group date filename
111 101 101
```
> [](ch17s08.html#man-right11) 歸屬用戶的權限
> [](ch17s08.html#man-right12) 歸屬群組的權限
> [](ch17s08.html#man-right13) 其它用戶的權限
> [](ch17s08.html#man-right14) 歸屬用戶
> [](ch17s08.html#man-right15) 歸屬群組
> [](ch17s08.html#man-right16) 日期信息
> [](ch17s08.html#man-right17) 文件名稱
* 對于文件夾,必須擁有它的可執行權限,才能夠使用 **cd** 命令進入該文件夾;擁有可讀權限,才能夠使用 **ls** 命令查看該文件夾的文件列表。
* root用戶 擁有最高權限
可以使用 3位的二進制數字 來描述一組權限,某一權限對應的數字為 1,則表示具有該種權限,為 0,則不具有該種權限。
使用二進制數字來描述一組權限,雖然非常直觀,但是 3組 權限需要用 9位 數來表示,不夠方便。因此我們將三組權限使用 3位8進制數字 來表示。
每種權限對應的數字:
| | |
| --- | --- |
| 權限 | r | w | x |
| 二進制 | 100 | 010 | 001 |
| 八進制 | 4 | 2 | 1 |
將這 3位8進制數字 相加的結果,就可以表示該組權限的具體內容,例如:
```
7=4+2+1=rwx
5=4+1=rx
755=4+2+1,4+1,4+1=rwx,r-x,r-x????
```
還可以使用 a 、 u 、 g 、 o 表示歸屬關系,使用 = 、 + 、 - 表示權限變化,使用 r 、 w 、 x 表示權限內容
```
a?所有用戶??u?歸屬用戶??g?歸屬群組??o?其它用戶
=?具有權限??+?增加權限??-?去除權限
r?可讀權限??w?可寫權限??x?可執行權限?
```
例如:
```
a+x 給所有用戶增加可執行權限
go-wx 將歸屬群組和其它用戶的可寫、可執行權限去掉
u=rwx 歸屬用戶具有可讀、可寫、可執行權限
```
### chmod 權限表達式 文件|目錄
更改文件的權限。權限的表達式可以使用 3位8進制數字 表示,或者使用 augo +-= rxw-s 來表示
| | |
| --- | --- |
| -R | 遞歸 |
| -v | 顯示過程 |
| -c | 類似“-v”,僅顯示更改部分 |
| --reference=參照文件或目錄 | 以指定文件為參照更改權限 |
示例:
```
chmod -R a+x path
chmod -Rv 755 path
```
### chown 歸屬用戶[:歸屬群組] 文件|目錄
更改文件的歸屬用戶。可以使用用戶名或者用戶編號
| | |
| --- | --- |
| -R | 遞歸 |
| -v | 顯示過程 |
| -c | 類似“-v”,僅顯示更改部分 |
| --reference=參照文件或目錄 | 以指定文件為參照更改權限 |
示例:
```
chown user:admin path
chown -R user.admin path
chown user path
```
### chgrp 歸屬群組 文件|目錄
更改文件的歸屬群組。可以使用群組名或者群組編號,選項同上
### SUID、SGID、Sticky bit
某些情況下,需要以可執行文件歸屬用戶的身份執行該文件,可以為該文件設置 SUID。同樣,設置 SGID 能夠以該文件歸屬群組的身份執行它。
例如:用戶自行設定密碼。出于安全方面的考慮, `/etc/shadow` 只能由 root用戶 直接修改。
```
-rw------- root root /etc/shadow
```
這個時候,可以為程序 /usr/bin/passwd 設置 SUID,當普通用戶執行“**passwd**”命令時,便能夠以該程序歸屬用戶 root 的身份修改 /etc/shadow 文件。而“passwd”程序自身帶有身份驗證機制,不能通過驗證時拒絕執行,從而保證了安全。
```
ls -l /usr/bin/passwd
-r-s--x--x root root /usr/bin/passwd
```
我們發現,歸屬用戶的可執行權限位使用 _s_ ,表示 SUID。同樣,歸屬群組的可執行權限位使用 _s_ ,表示 SGID。任何用戶或群組都擁有 “其它用戶” 的權限,所以不需要以 其它用戶 身份執行文件,其它用戶的可執行權限位便不會出現 _s_ 。該權限位可能出現的屬性為 _t_ ,也就是粘著位 Sticky bit。
```
ls -ld /tmp
drwxrwxrwt root root /tmp
```
粘著位表示任何用戶都可能具有寫權限,但只有該歸屬用戶或 root用戶 才能夠刪除
SUID、SGID、Sticky bit 也可以像權限一樣,使用一個八進制數表示,如下:
| | |
| --- | --- |
| 4 | SUID |
| 2 | SGID |
| 1 | Sticky bit |
通過在“**chmod**”命令中使用 4個八進制數 的表達式,如 4755 ,用第一位表示 SUID、SGID 或 Sticky bit,便能夠為文件設置這些特殊權限。示例:
```
chmod -R 4755 path
```
### lsattr [路徑]
查看文件的特殊屬性
| | |
| --- | --- |
| -a | 全部顯示 |
| -d | 只顯示目錄 |
| -R | 遞歸 |
特殊屬性包括:
| | |
| --- | --- |
| a | 僅供附加用途 |
| b | 不更新最后存取時間 |
| c | 壓縮后存放 |
| d | 排除在轉儲操作之外 |
| i | 不得任意更動文件或目錄 |
| s | 保密性刪除文件或目錄 |
| S | 即時更新文件或目錄 |
| u | 預防意外刪除 |
### chattr +|-|=屬性 路徑
更改文件特殊屬性
| | |
| --- | --- |
| -R | 遞歸 |
| -V | 顯示過程 |
## 用戶管理
### 細節
root 用戶為根用戶,也就是系統管理員,擁有全部權限
一個用戶只能擁有一個 群組編號 ,但是還可以歸屬于其它附加群組
用戶管理的重要配置文件:
| | |
| --- | --- |
| /etc/passwd | 用戶名 密碼位 用戶編號 歸屬群組編號 姓名 $HOME目錄 登錄Shell |
| /etc/shadow | 用戶名 已加密密碼 密碼改動信息 密碼策略 |
| /etc/group | 群組名 密碼位 群組編號 組內用戶 |
| /etc/gshadow | 群組密碼相關文件 |
| /etc/sudoers | 用戶名 權限定義 權限 |
* 請使用“**visudo**”命令修改`/etc/sudoers`,而不要直接編輯
* 可以使用 **pwconv** 命令創建影子密碼,將 `/etc/passwd` 文件中的密碼轉換到 `/etc/shadow` 文件
### su [用戶名]
切換到其它用戶,默認切換到 root用戶。提示密碼為目標用戶密碼
| | |
| --- | --- |
| -f | 快速切換,忽略配置文件 |
| - | -l | 重新登錄 |
| -m |-p | 不更改環境變量 |
| -c 命令 | 切換后執行命令,并退出切換 |
### sudo 命令
以其它用戶的身份執行命令,默認以 root 的身份執行。提示密碼為當前用戶密碼
| | |
| --- | --- |
| -s | 切換為 root shell |
| -i | 切換為 root shell,并初始化 |
| -u 用戶名|用戶編號 | 執行命令的身份 |
| -l | 顯示自己的權限 |
### passwd [用戶名]
設定用戶密碼
| | |
| --- | --- |
| -d | 清除密碼 |
| -l | 鎖定賬戶 |
| -e | 使密碼過期,在下次登錄時更改密碼 |
| -S | 顯示密碼認證信息 |
| -x 天數 | 密碼過期,最大使用時間 |
| -n 天數 | 凍結密碼,最小使用時間 |
| -s | 更改 登錄Shell |
| -f | 更改用戶信息 |
示例:
```
$passwd
Changing password for user
(current) UNIX password: #原密碼
Enter new UNIX password: #新密碼
Retype new UNIX password: #確認新密碼
```
### gpasswd 群組名
更改群組
| | |
| --- | --- |
| -a 用戶名 | 將用戶加入群組 |
| -d 用戶名 | 將用戶從群組中刪除 |
| -r | 刪除密碼 |
| -A 用戶名 | 將用戶設置為群組管理員(群組管理員或 root 才可以使用 gpasswd 命令) |
| -M 用戶1,用戶2…… | 設置群組成員 |
### chsh -s Shell [用戶名]
更改登錄 Shell
### usermod 用戶名
修改用戶賬號
| | |
| --- | --- |
| -d 目錄 | 設定 $HOME 目錄 |
| -m | 設定 $HOME 目錄時自動建立該目錄 |
| -s Shell | 修改用戶 登錄Shell |
| -l 新登錄名 | 修改為新登錄名 |
| -u 用戶編號 | 修改用戶編號 |
| g 群組名 | 修改用戶歸屬群組 |
| -G 群組名 | 修改用戶歸屬輔組 |
| -L | 鎖定帳戶 |
| -U | 解除鎖定 |
| -e 過期時間 | 設定用戶賬號過期時間 |
| -f 緩沖天數 | 設定密碼過期后多長時間關閉賬號 |
| -c 字符串 | 修改用戶備注 |
### useradd 用戶名
新建用戶
| | |
| --- | --- |
| -d 目錄 | 設定 $HOME 目錄 |
| -m | 自動建立 $HOME 目錄 |
| -M | 不自動建立 $HOME 目錄 |
| -s Shell | 設定用戶 登錄Shell |
| -u 用戶編號 | 設定用戶編號 |
| -g 群組名 | 設定用戶歸屬群組 |
| -G 群組名 | 設定用戶歸屬附加群組 |
| -n | 不建立以用戶名為名稱的群組 |
| -e 過期時間 | 設定用戶賬號過期時間 |
| -f 緩沖天數 | 設定密碼過期后多長時間關閉賬號 |
| -c 字符串 | 設定用戶備注 |
| -D [表達式] | 更改預設值 (預設值保存于 /etc/default/useradd 文件中) |
* 新建用戶規則保存于 `/etc/login.defs` 文件中
* 新建用戶默認文件保存于 `/etc/skel/` 目錄中。新建用戶時,系統自動拷貝此目錄下的文件至新建用戶的 `$HOME` 目錄
### userdel 用戶名
刪除用戶
| | |
| --- | --- |
| -r | 刪除用戶相關文件和目錄 |
### id [用戶名]
顯示用戶 用戶編號 群組編號 歸屬附加群組
## 進程管理
### 細節
進程一般分為批處理進程、交互進程和守護進程三類。
守護進程總是活躍,在系統啟動時通過腳本自動啟動,或由 root 啟動,通常在后臺運行。
一個進程可以擁有子進程。當父進程終止時,它的子進程也隨之終止;而子進程終止時,父進程通常可以繼續運行。
init 進程為根進程,所有進程都是它的子進程
### ps
顯示進程信息,選項可省略 “`-`”
| | |
| --- | --- |
| aux | 以 BSD風格 顯示進程 _常用_ |
| -efH | 以 SystemV風格 顯示進程 |
| -e | -A | 顯示所有進程 |
| a | 顯示終端上所有用戶的進程 |
| x | 顯示無終端進程 |
| u | 顯示詳細信息 |
| f | 樹狀顯示 |
| w | 完整顯示信息 |
| l | 顯示長列表 |
輸出字段
| | |
| --- | --- |
| USER | 進程所有者 |
| PID | 進程編號 |
| PPID | 父進程編號 |
| %CPU | CPU 占用率 |
| %MEM | 內存占用率 |
| NI | 進程優先級。數值越大,占用 CPU 時間越少 |
| VSZ | 進程虛擬大小 |
| RSS | 頁面文件占用 |
| TTY | 終端編號 |
| STAT | 進程狀態 |
| D | 不可中斷 |
| R | 正在運行,或在隊列中的進程 |
| S | 處于休眠狀態 |
| T | 停止或被追蹤 |
| Z | 僵尸進程 |
| X | 死掉的進程 |
| < | 高優先級 |
| N | 低優先級 |
| L | 有些頁被鎖進內存 |
| s | 包含子進程 |
| + | 位于后臺的進程組 |
| l | 多線程,克隆線程 |
### pstree [ 進程編號 | 用戶 ]
樹狀顯示進程信息。可選擇顯示某用戶的進程或從某進程編號開始的進程
| | |
| --- | --- |
| -a | 顯示完整命令及選項 |
| -c | 完全顯示重復進程 |
| -p | 顯示進程編號,隱含-c |
| -n | 按進程編號排列進程 |
| -u | 顯示進程所有者 |
| -h |
| -H 進程編號 | 高亮顯示進程編號指定的進程及其祖先 |
### pgrep 進程名
顯示進程編號
| | |
| --- | --- |
| -l | 顯示進程名和進程編號 |
| -o | 進程起始編號 |
| -n | 進程終止編號 |
### kill [信號代碼] 進程編號
根據進程編號向進程發送信號,常用來結束進程,默認信號為 -9
| | |
| --- | --- |
| -l [信號代碼] | 顯示、翻譯信號代碼 |
| -9 | -KILL | 發送 kill 信號,退出 |
| -6 | -ABRT | 發送 abort 信號,退出 |
| -15 | -TERM | 發送 Termination 信號 |
| -1 | -HUP | 掛起 |
| -2 | -INT | 從鍵盤中斷,相當于 Ctrl+c |
| -3 | -QUIT | 從鍵盤退出,相當于 Ctrl+d |
| -4 | -ILL | 非法指令 |
| -11 | -SEGV | 內存錯誤 |
| -13 | -PIPE | 破壞管道 |
| -14 | -ALRM |
| -STOP | 停止進程,但不結束 |
| -CONT | 繼續運行已停止的進程 |
| -9 | -1 | 結束當前用戶的所有進程 |
### pkill [信號代碼] 進程名稱
結束進程族。如果結束單個進程,請用 kill
### xkill
在圖形界面中點殺進程。執行此命令后,鼠標指針變為骷髏圖案(一定看過《加勒比海盜》吧)。在窗口中點擊左鍵殺死進程,右鍵取消
### top
動態、交互式進程管理器
| | |
| --- | --- |
| 啟動選項 | -b |
| -c | 顯示進程啟動狀態,包括選項、參數、操作對象等;而不只是進程名 |
| -d 秒 | 刷新頻率。 -d 5,表示5秒刷新一次 |
| -n 次 | 刷新次數,然后退出。 -n 5,表示刷新5次后退出 |
| -i | 禁止顯示空閑進程或僵尸進程 |
| -p 進程編號 | 僅監視指定進程的編號 |
| -s | 安全模式運行,禁用一些交互指令 |
| -S | 累積模式,輸出每個進程的總的 CPU 時間,包括已死的子進程 |
| 交互命令 | space | 立即刷新 |
| k | 交互式殺死進程,提示輸入進程編號 (默認發送信號15) |
| r | 設定 renice,提示輸入進程編號和 renice值 |
| s | 改變兩次刷新時間間隔,以秒為單位 |
| n | 設定顯示進程數, 0 為不作限制 |
| i | 隱藏空閑進程和僵尸進程 |
| S | 切換到累積時間模式 |
| l | 開關,在頂部顯示 uptime 信息 |
| t | 開關,在頂部顯示 進程和 CPU 狀態 |
| m | 開關,在頂部顯示 free 信息 |
| c | 顯示方式切換: 進程名/進程啟動狀態 |
| A | 按進程啟動順序進行排序。由新到舊 |
| M | 按內存占用排序。由大到小 |
| N | 以進程編號排序。由大到小 |
| P | 按 CPU 占用排序。由大到小 |
| T | 按時間/累積時間排序 |
| f|F | 設定顯示字段。設定完成后空格退出 |
| o|O | 設定顯示字段的排序。大寫向前移動,小寫向后移動,空格退出 |
| h|? | 顯示有關安全模式和累積模式的幫助信息 |
| W | 把當前的配置寫到 ~/.toprc 中 |
### renice 優先級 進程
重新設定進程優先級(通常無此必要)
| | |
| --- | --- |
| 優先級表達式 | +|-|= nice值 |
| nice 取值范圍 | -20~19 |
| 進程表達式 | -p 進程編號 | 通過進程編號進行設定 |
| -g 進程群組編號 | 通過進程群組編號 |
| -u 用戶編號 |
### nohup 命令 [選項]
將任務提交到后臺,輸出附加到 `~/nohup.out` 文件。即便用戶退出登錄,提交的命令仍繼續執行。
### 命令 &
背景執行此命令,如果用戶退出登錄,則命令停止執行
### 命令1 ; 命令2 ; ......
命令隊列,從左向右,依次執行以 `;` 分隔的命令
### 命令1 && 命令2 && ......
命令隊列,從左向右,依次執行以 `&&` 分隔的命令。前一個命令執行成功,后一個命令才能執行
### Ctrl+z
掛起當前任務
### jobs
顯示背景任務
| | |
| --- | --- |
| -l | 顯示完整信息 |
### bg [任務編號]
將掛起的任務背景執行
### fg [任務編號]
將背景任務調到前臺執行
## 磁盤和內存管理
### 細節
Linux 中,設備用`/dev/`目錄下的文件表示。例如
```
/dev/hda1 第一塊硬盤的第一主分區
/dev/hdb5 第二塊硬盤的第一邏輯分區
/dev/sda4 第一塊 SATA 硬盤的第四主分區,或者擴展分區
/dev/null 黑洞設備
```
關于磁盤設備,詳見[“分區概念”一節](ch08.html#partition "分區概念")
### mount 設備文件 [掛載路徑]
掛載文件系統
| | |
| --- | --- |
| -t | 指定文件系統的類型 | 通常不必指定,mount 自動檢測 |
| 常見類型 | reiserfs | ReiserFS 3.6版 |
| xfs | SGI 技術 |
| jfs | IBM 技術 |
| ext3 | Linux 傳統文件系統 |
| vfat | fat fat32 |
| ext2 | Linux 傳統文件系統,不帶日志 |
| ntfs | WINNT |
| iso9660 | 光盤 |
| smbfs | Windows 文件共享 |
| -o [選項1] [選項2] ..... |
| 選項 | loop | 環設備。光盤、ISO 映像文件等,通常用于掛載映像文件(而不是設備文件) |
| bind | 綁定。將一個目錄(而不是設備文件)掛載到另一個目錄 |
| ro | rw | 只讀 readonly;可讀寫 read-write |
| sync | async | 同步模式|異步模式。決定修改是否立即寫入文件系統 |
| atime | noattime | 讀取時是否修改訪問時間。對于寫入敏感設備,例如閃存、軟盤,建議使用 noatime |
| auto | noauto | 自動掛載模式 |
| exec | noexec | 是否允許執行 |
| defaults | 使用預設的選項 rw, suid, dev, exec, auto, nouser, async |
| iocharset=UTF-8 | 指定字符集,可簡寫為 utf8 |
| codepage=936 | 指定代碼頁,可簡寫為 cp936 西文系統代碼頁為 437 |
| umask=權限掩碼 | 設定權限掩碼 |
| uid=用戶編號 | 設定歸屬用戶 |
| gid=群組編號 | 設定歸屬群組 |
| remount | 以不同選項重新掛載 |
| -L 卷標 | 掛載帶有特殊卷標的分區 |
> [](ch17s11.html#man-disk11) 權限掩碼=777-目標權限(三位) | 7777-目標權限(四位)假如權限掩碼為 022 ,則目標權限為 755 rwxr-xr-x可以使用 **umask** 命令設置權限掩碼
> 提示:掛載 NTFS 分區時請使用 **utf8** 選項;掛載 FAT 分區時請使用 **iocharset=utf8,codepage=936** 選項,以避免亂碼
**mount -a**
掛載 `/etc/fstab` 文件中定義的所有設備。示例:
```
sudo mount -t iso9660 -o loop /dev/cdrom0 /media/cdrom
sudo mount -t vfat -o remount iocharset=utf8,codepage=936 /dev/hda5 /media/hda5
```
### umount 設備文件 | 掛載路徑
卸載已掛載文件系統
### df
查看已掛載文件系統的磁盤空間占用
| | |
| --- | --- |
| -a | 顯示所有文件系統的磁盤使用情況,包括0塊(block)的文件系統,如`/proc 文件系統` |
| -T | 顯示文件系統類型 |
| -k | 以 k 字節為單位顯示 |
| -i | 顯示 i節點 信息,而不是磁盤塊 |
| -t 文件系統類型 | 顯示指定類型的文件系統的磁盤空間使用情況 |
| -x 文件系統類型 | 列出排除指定類型文件系統的磁盤空間使用情況(與 t 選項相反) |
| -l | 只顯示本地文件系統 |
### free
查看內存、緩沖區、交換空間的占用
| | |
| --- | --- |
| -b | 以字節為單位顯示數值 |
| -k | 以千字節為單位顯示數值 |
| -m | 以兆字節為單位顯示數值 |
| -g | 以吉字節為單位顯示數值 |
| -l | 顯示內存占用峰值 |
| -o | 不顯示緩沖區占用 |
| -t | 統計結果 |
| -s 秒 | 刷新頻率 |
### sync
同步文件系統。將緩沖區中的數據寫入文件系統
### fdisk 磁盤設備文件
分區表修改工具(磁盤設備文件應為整塊磁盤,而不是磁盤中的分區。例如 `/dev/sda` ,而不是 `/dev/sda1`)
| | |
| --- | --- |
| m | 使用幫助 |
| l | 查看已知文件系統類型 |
| p | 顯示分區信息 |
| n | 新建分區 (p:主分區 l:擴展分區 參見 [“分區概念”一節](ch08.html#partition "分區概念") ) |
| d | 刪除分區 |
| t | 改變分區類型 |
| w | 將改動寫入分區表 |
| q | 放棄改動并退出 |
**fdisk -l** 查看所有磁盤分區信息
### cfdisk
更加友善的分區表修改工具
### mkfs.文件系統類型 分區設備文件
將分區格式化為文件系統。示例:
```
sudo mkfs.reiserfs /dev/hda1
sudo mkfs.xfs /dev/sda1
```
### hdparm 磁盤設備文件
設置硬盤參數
| | |
| --- | --- |
| -d 0|1 | DMA 模式開關 |
| -a 0|1 | 預讀模式開關 |
| -t | 性能測試 |
| -T | 緩存性能測試 |
| -c 0|1|3 | 32位傳輸模式開關 |
| -g | 顯示柱面,扇區等信息 |
| -i|-I | 顯示磁盤信息 |
## 硬件管理
### lspci
查看 PCI 總線連接的設備(實際上也可以查看 ISA、AGP、USB 等總線信息)
| | |
| --- | --- |
| -v | 顯示詳細信息 |
| -vv |
| -vvv |
| -k | 同時顯示使用的驅動和加載的模塊 |
| -n | 顯示設備 ID號 |
| -b | 顯示 PCI、ISA 擴展槽地址和中斷 |
| -t | 顯示總線樹結構 |
| -F 文件 | 從指定文件讀信息 |
| -m | 以便于機器處理的格式輸出所有硬件信息 |
| -mm |
### lsusb
查看 USB 接口連接的設備
### lsmod
查看已加載模塊。`/lib/modules/`**uname -r** 目錄下為所有可用模塊
### modprobe 模塊名稱
啟用模塊
| | |
| --- | --- |
| -a | 加載所有匹配模塊 |
| -c | 顯示當前使用的配置 |
| -d | 顯示調試信息 |
| -k | 將指定模塊設置為"自動清除"模式 |
| -l | 顯示所有匹配模塊 |
| -n | 模擬執行 |
| -q | 不顯示錯誤信息 |
| -r | 刪除使用命令加載的模塊;對非命令加載的模塊設置"自動清除"模式 |
| -s | 將結果記錄到系統記錄中 |
| -t | 指定模塊類型 |
| -v | 顯示詳細信息 |
| -C | 指定配置文件.默認使用`/etc/modules.conf`文件為配置文件 |
## 網絡管理
## 其它
### echo 字符串
回顯。較復雜的字符串,可以使用 `"` 括起來。
| | |
| --- | --- |
| 選項 | -n | 輸出內容不換行 |
| -E | 不解析脫字符 |
| -e | 解析脫字符 |
| 控制字符 | \\ | 反斜線 |
| \a | 警告 |
| \b | 退格 |
| \n | 換行 |
| \r | 回車 |
| \t | 水平制表符 |
### clear
清空屏幕
### alias 輸入內容=實際內容
別名,為命令指定一個別名,以簡化輸入。例如:
```
alias ls='ls -AF --color=auto'
```
* 可以將您的定義保存在 `~/.bashrc` 文件中
### export 變量名
將變量導出為環境變量,常寫變量賦值一同使用,例如:
```
export PATH="$PATH:xxx"
```
### shutdown
關閉計算機,向根進程 init 發送信號,更改 runlevel 為 0 (halt)
| | |
| --- | --- |
| -h | 關閉電源 |
| -r | 重啟 |
| -n | 強行關機,不向 init進程 發送信號 |
| -k | 模擬關機,向登錄者發送關機警告 |
| -t 秒 | N秒后關機 |
| time 時間 | 定時關機 |
| -c [說明信息] | 取消關機 |
| -f | 重啟時忽略檢測文件系統 |
| -F | 重啟時強制檢測文件系統 |
### halt
關閉計算機。 調用 **shutdown -h** ,結束系統進程,同步文件系統,停止內核。
| | |
| --- | --- |
| -n | 不同步文件系統 |
| -w | 模擬關機,寫 `/var/log/wtmp` 紀錄 | -f | 不調用 shutdown ,強行關機 |
| -p | 默認選項,關機時調用 poweroff |
| -i | 關機前斷開網絡 |
### reboot
重新啟動計算機。選項與 halt 相似
### init 數字
更改運行級別
| | |
| --- | --- |
| 0 | 關機 |
| 1 | 單用戶模式 |
| 6 | 重啟 |
### chroot 路徑
更改根目錄,重新定義會話的運行環境。(通常用在多系統環境下使用)
- 開源世界旅行手冊
- 授權
- 致謝
- 序言
- 更新紀錄
- 導讀
- 如何寫作科技文檔
- 部分?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?章???補遺