Download presentation
Presentation is loading. Please wait.
1
第 9 章 文字環境的操作
2
本章重點 9-1 如何進入文字模式 9-2 登入、登出、關機 9-3 檔案與目錄的操作 9-4 使用光碟及軟碟機
9-5 在背景執行程序 9-6 排程工作 9-7 打包、壓縮與解壓縮 9-8 其他常用指令
3
前言 雖然 Linux 已經提供了漂亮的 X Window 視窗操作介面, 但有些功能在文字模式下操作 , 卻更顯得方便。因此本章中我們將為您介紹一些在 Linux 文字模式下常用的指令, 讓使用者熟悉文字模式的基本操作方法。
4
9-1 如何進入文字模式 安裝完 Linux 進入 X Window 的圖形模式後, 您可以使用下列幾種方式, 進入文字模式 (稍後會介紹詳細的操作方式): 在 X Window 中開啟文字模式視窗。 切換虛擬主控台進入文字模式。 開機直接進入文字模式。 在本章中, 這三種操作模式我們一律以文字模式來稱呼。
5
9-1-1 在 X Window 中開啟文字模式視窗 我們以預設的 GNOME 桌面環境為例, 在 X Window 下進入文字模式最簡單的方式, 就是按概覽鈕, 切換到應用程式頁次的系統工具類別 , 然後按終端機圖示開啟文字模式視窗: 您會看到有 2 個終端機圖示, 其差別僅在於文字和底色的配置不同罷了。本書將一律採白底黑字的配色。
6
在 X Window 中開啟文字模式視窗 在文字模式視窗中, 可以用 與 鍵來捲動視窗內容。
7
9-1-2 切換虛擬主控台進入文字模式 Linux 主機在主控台 (console) 下提供了 7 個虛擬主控台, 在每一個虛擬主控台中可以執行各自的程式。我們可以在登入 X Window 系統後的任何時間, 按下 來切換到其他的虛擬主控台, 其中的是指 是指 到 的功能鍵:
8
切換虛擬主控台進入文字模式 主控台操作模式就使用者坐在 Linux 主機前直接操作電腦。
9
切換虛擬主控台進入文字模式 您也可以在 X Window 登入畫面一出現的時候, 就按 + + 直接登入文字模式的虛擬主控台。
文字模式虛擬主控台中的鍵盤操作方式與文字模式視窗相似。如果要捲動螢幕內容, 請按 或 鍵即可。
10
9-1-3 開機直接進入文字模式 如果您不習慣在圖形介面下操作, 也可以將系統設定成開機後, 直接在文字模式下登入。
Fedora 以往是以 /etc/inittab 這個檔案來決定開機時執行什麼模式, 但從第 15 版開始改用 /etc/systemd/system/default.target 這個檔案來決定系統預設的模式。Fedora 提供了 2 組常用設定: multi-user:文字模式, 相當於執行 init 3 指令 graphical-user:圖形介面模式, 也就是系統安裝完成時, 預設的執行模式, 相當於執行 init 5 指令
11
開機直接進入文字模式 要設定開機時進入文字模式, 請切換到文字模式虛擬主控台, 並以 root 帳號登入系統, 然後如下操作:
12
開機直接進入文字模式 若爾後想再改回開機時時進入圖形介面, 則可如下操作:
13
開機直接進入文字模式 在文字模式下登入系統後, 若要進入 X Window, 可於指令列執行 startx 指令。而按下 鍵, 亦可切換到其他的虛擬主控台。
14
9-2 登入、登出、關機 Linux 是一個可供多人使用的作業系統, 每個人必須用自己的帳號登入系統, 並在不用的時候登出。此外, 系統管理人員還必須知道如何關閉或重新啟動系統。 本章所介紹的指令, 若指令提示符號為 ~]#", 表示必須使用 root 權限才能執行, 所以請以 root 帳號登入, 或使用 su - 切換為 root 帳號執行這些指令。
15
登入、登出、關機 上一節我們已經將系統設定在文字模式下登入。文字模式下的登入/登出介面與第 7 章所介紹的視窗模式有很大的不同, 底下就來介紹如何在文字模式下登入系統。
16
9-2-1 登入系統 進入 Linux 系統的第一件事情是登入 (login) 系統, 使用者必須先有該主機的帳號才能登入。一個帳號包括使用者名稱和密碼兩個部份 (關於如何建立新的使用者, 請參考第 18-2 節), 使用者必須正確輸入才能進入系統, 登入系統的畫面如下:
17
登入系統
18
登入系統
19
登入系統 到此階段, 使用者算是通過系統的帳號驗證, 成功的進入系統了。但這並不表示可以使用系統所有功能, 還必須視所登入的帳號有多大的權限而定 (關於使用者權限的介紹, 請參考第 18 章)。
20
9-2-2 登出系統的 logout 指令 登出 (logout) 是登入的相對動作, 登入系統後, 若要離開系統, 使用者只要直接下達 logout 指令即可:
21
登出系統的 logout 指令 請特別注意!登出系統之後, 可不要立刻就關機。Linux 是個多人使用的作業系統, 登出系統只是結束自己的工作。如果要關機, 請看接下來介紹的 shutdown 指令。
22
如何查詢指令的用法? 在 Linux 系統中, 如果對某指令的功能不大清楚, 可以使用 man 指令查詢線上說明:
大多數指令的語法, 還可以透過 -h 或 --help 參數查詢。例如 ls 指令的語法可藉由 ls --help 或上述 man ls 指令查得。
23
9-2-3 關機或重新開機的 shutdown 指令
接著系統將依序關閉各項程序及服務。若您的電腦支援軟體關機, 系統會直接關機;若不支援則必須自行關閉電源。
24
關機或重新開機的 shutdown 指令 指定關機時間:加上 time 參數可指定關機的時間; 或設定多久時間後執行 shutdown 指令。time 參數有兩種模式: "hh:mm" 或 "+m"。"hh:mm" 表示幾點幾分關機, 例如 shutdown 10:45 指令表示 10:45 執行 shutdown 指令;"+m" 表示 m 分鐘後關機。範例如下: shutdown 指令只能指定關機的時間, 無法指定日期。若您想在特定的日期關機, 請參考 節搭配 at 指令使用。
25
關機或重新開機的 shutdown 指令 設定關機前的通知訊息:warning-message 參數可指定要送給所有登入使用者看的訊息。範例如下:
26
關機或重新開機的 shutdown 指令 關機後重新開機:-r 參數設定關機之後重新啟動。範例如下:
-k 參數:不會真的關機, 只會送出系統訊息。 -c 參數:取消關機。只有在沒有使用立即關機的參數時 (如 +0 或 now) 才有用。 shutdown 指令不一定要在本機執行, 以 telnet 或 ssh 登入遠端機器時 (請參考 15-2 節), 同樣可執行 shutdown -h now 指令。
27
9-2-4 重新啟動電腦的 reboot 指令 顧名思義, reboot 指令是用來重新啟動系統的。常用的參數如下:
-p 參數:搭配此參數可關機。 -f 參數:立即關機或重新開機, 不等待其他程式結束。 雖然 reboot 指令有幾個參數可以使用, 但一般只需要單獨執行 reboot 指令就可以了。
28
讓 鍵無效 在 Linux 中直接按下 鍵, 也會重新開機。如果您不希望任何人利用這組組合鍵隨意重新啟動電腦, 請刪除 /lib/systemd/system/ctrl-alt-del.target 這個檔案, 就可以讓按 鍵重新開機的功能失效了。
29
9-3 檔案與目錄的操作 在文字模式下, 最常使用的指令便是瀏覽目錄和檔案的指令, 也就是本節要介紹的主題。
30
9-3-1 列出檔案清單的 ls 指令 ls (list) 指令是相當常用的指令, 用來顯示目前目錄中的檔案和子目錄清單。配合參數的使用, 能以不同的方式顯示目錄內容。底下我們列出一些常用的範例: 顯示目前目錄的內容:
31
列出檔案清單的 ls 指令 當執行 ls 指令時, 並不會顯示名稱以 "." 開頭的檔案。因此可加上 "-a" 參數指定要列出這些檔案:
32
.、. .、~ 和 / 在目錄的使用上, 有幾個特別的用法:"." 表示目前目錄, ".." 表示上一層目錄, "/" 表示系統根目錄, "~" 則為使用者家目錄或稱使用者專屬目錄。 其中使用者家目錄, 即使用者登入時所在的目錄。例如 root 使用者的家目錄為 /root, 而 tony 的使用者家目錄為 /home/tony 。
33
列出檔案清單的 ls 指令 以較詳細的格式顯示檔案 (這些顯示格式所代表的意義, 請參考 19-3 節):
34
列出檔案清單的 ls 指令 以 "-s" 參數顯示每個檔案所使用的空間, 並以 "-S" 參數指定依所佔用空間的大小排序:
35
9-3-2 切換目錄的 cd 指令 cd (change directory) 指令可讓使用者切換目前所在的目錄。範例如下:
36
9-3-3 建立目錄的 mkdir 指令 mkdir (make directory) 指令可用來建立子目錄。底下的範例會於所在目錄下建立 source 子目錄:
37
快速輸入指令的方法 在文字模式下操作指令時, 如果需要輸入與之前重複或類似的指令, 您可以按 、 鍵來回復最近執行過的命令。
在文字模式下操作指令時, 如果需要輸入與之前重複或類似的指令, 您可以按 、 鍵來回復最近執行過的命令。 另外當指令輸入到一半, 卻忘記指令名稱或僅記得前幾個字時, 只要按 鍵就能自動完成可能的指令, 若是尚未完成的指令有兩種以上的可能性, 再按第二次 鍵, 系統便會將所有可能的指令都列出來供您參考。關於這些功能的詳細操作方法, 請參閱 22-2 節。
38
9-3-4 刪除目錄的 rmdir 指令 rmdir (remove directory) 指令可用來刪除 "空" 的子目錄:
39
9-3-5 複製檔案的 cp 指令 cp (copy) 指令可以將檔案從一處複製到另一處。一般使用 cp 指令, 將一個檔案複製成另一個檔案或複製到某目錄時, 需要指定原始檔名, 以及目的檔名或目錄。範例如下:
40
複製檔案的 cp 指令 以下筆者舉幾個 cp 指令的參數供您參考: 顯示複製過程:加入 -v 參數可顯示指令執行過程。範例如下:
41
複製檔案的 cp 指令 遞迴複製:加入 - r 參數可同時複製目錄下的所有檔案及子目錄。範例如下:
42
9-3-6 刪除檔案或目錄的 rm 指令 rm (remove) 指令可以刪除檔案或目錄。用法如下: rm 指令的常用參數如下:
43
刪除檔案或目錄的 rm 指令 強迫刪除:使用 -f 參數時, rm 指令會直接刪除檔案, 不再詢問。範例如下:
此版 Fedora 的一般使用者在刪除檔案時並不會詢問是否確定要刪除, 您可用 root 身份編輯 /etc/bashrc 檔, 在最後面加上下列內容:
44
刪除檔案或目錄的 rm 指令 一般使用者重新登入後, 使用 rm 指令刪除檔案時就會詢問是否確定要刪除。
45
刪除檔案或目錄的 rm 指令 強制刪除指定目錄:當您使用 -r 參數刪除目錄時, 若該目錄下有許多子目錄及檔案, 則系統可能會不斷的詢問, 以確認您的確要刪除目錄或檔案。若已確定要刪除所有目錄及檔案, 則可使用 -rf 參數, 如此一來, 系統將直接刪除該目錄中所有的檔案及子目錄, 不會再一一詢問: 顯示刪除過程:使用 -v 參數。
46
9-3-7 顯示畫面暫停的 more 指令 為了避免畫面顯示瞬間就閃過去, 使用者可以使用 more 指令, 讓畫面在顯示滿一頁的時候暫停, 此時可按空白鍵繼續顯示下一個畫面, 或按 鍵停止顯示。 當用 ls 指令查看檔案列表時, 若檔案太多, 則可配合 more 指令使用:
47
顯示畫面暫停的 more 指令 單獨使用 more 指令時, 可用來顯示文字檔的內容:
less 指令也具有讓畫面暫停的功能, 並且可以使用 、 鍵捲動畫面。
48
9-3-8 顯示檔案內容的 cat 指令 cat (concatenate) 指令可以顯示檔案的內容 (經常和 more 指令搭配使用), 或是將數個檔案合併成一個檔案。範例如下: 逐頁顯示 preface.txt 的內容:
49
顯示檔案內容的 cat 指令 將 preface.txt 附加到 outline.txt 檔案之後:
將 news.txt 和 info.txt 合併成 readme.txt 檔: 關於 "|"、 ">" 與 ">>" 的用法, 節還會再說明。
50
實務經驗談 cat 指令也可以配合 less 指令來使用, 除了可以分頁顯示、往前頁或後頁查閱, 還可以使用 "/" 來搜尋關鍵文字, 相當方便。
51
9-3-9 搬移或更改檔案、目錄名稱的 mv 指令 mv (move) 指令可以將檔案及目錄搬移到另一目錄下, 或更改檔案及目錄的名稱。範例如下:
52
顯示目前所在目錄的 pwd 指令 pwd (print working directory) 指令可顯示使用者目前所在的目錄。範例如下:
53
何時需要使用 pwd 指令呢? 在 Linux 下其實有很多相同的目錄名稱, 只是這些目錄分別位於不同的目錄之下。例如/usr/local/etc 與 /etc 目錄, 但提示符號通常只會列出目前所在的那個子目錄名稱, 如此無論是在 /usr/local/etc 或 /etc 看到的都是 "etc"!此時就可以使用 pwd 指令查得實際所在的目錄, 以免執行了錯誤的程式, 或是在錯誤的目錄下遍尋不到想找的檔案。
54
尋找檔案的 locate 指令 locate 指令可用來搜尋名字中包含指定條件字串的檔案或目錄。範例如下:
55
尋找檔案的 locate 指令 由於 locate 指令是從系統中儲存檔案及目錄名稱的資料庫中搜尋檔案, 雖然系統會定時更新資料庫, 但對於剛新增或刪除的檔案、目錄, 仍然可能會因為資料庫尚未更新而無法查得, 此時可以 root 帳號執行 updatedb 指令更新, 維持資料庫的內容正確。 第一次執行 locate 指令時, 可能會因為資料庫尚未建立, 會出現無法開啟資料庫的錯誤訊息。此時請先以 root 帳號執行 updatedb 指令建立資料庫, 再執行 locate 指令搜尋檔案。
56
搜尋字串的 grep 指令 grep 指令可以搜尋特定字串並顯示出來, 一般用來過濾先前的結果, 避免顯示太多不必要的資訊。範例如下:
57
搜尋字串的 grep 指令
58
搜尋字串的 grep 指令 若您是使用一般權限的使用者執行, 上例的輸出結果會包含許多如 "拒絕不符權限的操作" 之類的錯誤訊息, 可使用 -s 參數消除:
59
如何讓 grep 搜尋所有子目錄? grep 只能搜尋目前目錄下的檔案, 不包含子目錄。如果想要搜尋所有子目錄內的檔案, 必須加上 "-R" 參數, 例如 grep -R text *.conf。
60
重導與管線 重導 (redirect) 可將某指令的結果輸出到檔案中, 它有兩種用法:">" 和">>"。 ">" 可將結果輸出到檔案中, 該檔案原有內容會被刪除;">>" 則將結果附加到檔案中, 原檔案內容不會被清除。範例如下:
61
重導與管線 管線 (pipe) 指令的符號是 "|", 可將某指令的結果輸出給另一指令, 以下範例將 ls 指令的輸出結果傳給 grep 指令過濾:
62
重導與管線 再舉一個刪除檔案或目錄的例子, 我們可以利用 yes 指令會重複輸出 "y" 字元的特性, 將結果傳給 rm 指令, 如此即可省去重複輸入 "y" 的麻煩:
63
9-4 使用光碟機及軟碟機 在 Linux 的文字模式下要使用光碟或磁片, 並不是只將光碟或磁片放入即可, 使用者需要執行掛載的指令, 才可讀寫資料。本節將介紹如何在文字模式下, 使用光碟與磁片。 在第 7 章我們曾提到過, 所謂掛載, 就是將儲存媒體 (如光碟或磁片), 指定成系統中的某個目錄 (如 /mnt、/media/cdrom 或 /media/floppy)。透過直接存取此掛載目錄, 即可讀寫儲存媒體中的資料。以下我們就來看看, 在文字模式下的掛載及卸載指令。
64
X Window 下光碟的掛載目錄 在 X Window 下系統可自動掛載光碟片, 存取方式請參考 7-6 節的說明。其中光碟片的掛載點是自動產生的, 卸載後即會移除該目錄。光碟片通常掛載在 "/run/media/ 使用者名稱/光碟的標籤名稱" 目錄, 例如 /run/media/tony/mybackup 或是 /run/media/tony/我的光碟。
65
9-4-1 掛載的 mount 指令 由於 Linux 作業系統只允許 root 身份執行 mount 指令, 所以請您以 root 帳號來執行以下的操作。 以下筆者要將光碟掛載在 /media/cdrom 目錄, 但預設並沒有此目錄, 故請自行以 mkdir /media/cdrom 指令建立。要使用光碟片時, 請先把光碟片放入光碟機, 然後執行掛載的 mount 指令, 將光碟片掛載至系統中:
66
掛載的 mount 指令 若您的系統已登入 X Window 環境, 將光碟片放入光碟機中, 系統便會自動掛載光碟片, 就不需執行上述指令了。 同理, 使用磁片之前也和光碟一樣, 要先掛載後方能使用。請先建立 /media/floppy 目錄, 然後輸入以下指令:
67
掛載的 mount 指令 成功掛載光碟或磁片之後, 即可透過存取該目錄, 來讀寫碟片上的資料:
68
9-4-2 卸載的 umount 指令 如果不需要使用光碟片, 則需先執行卸載的 umount 指令後, 才能取出光碟片:
69
為何無法成功卸載光碟片 手動掛載光碟片後, 按下光碟機上面的退出鈕, 並無法退出光碟片, 必須先將光碟片卸載後, 方能退出光碟片。
若您目前所在之處就是光碟片掛載的目錄 (如 /media/cdrom), 或有其他使用者正在此目錄下, 將無法成功地卸載它, 當然也不能退出光碟片:
70
為何無法成功卸載光碟片 請先將工作目錄切換到別處, 或要求其他使用者離開此目錄, 才可卸載目錄並退出光碟片。而更換光碟片之後, 記得要將光碟片再次掛載才能使用。 如果您不確定是誰正在使用該目錄, 請執行 fuser -u /media/cdrom/ 指令, 便可以查出使用該目錄的程序與使用者。 在 X Window 中, 系統會自動掛載/卸載光碟, 無需另外執行卸載指令。
71
9-4-3 允許一般使用者掛載光碟或磁片 Linux 作業系統預設只允許 root 使用者才能執行 mount 指令, 若是一般使用者執行上述指令, 則會出現以下的錯誤訊息:
72
允許一般使用者掛載光碟或磁片 若您確定要開放一般使用者掛載光碟或磁片, 請以 root 使用者執行 visudo 指令如下修改 (預設會以 vi 編輯器開啟 /etc/sudoers 檔):
73
允許一般使用者掛載光碟或磁片 存檔離開後, 一般使用者要掛載或卸載光碟或磁片時, 只要在原來的 mount 及 umout 指令最前面加上 sudo 即可。亦即掛載時使用 sudo mount /dev/cdrom /media/cdrom;而卸載則是使用 sudo umount /media/cdrom。
74
掛載其他種類的儲存媒體 mount 指令除了可掛載光碟之外, 也可掛載硬碟分割區、USB 隨身碟、數位相機...等 (第 11 章會進一步介紹)。例如 /dev/sda1 (第 1 顆硬碟的第一個主要分割區) 是採用 Windows 的 NTFS 檔案系統, 可執行以下指令掛載:
75
掛載其他種類的儲存媒體 執行上述指令前, 您需先建立要掛載的目錄 (此例為 /media/windows )。
若要掛載 FAT32 檔案系統的分割區, 可用 -t vfat 參數指定檔案系統種類。
76
9-5 在背景執行程序 使用者有時候執行的程序可能要花很多時間, 如果將它放在前景執行, 將導致無法繼續做其他事情, 最好的方法就是將它放在背景執行。甚至可能希望在使用者登出系統後, 程序還可以繼續執行。讓我們看看如何達成此一目的。
77
9-5-1 在背景執行程序的 &、bg 指令 將程序放到背景執行最簡單的方法, 就是在指令最後加上 "&", 範例如下: 或者如下操作:
78
9-5-2 前景執行程序的 fg 指令 如果使用者目前有程序在背景執行中, 使用者可以下達 fg 指令, 將它從背景中移到前景執行:
79
9-5-3 於登出後讓程序繼續執行的 nohup 指令
nohup (no hangup) 指令可讓使用者登出系統後, 程序繼續執行。範例如下: 然後使用者就可登出。當再登入時, 可用 ps -aux 指令看到程序仍在背景中執行 (關於 ps 指令的解說請看第 節)。
80
Linux 指令常放置的位置 其實 Linux 系統提供的指令極多, 而且不同的 Linux 系統提供的指令和用法也有出入 , 有興趣的讀者可參考旗標出版的『Linux 指令詳解辭典』 , 或請自行執行 echo $PATH 指令檢視 PATH 參數所設定的目錄有那些 (一般至少有 /bin 、/usr/bin、/usr/local/bin), 再到這些目錄看看它提供了哪些檔案:
81
Linux 指令常放置的位置
82
9-6 排程工作 電腦有很多程式需要自動啟動或是週期性地被執行, 例如開機後自動啟用郵件服務、清理硬碟中不要的暫存檔、備份系統資料...等。
另外, 有時遇到某些工作需要延後執行, 或是在未來已確定的時間執行, 例如已知某日即將停電, 便可先設定讓系統在停電之前, 先行關機。對於這些重複性或是需要指定時間的工作, 其實不必感到困擾。您可利用本節所介紹的指令, 輕輕鬆鬆完成想要執行的工作。
83
9-6-1 排程的 crond 常駐指令 crond 是 Linux 用來定期執行程式的常駐指令。當安裝完成作業系統之後, 預設便會啟動此排程指令。crond 每分鐘會定期檢查是否有要執行的工作, 如果有要執行的工作, 便會自動執行該工作。而 Linux 所排程的工作主要分成以下 2 類: 系統執行的工作:系統週期性所要執行的工作, 如備份系統資料、清理暫存檔等, 這些工作通常由系統管理者安排。 個人執行的工作:某個使用者定期想做的工作, 例如每隔 10 分鐘就檢查郵件伺服器是否有新的信, 這些工作可由每個使用者自行設定。
84
9-6-2 排程設定檔的寫法 在介紹如何排程前, 讀者需先了解排程設定檔的寫法, 其格式如下: 而每個欄位所代表的意義如下表所示:
85
排程設定檔的寫法
86
排程設定檔的寫法 在這些欄位裏, 除了 "Command" 是每次都必須指定的欄位以外, 其他欄位皆可視需求自行決定是否指定。對於不指定的欄位, 請填上 "*" 即可。以下筆者就介紹幾個常用的範例:
87
排程設定檔的寫法 指定每小時的第 1 分鐘執行 program -a -b -c 指令:
88
排程設定檔的寫法 指定每天的 4 點 20 分執行 program 指令: 指定每月 9 日的 3 點 50 分執行 program 指令:
89
排程設定檔的寫法 指定每年的 9 月 8 日 0 點 1 分執行 program 指令:
90
排程設定檔的寫法 如果您要同時指定多個不連續的時間, 則可在時間跟時間之間用 ", " 區隔開來。如以下範例指定每月 1 日及 15 日的 2 點 20 分執行 program 指令:
91
排程設定檔的寫法 如果要指定連續的時間, 則可用 "-" 連接兩段時間。例如以下範例指定每天 1 點至 4 點的第 25 分鐘執行 program 指令:
92
排程設定檔的寫法 若要指定週期性的時間, 則可用 "/" 加上 "時間間隔" 指定。例如以下範例指定每隔 10 分鐘執行一次 program 指令:
93
排程設定檔的寫法 指定每月隔 10 天的 5 點 35 分執行一次 program 指令:
94
9-6-3 排程的系統工作 /etc/crontab 檔是 Linux 系統工作的排程設定檔, 可如下設定:
95
排程的系統工作
96
排程的系統工作
97
排程的系統工作 在上述的系統工作排程設定檔中, crond 排程指令會每小時、每天、每週及每月執行一次 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 及 /etc/cron.monthly 目錄中的所有設定檔。有興趣的讀者可自行瞭解這些目錄下的設定檔, 筆者在此就不再說明。 crond 還會執行 /etc/cron.d 目錄下的檔案, 讀者可自行了解該目錄下的設定檔。
98
9-6-4 排程的個人工作 除了上述排程的系統工作以外, 所有使用者則可利用 crontab 指令, 自行設定要定期執行的工作。
99
使用者新增排程工作 每個使用者可執行 crontab -e 指令, 編輯自己的排程設定檔, 並在此檔加入要定期執行的工作。以下範例為 tony 使用者編輯自己的排程設定檔:
100
使用者新增排程工作 執行上述指令後, 即會進入 vi 文書編輯器 (有關 vi 文書編輯器的使用方法, 請參考 14-3 節), 接下來即可自行編輯排程的工作。 例如以下範例指定每天的 14 點 55 分執行 tar czvf backup/backup.tar work/* 指令 (有關打包與壓縮的 tar 指令, 請參考 節), 將其家目錄中 work 子目錄下的所有檔案, 打包並壓縮後, 備份到其家目錄中 backup 子目錄下:
101
使用者新增排程工作 如果您不習慣使用預設的 v i 文書編輯器, 例如想改用 nano 編輯, 可執行 export VISUAL=nano 指令, 將預設的文書編輯器改為 nano。 而 crond 指令在 14 點 55 分執行了 tony 使用者指定的指令之後, 便會將輸出結果或錯誤訊息, 以 寄送給該使用者。例如以下為 tony 使用者所收到執行結果郵件的內容:
102
使用者新增排程工作
103
使用者新增排程工作
104
使用者檢視目前排程的工作 要知道目前自己排程的工作, 可執行 crontab -l 指令查詢:
105
使用者刪除排程的工作 如果不想再定期執行排程中的工作, 則可執行 crontab -r 指令刪除所有排程的工作:
106
系統管理者可管理所有使用者排程的工作 root 系統管理者除了可執行上述的 crontab 指令, 設定自己的程排工作外, 亦可管理一般使用者的排程工作, 例如執行以下指令即可編輯 tony 使用者的排程工作: 同理, 系統管理者也可執行 crontab -l -u tony 指令列出 tony 使用者目前排程的工作;執行 crontab -r -u tony 指令刪除 tony 使用者所有排程的工作。
107
個人排程設定檔擺放的位置 每個使用者排程工作的設定檔會被儲存在 /var/spool/cron 目錄下, 以帳號名稱為檔名。例如 tony 使用者的排程設定檔即為 /var/spool/cron/tony 檔。不過這些設定檔只允許 root 系統管理者讀寫, 一般使用者並沒有權限讀取此排程設定檔。
108
9-6-5 排程程式的輸出結果 crond 指令預設會將執行的結果及錯誤訊息, 以 的方式寄給要求執行的使用者。您如果不想收到這些郵件, 可加入以下所述的內容, 將執行結果導向到一個記錄檔:
109
排程程式的輸出結果 而下例則會將執行結果及錯誤訊息, 全部導向指定的記錄檔:
110
排程程式的輸出結果 而最後這個範例將不會儲存所有執行結果及錯誤訊息:
111
9-6-6 僅執行一次的排程 at 指令 除了前面說明的 crond 指令外, Linux 還有一個 at 指令可以設定排程, 指定在某一時間進行工作。
112
設定排程工作 以下我們用指定關機日期的範例, 來介紹 at 指令的用法:
113
實務經驗談 crond 與 at 都可以設定排程, 那麼兩者有什麼不同呢?一般來說, crond 指令適合需要週期性執行的工作, 如每天進行備份。 而如果是僅需執行一次的工作, 例如筆者收到通知, 星期天上午 10 點辦公室會停電, 可是當天不上班, 那麼就可以如上述段落的說明, 使用 at 指令配合 shutdown 指令設定排程, 讓系統在停電前關機。
114
查詢及刪除排程工作 設定好的排程如果臨時變更, 或想查詢或刪除排程呢?接著我們就要介紹, 可以查詢 at 指令所設定排程的 atq 指令, 及可以刪除排程的 atrm 指令:
115
查詢及刪除排程工作 若想刪除排程工作, 可以用 atrm 指令:
atq 及 atrm 指令, 也可以分別用 at -l 及 at -d 來代替。詳細的指令用法, 您可以用 man at 指令來查詢, 或是參考旗標公司出版的『 Linux 指令詳解辭典』。
116
9-6-7 設定開機自動啟動的服務 若您希望 Linux 開機後便自動啟動某些系統服務, 如網頁或郵件伺服器時, 這些服務都位於 /lib/systemd/system 目錄下。您可使用如下的格式來設定開機要自動開啟的服務: 例如筆者要設定開機自動啟動 VSFTPD 伺服器:
117
9-6-8 指定開機自動執行的程式 如果您希望當 Linux 啟動時, 就能自動執行某些程式, 則請將要執行的程式寫入 /etc/rc.d/rc.local 檔案 (預設並不存在)。例如我們希望 Linux 啟動時, 便自動執行 program 指令, 請以 root 帳號用文書編輯器建立 /etc/rc.d/rc.local 檔案:
118
指定開機自動執行的程式 接著如下設定讓 /etc/rc.d/rc.local 可以被執行:
119
9-7 打包、壓縮與解壓縮 在 Linux 的世界中, 大部分的程式都是以壓縮檔的形式散佈。所以我們常常會看到一些以 .tar.gz, .tgz, .gz 或 .bz2 為副檔名的檔案。這些檔案都是使用各種不同壓縮程式所製作出來的壓縮檔, 我們從網路上取得這樣的檔案之後, 都要先解壓縮才能安裝使用。 由於這是每個 Linux 使用者經常會用到的基本功能, 因此筆者將在這一節中介紹最常見到的打包、壓縮和解壓縮程式。以後再遇到這些檔案時, 就知道該如何處理了。
120
9-7-1 打包檔案的 tar 指令 tar 指令位於 /bin 目錄中, 它能將使用者所指定的檔案或目錄打包成一個檔案, 不過它並不做壓縮。一般 Unix 上常用的壓縮方式是先用 tar 指令將許多檔案打包成一個檔案, 再以 gzip 等壓縮指令壓縮成 xxx.tar.gz (或稱為 xxx.tgz ) 的檔案。
121
打包檔案的 tar 指令 tar 指令的參數繁多, 您可執行 tar --help 指令得到各參數的語法及大致說明。以下列舉常用參數作說明:
-c:建立一個新的 tar 檔。 -v:顯示運作過程的資訊。 -f:指定檔案名稱。 -z :呼叫 gzip 壓縮指令執行壓縮、解壓縮。 -j :呼叫 bzip2 壓縮指令執行壓縮、解壓縮。 -t :檢視壓縮檔案內容。 -x :解開 tar 檔。
122
打包檔案的 tar 指令 在此先舉一些最常用的範例: 以下就其各種功能分別解說。
123
壓縮與解壓縮 tar 指令本身沒有壓縮能力, 但是我們可以在產生 tar 檔案後, 立即使用其他壓縮指令來壓縮或解壓縮, 省去需要輸入兩次指令的麻煩: 使用 -z 參數來解開最常見的 .tar.gz 檔案: 使用 -j 參數解開 tar.bz2 壓縮檔:
124
壓縮與解壓縮 使用 -Z (大寫) 參數指定以 compress 指令壓縮, 或以 uncompress 指令解壓縮 tar 檔:
125
壓縮與解壓縮 使用 --totals 參數可在打包完成後, 顯示寫入的 bytes 數:
126
打包與解開 tar 的主要功能在於打包和解開, 讓我們看看其他相關參數的運作:
使用 --atime-preserve 參數, 可將解開後的檔案以原來的檔案時間存檔:
127
打包與解開 使用 -h 參數指定打包檔案時, 若遇到符號連結 (symbolic link, 請參考 19-5 節) 時, 要儲存符號連結所連結的檔案, 而不是符號連結本身:
128
更新與刪除 暸解了打包和解開的方法後, 接著看看如何針對部份檔案做更新與刪除的處理, 請看以下範例說明:
使用 --delete 參數刪除 .tar 檔中的檔案:
129
更新與刪除 使用 -r 參數將檔案附加到 tar 檔裡面: 使用 -k 參數解開 tar 檔案時, 不覆蓋已存在的檔案:
130
更新與刪除 使用 --remove-files 參數將檔案移入 tar 檔案中, 並移除原檔案:
131
9-7-2 壓縮與解壓縮的 zip 和 unzip 指令
在 Linux 中有許多不同的壓縮及解壓縮程式, 接下來介紹的是處理 .zip 檔的 zip 和 unzip 指令。這 2 個指令位於 /usr/bin 目錄中 , 它們和 DOS 下的 pkzip、pkunzip 以及 Windows 的 WinZip 軟體功能一樣, 可將檔案壓縮成 .zip 檔以節省磁碟空間, 而當需要使用的時候, 再將壓縮檔解開。
132
壓縮 .zip 檔案的 zip 指令 zip 指令可用來壓縮檔案, 如果我們有許多檔案需要做壓縮, zip 指令甚至可以將它們一併處理並壓縮成一個檔案。一般 zip 指令最常用的方法, 是依序在指令後加上壓縮後的指定檔名, 以及要壓縮的檔案。 若不清楚 zip 指令的執行參數, 可直接執行 zip 指令, 顯示版權與語法說明:
133
壓縮 .zip 檔案的 zip 指令 以下筆者舉幾個常用的範例: 壓縮指定的檔案 (可同時指定不同副檔名的檔案):
134
壓縮 .zip 檔案的 zip 指令 使用 -g 參數可壓縮指定的檔案, 並加入已存在的壓縮檔中:
135
壓縮 .zip 檔案的 zip 指令 使用 -j 參數壓縮時, 只會加入檔案的名稱及內容, 不會包含目錄結構:
136
壓縮 .zip 檔案的 zip 指令 使用 -r 參數, 可在壓縮時包含所有子目錄下的內容:
137
解壓縮 .zip 檔的 unzip 指令 unzip 指令用來將 zip 指令壓縮產生的檔案解壓縮。您同樣可不加任何參數, 直接執行 unzip 指令, 取得參數及使用說明, 接下來讓我們看一些常用的範例: 將檔案全部解壓縮:
138
解壓縮 .zip 檔的 unzip 指令 將檔案解壓縮至某個目錄下:
要解壓縮時, 若原來的檔案已存在目錄中, 就不解壓縮;若不存在, 才解壓縮:
139
解壓縮 .zip 檔的 unzip 指令 解壓縮時不要依照原來的目錄結構, 而將檔案置於目前目錄:
140
實務經驗談 雖然文字檔可以在各系統中通用, 但在 Windows/DOS 下, 文字檔的換行符號與 Linux 並不相同。一般文書編輯器與軟體皆可同時接受這兩種格式, 不過若是 script/CGI 程式檔, 可能會因為格式錯誤無法正常執行。 所以若您先在 Windows 下使用 Winzip 等軟體將 script/CGI 程式檔解壓縮, 再上傳到 Linux 主機, 可能會因為軟體自動將換行符號轉換成 Windows/DOS 格式, 而導致無法在 Linux 上執行, 故筆者建議您盡量使用 tar、unzip 等 Linux 程式進行解壓縮。
141
9-7-3 壓縮與解壓縮的 gzip 和 gunzip 指令
除了 .zip 檔的壓縮格式外, 在 Linux 系統下更常見的是 .gz 檔的壓縮格式, 這種檔案一般是由 gzip 指令所產生。由於 zip 指令能將許多檔案壓縮成一個檔案功能, 但 gzip 不能, 所以 gzip 一般會和 tar 合併使用。 目前大部分的壓縮檔大都是用 tar 將所有檔案包裝成一個檔案, 再用 gzip 做壓縮, 所以當我們看到副檔名為 .tar.gz 或 .tgz 者, 大多就是這類型的檔案。
142
壓縮檔案的 gzip gzip 和 zip 同為壓縮指令, 有了前面的基礎, 要使用 gzip 應該事半功倍。使用 gzip -h 可得到指令的參數及語法說明, 現在讓我們看看一些範例。 壓縮及解壓縮:
143
壓縮檔案的 gzip 解壓縮時, 使用 -f 參數, 可強迫覆蓋輸出檔案, 不要提示詢問訊息:
144
解壓縮 .gz 檔的 gunzip gunzip 的用法與 gzip 一樣, 它們擁有相同的指令列選項。其實 gunzip 與 gzip 基本上是同一支程式, 只是預設選項不同而已。讀者可以把 gunzip 視為 gzip -d 指令。因此筆者在此就不多作介紹。
145
9-7-4 壓縮與解壓縮的 bzip2 和 bunzip2 指令
在網路上還有一種 *.tar.bz2 的壓縮檔, 可能有不少人會很疑惑 bz2 是什麼程式壓縮的?答案是 bzip2。這種壓縮檔的壓縮能力較好, 通常會拿來壓縮系統 kernel 或 patch 檔。*.tar.bz2 的解壓縮方法如下: bzip2 與 bunzip2 在功能、參數的用法上與 gzip 幾乎一樣, 請您參考上一節來使用這個壓縮程式。
146
9-8 其他常用指令 Linux 可用的指令相當多, 本節再列舉幾個說明, 在爾後的章節中, 還會接觸到許多其他的指令。
147
9-8-1 修改密碼的 passwd 指令 passwd (password) 指令可讓使用者變更密碼。範例如下:
為了安全理由, 所輸入的密碼並不會顯示在螢幕上。
148
修改密碼的 passwd 指令 以下幾種狀況會出現密碼輸入錯誤的訊息: 輸入密碼太短, 會出現以下訊息: 輸入的密碼過於簡單:
149
修改密碼的 passwd 指令 重複的字元太多: 兩次輸入的密碼不同:
150
修改密碼的 passwd 指令 容易遭受字典攻擊的密碼: 輸入的密碼並不會顯示出來, 筆者是為了解說方便才列出來。
151
字典攻擊 舊版 Linux 不支援 MD5 編碼, 當時基本上只能使用最長 8 個字元的密碼, 依循 DES (Data Encryption Standard, 資料加密標準) 規則採用單向加密法, 每個密碼的編碼結果依編碼時所使用的 2 字元 Slat 參數的不同, 而有 4096 種變化。存放密碼的檔案是 /etc/passwd 檔, 此檔的預設權限是允許任何人讀取。
152
字典攻擊 雖然密碼的部份經過加密編碼, 卻無法阻擋有心破解的怪客。基於一般人習慣使用好記的常用字彙當做密碼, 怪客會節錄字典上的常用字 (普通英文字典一本約有十萬個單字), 然後把每個單字都進行編碼運算, 先計算出 4096 種可能的編碼, 再將這些結果與密碼檔 /etc/passwd 內的密碼編碼相互比對, 發現吻合則可得知密碼。這種利用字典來破解密碼的手段, 被稱做字典攻擊。
153
字典攻擊 由於 /etc/passwd 檔案內還有 UID (User ID, 使用者識別碼) 和 GID (Group ID, 群組識別碼) 的資訊, 必須能讓所有使用者讀取此檔, 系統方可正常運作, 所以不應該去限制此檔的讀取權限。 而當投影密碼啟動之後, 密碼將不再存放於 /etc/passwd 檔內, 而變成存放在 /etc/shadow 檔案裡, 這個檔案僅容許 root 帳號讀取, 因而有效地解決了這個問題。
154
9-8-2 顯示與設定時間的 date、clock 和 ntpdate 指令
clock 指令也可以顯示出系統目前的日期與時間 (不過 clock 指令預設不允許一般使用者執行, 請用 root 帳號執行):
155
顯示與設定時間的 date、clock 和 ntpdate 指令
如果您的系統時間不正確而想更改時, 可以使用 date 指令來設定時間!請用 root 帳號如下操作: 有時候您可能會苦於不知道標準時間為何!沒關係, 目前網路上也有校時伺服器提供標準時間, 可供使用者校正自己主機的時間, 如中央研究院計算中心校時伺服器的網址為 stdtime.sinica.edu.tw。
156
顯示與設定時間的 date、clock 和 ntpdate 指令
因此您可執行 ntpdate 指令, 將系統時間設成與校時伺服器一致 (請參考第17 章的說明安裝 ntpdate):
157
顯示與設定時間的 date、clock 和 ntpdate 指令
然後您再執行一次 date 指令, 就會發現系統時間已經更改。不過這樣還沒有結束, 我們還需要執行 clock -w 指令將更改的時間寫入電腦的 CMOS 中, 如此下次開機時才會使用更改過的時間:
Similar presentations