## 6.2 文件與目錄管理
談了談目錄與路徑之后,再來討論一下關于文件的一些基本管理吧!文件與目錄的管理上,不外乎“顯示屬性”、 “拷貝”、“刪除文件”及“移動文件或目錄”等等,由于文件與目錄的管理在 Linux 當中是很重要的, 尤其是每個人自己主文件夾的數據也都需要注意管理!所以我們來談一談有關文件與目錄的一些基礎管理部分吧!
### 6.2.1 文件與目錄的檢視: ls
```
[root@study ~]# ls [-aAdfFhilnrRSt] 文件名或目錄名稱..
[root@study ~]# ls [--color={never,auto,always}] 文件名或目錄名稱..
[root@study ~]# ls [--full-time] 文件名或目錄名稱..
選項與參數:
-a :全部的文件,連同隱藏文件( 開頭為 . 的文件) 一起列出來(常用)
-A :全部的文件,連同隱藏文件,但不包括 . 與 .. 這兩個目錄
-d :僅列出目錄本身,而不是列出目錄內的文件數據(常用)
-f :直接列出結果,而不進行排序 (ls 默認會以文件名排序!)
-F :根據文件、目錄等信息,給予附加數據結構,例如:
*:代表可可執行文件; /:代表目錄; =:代表 socket 文件; |:代表 FIFO 文件;
-h :將文件大小以人類較易讀的方式(例如 GB, KB 等等)列出來;
-i :列出 inode 號碼,inode 的意義下一章將會介紹;
-l :長數據串行出,包含文件的屬性與權限等等數據;(常用)
-n :列出 UID 與 GID 而非使用者與群組的名稱 (UID與GID會在帳號管理提到!)
-r :將排序結果反向輸出,例如:原本文件名由小到大,反向則為由大到小;
-R :連同子目錄內容一起列出來,等于該目錄下的所有文件都會顯示出來;
-S :以文件大小大小排序,而不是用文件名排序;
-t :依時間排序,而不是用文件名。
--color=never :不要依據文件特性給予顏色顯示;
--color=always :顯示顏色
--color=auto :讓系統自行依據設置來判斷是否給予顏色
--full-time :以完整時間模式 (包含年、月、日、時、分) 輸出
--time={atime,ctime} :輸出 access 時間或改變權限屬性時間 (ctime)
而非內容變更時間 (modification time)
```
在Linux系統當中,這個 ls 指令可能是最常被執行的吧!因為我們隨時都要知道文件或者是目錄的相關信息啊~ 不過,我們Linux的文件所記錄的信息實在是太多了,ls 沒有需要全部都列出來呢~ 所以,當你只有下達 ls 時,默認顯示的只有:非隱藏文件的文件名、 以文件名進行排序及文件名代表的顏色顯示如此而已。舉例來說, 你下達“ ls /etc ”之后,只有經過排序的文件名以及以藍色顯示目錄及白色顯示一般文件,如此而已。
那如果我還想要加入其他的顯示信息時,可以加入上頭提到的那些有用的選項呢~ 舉例來說,我們之前一直用到的 -l 這個長串顯示數據內容,以及將隱藏文件也一起列示出來的 -a 選項等等。 下面則是一些常用的范例,實際試做看看:
```
范例一:將主文件夾下的所有文件列出來(含屬性與隱藏文件)
[root@study ~]# ls -al ~
total 56
dr-xr-x---. 5 root root 4096 Jun 4 19:49 .
dr-xr-xr-x. 17 root root 4096 May 4 17:56 ..
-rw-------. 1 root root 1816 May 4 17:57 anaconda-ks.cfg
-rw-------. 1 root root 6798 Jun 4 19:53 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 176 Jun 3 00:04 .bashrc_test
drwx------. 4 root root 29 May 6 00:14 .cache
drwxr-xr-x. 3 root root 17 May 6 00:14 .config
# 這個時候你會看到以 . 為開頭的幾個文件,以及目錄檔 (.) (..) .config 等等,
# 不過,目錄檔文件名都是以深藍色顯示,有點不容易看清楚就是了。
范例二:承上題,不顯示顏色,但在文件名末顯示出該文件名代表的類型(type)
[root@study ~]# ls -alF --color=never ~
total 56
dr-xr-x---. 5 root root 4096 Jun 4 19:49 ./
dr-xr-xr-x. 17 root root 4096 May 4 17:56 ../
-rw-------. 1 root root 1816 May 4 17:57 anaconda-ks.cfg
-rw-------. 1 root root 6798 Jun 4 19:53 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 176 Jun 3 00:04 .bashrc_test
drwx------. 4 root root 29 May 6 00:14 .cache/
drwxr-xr-x. 3 root root 17 May 6 00:14 .config/
# 注意看到顯示結果的第一行,嘿嘿~知道為何我們會下達類似 ./command
# 之類的指令了吧?因為 ./ 代表的是“目前目錄下”的意思啊!至于什么是 FIFO/Socket ?
# 請參考前一章節的介紹啊!另外,那個.bashrc 時間僅寫2013,能否知道詳細時間?
范例三:完整的呈現文件的修改時間 (modification time)
[root@study ~]# ls -al --full-time ~
total 56
dr-xr-x---. 5 root root 4096 2015-06-04 19:49:54.520684829 +0800 .
dr-xr-xr-x. 17 root root 4096 2015-05-04 17:56:38.888000000 +0800 ..
-rw-------. 1 root root 1816 2015-05-04 17:57:02.326000000 +0800 anaconda-ks.cfg
-rw-------. 1 root root 6798 2015-06-04 19:53:41.451684829 +0800 .bash_history
-rw-r--r--. 1 root root 18 2013-12-29 10:26:31.000000000 +0800 .bash_logout
-rw-r--r--. 1 root root 176 2013-12-29 10:26:31.000000000 +0800 .bash_profile
-rw-rw-rw-. 1 root root 176 2013-12-29 10:26:31.000000000 +0800 .bashrc
-rw-r--r--. 1 root root 176 2015-06-03 00:04:16.916684829 +0800 .bashrc_test
drwx------. 4 root root 29 2015-05-06 00:14:56.960764950 +0800 .cache
drwxr-xr-x. 3 root root 17 2015-05-06 00:14:56.975764950 +0800 .config
# 請仔細看,上面的“時間”字段變了喔!變成較為完整的格式。
# 一般來說, ls -al 僅列出目前短格式的時間,有時不會列出年份,
# 借由 --full-time 可以查閱到比較正確的完整時間格式啊!
```
其實 ls 的用法還有很多,包括查閱文件所在 i-node 號碼的 ls -i 選項,以及用來進行文件排序的 -S 選項,還有用來查閱不同時間的動作的 --time=atime 等選項(更多時間說明請參考本章后面[touch](../Text/index.html#touch)的說明)。而這些選項的存在都是因為 Linux 文件系統記錄了很多有用的信息的緣故。那么 Linux 的文件系統中,這些與權限、屬性有關的數據放在哪里呢? 放在 i-node 里面。關于這部分,我們會在下一章繼續為你作比較深入的介紹啊!
無論如何, ls 最常被使用到的功能還是那個 -l 的選項,為此,很多 distribution 在默認的情況中, 已經將 ll (L 的小寫) 設置成為 ls -l 的意思了!其實,那個功能是 [Bash shell](../Text/index.html) 的 [alias](../Text/index.html#alias) 功能呢~也就是說,我們直接輸入 ll 就等于是輸入 ls -l 是一樣的~關于這部分,我們會在后續 bash shell 時再次的強調滴~
### 6.2.2 復制、刪除與移動: cp, rm, mv
要復制文件,請使用 cp (copy) 這個指令即可~不過, cp 這個指令的用途可多了~ 除了單純的復制之外,還可以創建鏈接文件 (就是捷徑啰),比對兩文件的新舊而予以更新, 以及復制整個目錄等等的功能呢!至于移動目錄與文件,則使用 mv (move), 這個指令也可以直接拿來作更名 (rename) 的動作喔!至于移除嗎?那就是 rm (remove) 這個指令啰~下面我們就來瞧一瞧先~
* cp (復制文件或目錄)
```
[root@study ~]# cp [-adfilprsu] 來源文件(source) 目標文件(destination)
[root@study ~]# cp [options] source1 source2 source3 .... directory
選項與參數:
-a :相當于 -dr --preserve=all 的意思,至于 dr 請參考下列說明;(常用)
-d :若來源文件為鏈接文件的屬性(link file),則復制鏈接文件屬性而非文件本身;
-f :為強制(force)的意思,若目標文件已經存在且無法打開,則移除后再嘗試一次;
-i :若目標文件(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)
-l :進行硬式鏈接(hard link)的鏈接文件創建,而非復制文件本身;
-p :連同文件的屬性(權限、用戶、時間)一起復制過去,而非使用默認屬性(備份常用);
-r :遞回持續復制,用于目錄的復制行為;(常用)
-s :復制成為符號鏈接文件 (symbolic link),亦即“捷徑”文件;
-u :destination 比 source 舊才更新 destination,或 destination 不存在的情況下才復制。
--preserve=all :除了 -p 的權限相關參數外,還加入 SELinux 的屬性, links, xattr 等也復制了。
最后需要注意的,如果來源文件有兩個以上,則最后一個目的文件一定要是“目錄”才行!
```
復制(cp)這個指令是非常重要的,不同身份者執行這個指令會有不同的結果產生,尤其是那個-a, -p的選項, 對于不同身份來說,差異則非常的大!下面的練習中,有的身份為root有的身份為一般帳號 (在我這里用 dmtsai 這個帳號), 練習時請特別注意身份的差別喔!好!開始來做復制的練習與觀察:
```
范例一:用root身份,將主文件夾下的 .bashrc 復制到 /tmp 下,并更名為 bashrc
[root@study ~]# cp ~/.bashrc /tmp/bashrc
[root@study ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n <==n不覆蓋,y為覆蓋
# 重復作兩次動作,由于 /tmp 下面已經存在 bashrc 了,加上 -i 選項后,
# 則在覆蓋前會詢問使用者是否確定!可以按下 n 或者 y 來二次確認呢!
范例二:變換目錄到/tmp,并將/var/log/wtmp復制到/tmp且觀察屬性:
[root@study ~]# cd /tmp
[root@study tmp]# cp /var/log/wtmp . <==想要復制到目前的目錄,最后的 . 不要忘
[root@study tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r--. 1 root utmp 28416 Jun 11 18:56 /var/log/wtmp
-rw-r--r--. 1 root root 28416 Jun 11 19:01 wtmp
# 注意上面的特殊字體,在不加任何選項的情況下,文件的某些屬性/權限會改變;
# 這是個很重要的特性!要注意喔!還有,連文件創建的時間也不一樣了!
# 那如果你想要將文件的所有特性都一起復制過來該怎辦?可以加上 -a 喔!如下所示:
[root@study tmp]# cp -a /var/log/wtmp wtmp_2
[root@study tmp]# ls -l /var/log/wtmp wtmp_2
-rw-rw-r--. 1 root utmp 28416 Jun 11 18:56 /var/log/wtmp
-rw-rw-r--. 1 root utmp 28416 Jun 11 18:56 wtmp_2
# 瞭了吧!整個數據特性完全一模一樣ㄟ!真是不賴~這就是 -a 的特性!
```
這個 cp 的功能很多,由于我們常常會進行一些數據的復制,所以也會常常用到這個指令的。 一般來說,我們如果去復制別人的數據 (當然,該文件你必須要有 read 的權限才行啊! ^_^) 時, 總是希望復制到的數據最后是我們自己的,所以,在默認的條件中, cp 的來源文件與目的文件的權限是不同的,目的文件的擁有者通常會是指令操作者本身。舉例來說, 上面的范例二中,由于我是 root 的身份,因此復制過來的文件擁有者與群組就改變成為 root 所有了! 這樣說,可以明白嗎?^_^
由于具有這個特性,因此當我們在進行備份的時候,某些需要特別注意的特殊權限文件, 例如密碼檔 (/etc/shadow) 以及一些配置文件,就不能直接以 cp 來復制,而必須要加上 -a 或者是 -p 等等可以完整復制文件權限的選項才行!另外,如果你想要復制文件給其他的使用者, 也必須要注意到文件的權限(包含讀、寫、執行以及文件擁有者等等), 否則,其他人還是無法針對你給予的文件進行修訂的動作喔!注意注意!
```
范例三:復制 /etc/ 這個目錄下的所有內容到 /tmp 下面
[root@study tmp]# cp /etc/ /tmp
cp: omitting directory `/etc' <== 如果是目錄則不能直接復制,要加上 -r 的選項
[root@study tmp]# cp -r /etc/ /tmp
# 還是要再次的強調喔! -r 是可以復制目錄,但是,文件與目錄的權限可能會被改變
# 所以,也可以利用“ cp -a /etc /tmp ”來下達指令喔!尤其是在備份的情況下!
范例四:將范例一復制的 bashrc 創建一個鏈接文件 (symbolic link)
[root@study tmp]# ls -l bashrc
-rw-r--r--. 1 root root 176 Jun 11 19:01 bashrc <==先觀察一下文件情況
[root@study tmp]# cp -s bashrc bashrc_slink
[root@study tmp]# cp -l bashrc bashrc_hlink
[root@study tmp]# ls -l bashrc*
-rw-r--r--. 2 root root 176 Jun 11 19:01 bashrc <==與原始文件不太一樣了!
-rw-r--r--. 2 root root 176 Jun 11 19:01 bashrc_hlink
lrwxrwxrwx. 1 root root 6 Jun 11 19:06 bashrc_slink -> bashrc
```
范例四可有趣了!使用 -l 及 -s 都會創建所謂的鏈接文件(link file),但是這兩種鏈接文件卻有不一樣的情況。這是怎么一回事啊? 那個 -l 就是所謂的實體鏈接(hard link),至于 -s 則是符號鏈接(symbolic link), 簡單來說,bashrc_slink 是一個“捷徑”,這個捷徑會鏈接到bashrc去!所以你會看到文件名右側會有個指向(->)的符號!
至于bashrc_hlink文件與bashrc的屬性與權限完全一模一樣,與尚未進行鏈接前的差異則是第二欄的link數由1變成2了! 鳥哥這里先不介紹實體鏈接,因為實體鏈接涉及 i-node 的相關知識,我們下一章談到文件系統(filesystem)時再來討論這個問題。
```
范例五:若 ~/.bashrc 比 /tmp/bashrc 新才復制過來
[root@study tmp]# cp -u ~/.bashrc /tmp/bashrc
# 這個 -u 的特性,是在目標文件與來源文件有差異時,才會復制的。
# 所以,比較常被用于“備份”的工作當中喔! ^_^
范例六:將范例四造成的 bashrc_slink 復制成為 bashrc_slink_1 與bashrc_slink_2
[root@study tmp]# cp bashrc_slink bashrc_slink_1
[root@study tmp]# cp -d bashrc_slink bashrc_slink_2
[root@study tmp]# ls -l bashrc bashrc_slink*
-rw-r--r--. 2 root root 176 Jun 11 19:01 bashrc
lrwxrwxrwx. 1 root root 6 Jun 11 19:06 bashrc_slink -> bashrc
-rw-r--r--. 1 root root 176 Jun 11 19:09 bashrc_slink_1 <==與原始文件相同
lrwxrwxrwx. 1 root root 6 Jun 11 19:10 bashrc_slink_2 -> bashrc <==是鏈接文件!
# 這個例子也是很有趣喔!原本復制的是鏈接文件,但是卻將鏈接文件的實際文件復制過來了
# 也就是說,如果沒有加上任何選項時,cp復制的是原始文件,而非鏈接文件的屬性!
# 若要復制鏈接文件的屬性,就得要使用 -d 的選項了!如 bashrc_slink_2 所示。
范例七:將主文件夾的 .bashrc 及 .bash_history 復制到 /tmp 下面
[root@study tmp]# cp ~/.bashrc ~/.bash_history /tmp
# 可以將多個數據一次復制到同一個目錄去!最后面一定是目錄!
```
例題:你能否使用 dmtsai 的身份,完整的復制/var/log/wtmp文件到/tmp下面,并更名為dmtsai_wtmp呢?答:實際做看看的結果如下:
```
[dmtsai@study ~]$ cp -a /var/log/wtmp /tmp/dmtsai_wtmp
[dmtsai@study ~]$ ls -l /var/log/wtmp /tmp/dmtsai_wtmp
-rw-rw-r--. 1 dmtsai dmtsai 28416 6月 11 18:56 /tmp/dmtsai_wtmp
-rw-rw-r--. 1 root utmp 28416 6月 11 18:56 /var/log/wtmp
```
由于 dmtsai 的身份并不能隨意修改文件的擁有者與群組,因此雖然能夠復制wtmp的相關權限與時間等屬性, 但是與擁有者、群組相關的,原本 dmtsai 身份無法進行的動作,即使加上 -a 選項,也是無法達成完整復制權限的!
總之,由于 cp 有種種的文件屬性與權限的特性,所以,在復制時,你必須要清楚的了解到:
* 是否需要完整的保留來源文件的信息?
* 來源文件是否為鏈接文件 (symbolic link file)?
* 來源文件是否為特殊的文件,例如 FIFO, socket 等?
* 來源文件是否為目錄?
* rm (移除文件或目錄)
```
[root@study ~]# rm [-fir] 文件或目錄
選項與參數:
-f :就是 force 的意思,忽略不存在的文件,不會出現警告訊息;
-i :互動模式,在刪除前會詢問使用者是否動作
-r :遞回刪除啊!最常用在目錄的刪除了!這是非常危險的選項!!!
范例一:將剛剛在 cp 的范例中創建的 bashrc 刪除掉!
[root@study ~]# cd /tmp
[root@study tmp]# rm -i bashrc
rm: remove regular file `bashrc'? y
# 如果加上 -i 的選項就會主動詢問喔,避免你刪除到錯誤的文件名!
范例二:通過萬用字符*的幫忙,將/tmp下面開頭為bashrc的文件名通通刪除:
[root@study tmp]# rm -i bashrc*
# 注意那個星號,代表的是 0 到無窮多個任意字符喔!很好用的東西!
范例三:將 cp 范例中所創建的 /tmp/etc/ 這個目錄刪除掉!
[root@study tmp]# rmdir /tmp/etc
rmdir: failed to remove '/tmp/etc': Directory not empty <== 刪不掉啊!因為這不是空的目錄!
[root@study tmp]# rm -r /tmp/etc
rm: descend into directory `/tmp/etc'? y
rm: remove regular file `/tmp/etc/fstab'? y
rm: remove regular empty file `/tmp/etc/crypttab'? ^C <== 按下 [crtl]+c 中斷
.....(中間省略).....
# 因為身份是 root ,默認已經加入了 -i 的選項,所以你要一直按 y 才會刪除!
# 如果不想要繼續按 y ,可以按下“ [ctrl]-c ”來結束 rm 的工作。
# 這是一種保護的動作,如果確定要刪除掉此目錄而不要詢問,可以這樣做:
[root@study tmp]# \rm -r /tmp/etc
# 在指令前加上反斜線,可以忽略掉 alias 的指定選項喔!至于 alias 我們在bash再談!
# 拜托!這個范例很可怕!你不要刪錯了!刪除 /etc 系統是會掛掉的!
范例四:刪除一個帶有 - 開頭的文件
[root@study tmp]# touch ./-aaa- <==[touch](../Text/index.html#touch)這個指令可以創建空文件!
[root@study tmp]# ls -l
-rw-r--r--. 1 root root 0 Jun 11 19:22 -aaa- <==文件大小為0,所以是空文件
[root@study tmp]# rm -aaa-
rm: invalid option -- 'a' <== 因為 "-" 是選項嘛!所以系統誤判了!
Try 'rm ./-aaa-' to remove the file `-aaa-'. <== 新的 bash 有給建議的
Try 'rm --help' for more information.
[root@study tmp]# rm ./-aaa-
```
這是移除的指令(remove),要注意的是,通常在Linux系統下,為了怕文件被 root 誤殺,所以很多 distributions 都已經默認加入 -i 這個選項了!而如果要連目錄下的東西都一起殺掉的話, 例如子目錄里面還有子目錄時,那就要使用 -r 這個選項了!不過,使用“ rm -r ”這個指令之前,請千萬注意了,因為該目錄或文件“肯定”會被 root 殺掉!因為系統不會再次詢問你是否要砍掉呦!所以那是個超級嚴重的指令下達呦! 得特別注意!不過,如果你確定該目錄不要了,那么使用 rm -r 來循環殺掉是不錯的方式!
另外,范例四也是很有趣的例子,我們在之前就談過,文件名最好不要使用 "-" 號開頭, 因為 "-" 后面接的是選項,因此,單純的使用“ rm -aaa- ”系統的指令就會誤判啦! 那如果使用后面會談到的正則表達式時,還是會出問題的!所以,只能用避過首位字符是 "-" 的方法啦! 就是加上本目錄“ ./ ”即可!如果 man rm 的話,其實還有一種方法,那就是“ rm -- -aaa- ”也可以啊!
* mv (移動文件與目錄,或更名)
```
[root@study ~]# mv [-fiu] source destination
[root@study ~]# mv [options] source1 source2 source3 .... directory
選項與參數:
-f :force 強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋;
-i :若目標文件 (destination) 已經存在時,就會詢問是否覆蓋!
-u :若目標文件已經存在,且 source 比較新,才會更新 (update)
范例一:復制一文件,創建一目錄,將文件移動到目錄中
[root@study ~]# cd /tmp
[root@study tmp]# cp ~/.bashrc bashrc
[root@study tmp]# mkdir mvtest
[root@study tmp]# mv bashrc mvtest
# 將某個文件移動到某個目錄去,就是這樣做!
范例二:將剛剛的目錄名稱更名為 mvtest2
[root@study tmp]# mv mvtest mvtest2 <== 這樣就更名了!簡單~
# 其實在 Linux 下面還有個有趣的指令,名稱為 rename ,
# 該指令專職進行多個文件名的同時更名,并非針對單一文件名變更,與mv不同。請man rename。
范例三:再創建兩個文件,再全部移動到 /tmp/mvtest2 當中
[root@study tmp]# cp ~/.bashrc bashrc1
[root@study tmp]# cp ~/.bashrc bashrc2
[root@study tmp]# mv bashrc1 bashrc2 mvtest2
# 注意到這邊,如果有多個來源文件或目錄,則最后一個目標文件一定是“目錄!”
# 意思是說,將所有的數據移動到該目錄的意思!
```
這是搬移 (move) 的意思!當你要移動文件或目錄的時后,呵呵!這個指令就很重要啦! 同樣的,你也可以使用 -u ( update )來測試新舊文件,看看是否需要搬移啰! 另外一個用途就是“變更文件名!”,我們可以很輕易的使用 mv 來變更一個文件的文件名呢!不過,在 Linux 才有的指令當中,有個 rename , 可以用來更改大量文件的文件名,你可以利用 man rename 來查閱一下,也是挺有趣的指令喔!
### 6.2.3 取得路徑的文件名稱與目錄名稱
每個文件的完整文件名包含了前面的目錄與最終的文件名,而每個文件名的長度都可以到達 255 個字符耶! 那么你怎么知道那個是文件名?那個是目錄名?嘿嘿!就是利用斜線 (/) 來分辨啊! 其實,取得文件名或者是目錄名稱,一般的用途應該是在寫程序的時候用來判斷之用的啦~ 所以,這部分的指令可以用在第三篇內的 shell scripts 里頭喔! 下面我們簡單的以幾個范例來談一談 basename 與 dirname 的用途!
```
[root@study ~]# basename /etc/sysconfig/network
network <== 很簡單!就取得最后的文件名~
[root@study ~]# dirname /etc/sysconfig/network
/etc/sysconfig <== 取得的變成目錄名了!
```
- 鳥哥的Linux私房菜:基礎學習篇 第四版
- 目錄及概述
- 第零章、計算機概論
- 0.1 電腦:輔助人腦的好工具
- 0.2 個人電腦架構與相關設備元件
- 0.3 數據表示方式
- 0.4 軟件程序運行
- 0.5 重點回顧
- 0.6 本章習題
- 0.7 參考資料與延伸閱讀
- 第一章、Linux是什么與如何學習
- 1.1 Linux是什么
- 1.2 Torvalds的Linux發展
- 1.3 Linux當前應用的角色
- 1.4 Linux 該如何學習
- 1.5 重點回顧
- 1.6 本章習題
- 1.7 參考資料與延伸閱讀
- 第二章、主機規劃與磁盤分區
- 2.1 Linux與硬件的搭配
- 2.2 磁盤分區
- 2.3 安裝Linux前的規劃
- 2.4 重點回顧
- 2.5 本章習題
- 2.6 參考資料與延伸閱讀
- 第三章、安裝 CentOS7.x
- 3.1 本練習機的規劃--尤其是分區參數
- 3.2 開始安裝CentOS 7
- 3.3 多重開機安裝流程與管理(Option)
- 3.4 重點回顧
- 3.5 本章習題
- 3.6 參考資料與延伸閱讀
- 第四章、首次登陸與線上求助
- 4.1 首次登陸系統
- 4.2 文字模式下指令的下達
- 4.3 Linux系統的線上求助man page與info page
- 4.4 超簡單文書編輯器: nano
- 4.5 正確的關機方法
- 4.6 重點回顧
- 4.7 本章習題
- 4.8 參考資料與延伸閱讀
- 第五章、Linux 的文件權限與目錄配置
- 5.1 使用者與群組
- 5.2 Linux 文件權限概念
- 5.3 Linux目錄配置
- 5.4 重點回顧
- 5.5 本章練習
- 5.6 參考資料與延伸閱讀
- 第六章、Linux 文件與目錄管理
- 6.1 目錄與路徑
- 6.2 文件與目錄管理
- 6.3 文件內容查閱
- 6.4 文件與目錄的默認權限與隱藏權限
- 6.5 指令與文件的搜尋
- 6.6 極重要的復習!權限與指令間的關系
- 6.7 重點回顧
- 6.8 本章習題:
- 6.9 參考資料與延伸閱讀
- 第七章、Linux 磁盤與文件系統管理
- 7.1 認識 Linux 文件系統
- 7.2 文件系統的簡單操作
- 7.3 磁盤的分區、格式化、檢驗與掛載
- 7.4 設置開機掛載
- 7.5 內存交換空間(swap)之創建
- 7.6 文件系統的特殊觀察與操作
- 7.7 重點回顧
- 7.8 本章習題 - 第一題一定要做
- 7.9 參考資料與延伸閱讀
- 第八章、文件與文件系統的壓縮,打包與備份
- 8.1 壓縮文件的用途與技術
- 8.2 Linux 系統常見的壓縮指令
- 8.3 打包指令: tar
- 8.4 XFS 文件系統的備份與還原
- 8.5 光盤寫入工具
- 8.6 其他常見的壓縮與備份工具
- 8.7 重點回顧
- 8.8 本章習題
- 8.9 參考資料與延伸閱讀
- 第九章、vim 程序編輯器
- 9.1 vi 與 vim
- 9.2 vi 的使用
- 9.3 vim 的額外功能
- 9.4 其他 vim 使用注意事項
- 9.5 重點回顧
- 9.6 本章練習
- 9.7 參考資料與延伸閱讀
- 第十章、認識與學習BASH
- 10.1 認識 BASH 這個 Shell
- 10.2 Shell 的變量功能
- 10.3 命令別名與歷史命令
- 10.4 Bash Shell 的操作環境:
- 10.5 數據流重導向
- 10.6 管線命令 (pipe)
- 10.7 重點回顧
- 10.8 本章習題
- 10.9 參考資料與延伸閱讀
- 第十一章、正則表達式與文件格式化處理
- 11.1 開始之前:什么是正則表達式
- 11.2 基礎正則表達式
- 11.3 延伸正則表達式
- 11.4 文件的格式化與相關處理
- 11.5 重點回顧
- 11.6 本章習題
- 11.7 參考資料與延伸閱讀
- 第十二章、學習 Shell Scripts
- 12.1 什么是 Shell scripts
- 12.2 簡單的 shell script 練習
- 12.3 善用判斷式
- 12.4 條件判斷式
- 12.5 循環 (loop)
- 12.6 shell script 的追蹤與 debug
- 12.7 重點回顧
- 12.8 本章習題
- 第十三章、Linux 帳號管理與 ACL 權限設置
- 13.1 Linux 的帳號與群組
- 13.2 帳號管理
- 13.3 主機的細部權限規劃:ACL 的使用
- 13.4 使用者身份切換
- 13.5 使用者的特殊 shell 與 PAM 模塊
- 13.6 Linux 主機上的使用者訊息傳遞
- 13.7 CentOS 7 環境下大量創建帳號的方法
- 13.8 重點回顧
- 13.9 本章習題
- 13.10 參考資料與延伸閱讀
- 第十四章、磁盤配額(Quota)與進階文件系統管理
- 14.1 磁盤配額 (Quota) 的應用與實作
- 14.2 軟件磁盤陣列 (Software RAID)
- 14.3 邏輯卷軸管理員 (Logical Volume Manager)
- 14.4 重點回顧
- 14.5 本章習題
- 14.6 參考資料與延伸閱讀
- 第十五章、例行性工作調度(crontab)
- 15.1 什么是例行性工作調度
- 15.2 僅執行一次的工作調度
- 15.3 循環執行的例行性工作調度
- 15.4 可喚醒停機期間的工作任務
- 15.5 重點回顧
- 15.6 本章習題
- 第十六章、程序管理與 SELinux 初探
- 16.1 什么是程序 (process)
- 16.2 工作管理 (job control)
- 16.3 程序管理
- 16.4 特殊文件與程序
- 16.5 SELinux 初探
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考資料與延伸閱讀
- 第十七章、認識系統服務 (daemons)
- 17.1 什么是 daemon 與服務 (service)
- 17.2 通過 systemctl 管理服務
- 17.3 systemctl 針對 service 類型的配置文件
- 17.4 systemctl 針對 timer 的配置文件
- 17.5 CentOS 7.x 默認啟動的服務簡易說明
- 17.6 重點回顧
- 17.7 本章習題
- 17.8 參考資料與延伸閱讀
- 第十八章、認識與分析登錄文件
- 18.1 什么是登錄文件
- 18.2 rsyslog.service :記錄登錄文件的服務
- 18.3 登錄文件的輪替(logrotate)
- 18.4 systemd-journald.service 簡介
- 18.5 分析登錄文件
- 18.6 重點回顧
- 18.7 本章習題
- 18.8 參考資料與延伸閱讀
- 第十九章、開機流程、模塊管理與 Loader
- 19.1 Linux 的開機流程分析
- 19.2 核心與核心模塊
- 19.3 Boot Loader: Grub2
- 19.4 開機過程的問題解決
- 19.5 重點回顧
- 19.6 本章習題
- 19.7 參考資料與延伸閱讀
- 第二十章、基礎系統設置與備份策略
- 20.1 系統基本設置
- 20.2 服務器硬件數據的收集
- 20.3 備份要點
- 20.4 備份的種類、頻率與工具的選擇
- 20.5 鳥哥的備份策略
- 20.6 災難復原的考慮
- 20.7 重點回顧
- 20.8 本章習題
- 20.9 參考資料與延伸閱讀
- 第二十一章、軟件安裝:源代碼與 Tarball
- 20.1 開放源碼的軟件安裝與升級簡介
- 21.2 使用傳統程序語言進行編譯的簡單范例
- 21.3 用 make 進行宏編譯
- 21.4 Tarball 的管理與建議
- 21.5 函數庫管理
- 21.6 檢驗軟件正確性
- 21.7 重點回顧
- 21.8 本章習題
- 21.9 參考資料與延伸閱讀
- 第二十二章、軟件安裝 RPM, SRPM 與 YUM
- 22.1 軟件管理員簡介
- 22.2 RPM 軟件管理程序: rpm
- 22.3 YUM 線上升級機制
- 22.4 SRPM 的使用 : rpmbuild (Optional)
- 22.5 重點回顧
- 22.6 本章習題
- 22.7 參考資料與延伸閱讀
- 第二十三章、X Window 設置介紹
- 23.1 什么是 X Window System
- 23.2 X Server 配置文件解析與設置
- 23.3 顯卡驅動程序安裝范例
- 23.4 重點回顧
- 23.5 本章習題
- 23.6 參考資料與延伸閱讀
- 第二十四章、Linux 核心編譯與管理
- 24.1 編譯前的任務:認識核心與取得核心源代碼
- 24.2 核心編譯的前處理與核心功能選擇
- 24.3 核心的編譯與安裝
- 24.4 額外(單一)核心模塊編譯
- 24.5 以最新核心版本編譯 CentOS 7.x 的核心
- 24.6 重點回顧
- 24.7 本章習題
- 24.8 參考資料與延伸閱讀