首次進入 Linux 的開機、關機與指令下達方式的介紹,只是基本的介紹,後面章節才有更詳細的解說喔!
終於可以開始使用Linux這個有趣的系統了!由於Linux系統使用了非同步的磁碟/記憶體資料傳輸模式,同時又是個多人多工的環境, 所以你不能隨便的不正常關機,關機有一定的程序喔!錯誤的關機方法可能會造成磁碟資料的損毀呢! 此外,Linux有多種不同的操作方式,圖形介面與文字介面的操作有何不同? 我們能否在文字介面取得大量的指令說明,而不需要硬背某些指令的選項與參數等等。這都是這一章要來介紹的呢!
登入系統有這麼難嗎?並不難啊!雖然說是這樣說,然而很多人第一次登入Linux的感覺都是『接下來我要幹啥?』如果是以圖形介面登入的話,或許還有很多好玩的事物, 但要是以文字介面登入的話,面對著一片黑壓壓的螢幕,還真不曉得要幹嘛呢!為了讓大家更瞭解如何正確的使用Linux, 正確的登入與離開系統還是需要說明的!
開機就開機呀!怎麼還有所謂的登入與離開呀?不是開機就能夠用電腦了嗎? 開什麼玩笑,在Linux系統中由於是多人多工的環境,所以系統隨時都有很多不同的用戶所下達的任務在進行, 因此正確的開關機可是很重要的!不正常的關機可能會導致檔案系統錯亂,造成資料的毀損呢!這也是為什麼通常我們的Linux主機都會加掛一個不斷電系統囉!
如果在第三章一切都順利的將CentOS 7.x完成安裝並且重新開機後, 應該就會出現如下的等待登入的圖形畫面才對。畫面中1號箭頭顯示目前的日期與時間,2號箭頭則是輔助功能、語系、音量與關機鈕, 3號箭頭就是我們可以使用帳號登入的輸入框框,至於4號箭頭則是在使用特別的帳號登入時才會用到的按鈕。
接下來讓我們來了解一下這個登入畫面的相關功能吧!首先,在箭頭 1 的地方,如果你動滑鼠過去點一下,就會出現如下的視窗, 主要在告訴你日期、日曆與時間而已~如下圖所示,鳥哥擷取這張圖的時間就是在 2015/05/21 早上喔!
然後看一下右上角的角落,你會發現有個小人形圖示,那個是協助登入的無障礙畫面處理!如果你的鍵盤暫時出了點問題,某些按鍵無法按, 那就可以使用如下畫面的『螢幕鍵盤』的項目,將他 On 一下~那未來有需要在登入的時候有打字的需求時,螢幕就會出現類似手機要你打字的鍵盤畫面啦!
有看到那個 zh 嘛?那個是語系的選擇~點下去你會看到這部系統支援的語系資料有多少。至於那個類似喇叭的小圖示,就是代表著音效的大小聲控制~ 而最右邊那個有點像是關機的小圖示又是幹麻的呢?沒關係!別緊張!用力點下去看看~就會出現如下圖示,其實就是準備要關機的一些功能按鈕~ 暫停是進入休眠模式,重新啟動就是重新開機啊,關閉電源當然就是關機囉!所以,你不需要登入系統,也能夠透過這個畫面來『關機』喔!
接下來看到圖4.1.1的地方,圖示中的箭頭 3,4 指的地方就是可以登入的帳號!一般來說,能夠讓你輸入帳密的正常帳號, 都會出現在這個畫面當中,所以列表的情況可能會非常長!那有些特殊帳號,例如我們在第三章安裝過程中,曾經有建置過兩個帳號, 一個是 root 一個是 dmtsai,那個 dmtsai 可以列出來沒問題,但是 root 因為身份比較特殊,所以就沒有被列出來!因此, 如果你想要使用 root 的身份來登入,就得要點選箭頭 4 的地方,然後分別輸入帳密即可!
如果是一般可登入正常使用的帳號,如畫面中的 dmtsai 的話,那你就直接點選該帳號,然後輸入密碼即可開始使用我們的系統了! 使用 dmtsai 帳號來輸入密碼的畫面示意如下:
在你輸入正確的密碼之後,按下『登入』按鈕,就可以進入 Linux 的圖形畫面中,並開始準備操作系統囉!
在每一個用戶『第一次』以圖形介面登入系統時,系統都會詢問使用者的操作環境,以依據使用者的國籍、 語言與區域等制定與系統預設值不同的環境。如下所示,第一個問題就是詢問你未來整體的環境要使用的語系為哪個語系與國家? 當然我們台灣都選漢語台灣啊 (安裝的時候選擇的預設值),如果有不同的選擇,請自行挑選你想要的環境,然後按下『下一步』即可。
再來則是選擇輸入法,除非你有特殊需求,否則不需要修改設定值。若是需要有其他不同的輸入法,請看下圖左側箭頭指的『+』符號, 按下它就可以開始選擇其他的輸入法了。一切順利的話,請點選『下一步』。
上述的環境選擇妥當之後,系統會出現一個確認的畫面,然後就出現『入門資訊』的類似網頁的畫面來給你瞧一瞧如何快速入門囉!如下所示。 如果你有需要,請一個一個連結去點選查閱,如果已經知道這是啥東西,也可以如畫面箭頭處,直接關閉即可!
終於給他看到圖形介面啦!真是很開心吧!如下圖所示,整個GNOME的視窗大約分為三個部分:
Linux 桌面的使用方法幾乎跟 Windows 一模一樣,你可以在桌面上按下右鍵就可以有額外的選單出現;你也可以直接按下桌面上的『個人資料夾 (home)』, 就會出現類似Windows的『檔案總管』的檔案/目錄管理視窗,裡面則出現你自己的家目錄;底下我們就來談談幾個在圖形介面裡面經常使用的功能與特色吧!
讓我們點擊一下『應用程式』那個按鈕吧!看看下拉式選單中有什麼軟體可用!如下圖所示。
你要注意的是,這一版的 CentOS 在這個應用程式的設計上,階層式變化間並沒有顏色的區分,左側也沒有深色三角形的示意小圖,因此如上圖所示,如果你想要打開計算機軟體, 那得先在左邊第一層先移動到『附屬應用』之後,滑鼠水平橫向移動到右邊,才可以點選計算機喔!鳥哥一開始在這裡確實容易將滑鼠垂直向亂移動,導致老是沒辦法移動到正確的按鈕上!
基本上,這個『應用程式』按鈕已經將大部分的軟體功能分類了,你可以在裡頭找到你常用的軟體來操作。例如想要使用 Office 的辦公室軟體, 就到『辦公』選項上,就可以看到許多軟體存在了!此外,你還會看到最底下有個『活動總覽』,那個並沒有任何分類的子項目在內,那是啥東西? 沒關係,基本上練習機你怎麼玩都沒關係!所以,這時就給他點點看啊!會像底下的圖示這樣:
畫面左側 1 號箭頭處,其實就是類似快速按鈕的地方,可以讓你快速的選擇你所常用的軟體。右側 2 號箭頭處,就是剛剛我們上面談到的虛擬桌面囉! 共有四個,而目前畫面中顯示的最是最上面那個一號桌面的意思。如果細看該區塊,就會發現其實鳥哥在第三個虛擬桌面當中也有打開幾個軟體在操作呢! 有沒有發現啊?至於畫面中的 3 號箭頭處,就是目前這個活動中的虛擬桌面上,擁有的幾個啟動的軟體囉!你可以點選任何你想要的軟體,就可以開始操作該軟體了! 所以使用這個『活動總覽』,比較可以讓你在開好多視窗的環境下,快速的回到你所需要的軟體功能中喔!
如果你想要知道系統上面還有哪些檔案資料,以及你目前這個帳號的基本子目錄,那就得要打開檔案總管囉 (file manager)! 打開檔案總管很簡單,就是選擇左上方那個『位置』的按鈕項目即可。在這個項目中主要有幾個細項可以直接打開目錄的內容,家目錄、下載、圖片、影片等等, 其實除了家目錄之外,底下的次目錄『就是家目錄下的次目錄』啦!所以你可以直接打開家目錄即可!如下所示:
如上圖所示,1 號箭頭處可以讓你選擇不同的目錄或資料來源,2 號箭頭則以小圖示的方式顯示該物件可能是什麼資料,3 號箭頭則可以將目前的小圖示變成詳細資料清單, 4 號箭頭就是目前小圖示的顯示模式,5 號箭頭可以進行圖示資料的放大、縮小、排序方式、是否顯示隱藏檔等重要功能!6 號箭頭則是其他額外的功能項目! 好了,現在讓我們來操作一下這個軟體吧!如果你想要觀察每個檔名的詳細資料,並且顯示『隱藏檔』的話,那該如何處理呢?如下圖所示的方式處理一下:
按照上面的三個步驟點選完畢後,你就會看到如 4 號箭頭處指的,有一些額外的檔名跑出來了!而且,這些跑出來的檔名共同的特色就是『檔名前面開頭是小數點 . 』 沒錯!你答對了~只要檔名的開頭是由小數點開始的,那麼該檔名就不會在一般觀察模式被顯示出來!所以說,在 Linux 底下,隱藏檔並不是什麼特殊的權限, 單純是因為檔名命名的處理方式來搞定的!這樣理解否?
如果你想要觀察系統有多少不同的檔案系統呢?那就看一下檔案總管左側『裝置』的項目下,有幾個項目就是有幾個裝置囉!現在讓我們來觀察一下『電腦』內有什麼資料吧! 請按下他!然後觀察一下如下的圖示:
如上圖所示,點下 1 號箭頭後,右邊就出現一堆目錄資料夾。注意看, 2 號箭頭處指的是正常的一般目錄, 3 號箭頭則指的是有『連結檔』的資料, 這個連結檔可以想像成 Windows 的『捷徑』功能就是了~如果你的帳號沒有權限進入該目錄時,該目錄就會出現一個 X 的符號,如同 4 號箭頭處!很清楚吧! 好!讓我們來觀察一下有沒有 /etc -> sysconfig -> network-scripts 這個目錄下的資料呢?
如果你可以依序雙擊每個正確的目錄,就可以得到如上圖示。畫面中的 1 號箭頭處,可以讓你『回到上一個畫面』中,不是回到上一層~而是『上一個畫面』喔! 這點要注意。至於 2 號區塊處,你可以發現有不同顏色的顯示,最右邊的是目前所在目錄,所以 3 號畫面就顯示該目錄下的檔案資訊。 你可以快速的點選 2 號區塊處的任何一個目錄,就可以快速的回到該層目錄中去查看檔案資料喔!
如果你在安裝的時候就選定中文,並且有處理過切換中/英文的快速鍵,那這個項目幾乎可以不用理他了!但是如果你都使用預設值來安裝時, 可能會發生沒辦法使用慣用的『ctrl+shift』或『ctrl+space』來切換中文的問題!同時,也可能沒辦法找到你想要的中文輸入法~那怎辦?沒關係, 請使用圖4.1.9畫面中右上角的帳號名稱處點一下,然後選擇『設定值』,或者從『應用程式』、『系統工具』、『設定值』也可以打開它! 之後選擇『地區和語言』項目,就可以得到如下畫面。
在上面的畫面中,你可以按下箭頭所指的地方,就可以增加或減少輸入法的項目了。但是,如果想要切換不同的語言呢?那請回到原本的設定畫面, 之後請選擇『鍵盤』的項目,並按下『快捷鍵』,出現如下的畫面,點選在畫面中的左側『輸入』項目,並在『切換到下一個輸入來源』點選一、兩下, 等到出現如 3 號箭頭處出現『新捷徑鍵』時,按下你所需要的組合鍵,例如鳥哥習慣按『ctrl + space』,那就自己按下組合鍵, 之後你就可以使用自己習慣的輸入法切換快速鍵,來變更你所需要的輸入法囉!
底下的例題請大家自行參考並且實作一下喔!題目很簡單,所以鳥哥就不額外抓圖了!
上述的練習中,第三個練習還挺重要的!因為在預設的狀態中,你的圖形介面會在 5 分鐘後自動的被鎖定!這是為了要避免你暫時離開座位, 有人偷偷使用你的電腦的緣故。而要解開鎖定,就得要輸入你這個帳號的密碼才行。這個功能最好是不要取消。但因為我們的系統是單純的練習機, 而且又是虛擬機,如果經常鎖定螢幕,老是要解開很煩~那就使用上述的 3 號練習題,應該可以處理完畢! 至於第 8 點對於初次接觸 Linux 的朋友來說,會有點困難,如果你不知道如何下達指令,沒關係~等到本章後面的小節讀完,你就知道如何處理了!
如果你沒有想要繼續玩X Window了,那就登出吧!如果不想要繼續操作系統了,那就關機吧!如何登出/關機呢?如下圖所示,點選右上角你的帳號名稱, 然後在出現的畫面中去選擇即可。要記得的是,登出前最好將所有不需要的程式都關閉了再登出或關機啊!
不論是登出還是關閉電源(關機),都會有一個警告視窗來告知你 60 秒內沒有任何動作的話,就會被登出了!如下圖所示。當然, 你也可以按下確定來進行動作。登出後,系統畫面又會回到原本的等待登入的畫面中了!
請注意喔,登出並不是關機!只是讓你的帳號離開系統而已喔!
一般來說,我們是可以手動來直接修改X Window的設定檔的,不過,修改完成之後的設定項目並不會立刻被載入, 必須要重新啟動X才行(特別注意,不是重新開機,而是重新啟動X!) 。那麼如何重新啟動X呢? 最簡單的方法就是:
第二個方法比較有趣,[backspace]是倒退鍵,你按下三個按鈕後X Window立刻會被重新啟動。 如果你的X Window因為不明原因導致有點問題時,也可以利用這個方法來重新啟動X喔!不過, 這個方法要生效,必須要先進行本節稍早之前的練習第五題才行呦!
我們前面一直談到的是X Window的視窗管理員環境,那麼在這裡面有沒有純文字介面的環境啊?因為聽說伺服器通常是純文字界面的啊! 當然有啊!但是,要怎麼切換X Window與文字模式呢?注意喔,通常我們也稱文字模式為終端機介面, terminal 或 console喔!Linux預設的情況下會提供六個Terminal來讓使用者登入, 切換的方式為使用:[Ctrl] + [Alt] + [F1]~[F6]的組合按鈕。
那這六個終端介面如何命名呢,系統會將[F1] ~ [F6]命名為tty1 ~ tty6的操作介面環境。 也就是說,當你按下[ctrl] + [Alt] + [F1]這三個組合按鈕時 (按著[ctrl]與[Alt]不放,再按下[F1]功能鍵), 就會進入到tty1的terminal介面中了。同樣的[F2]就是tty2囉!那麼如何回到剛剛的X視窗介面呢?很簡單啊!按下[Ctrl] + [Alt] + [F1]就可以了!我們整理一下登入的環境如下:
由於系統預設的登入界面不同,因此你想要進入 X 的終端機名稱也可能會有些許差異。以 CentOS 7 為例,由於我們這次安裝的練習機, 預設是啟動圖形界面的,因此這個 X 視窗將會出現在 tty1 界面中。如果你的 Linux 預設使用純文字界面,那麼 tty1~tty6 就會被文字界面佔用。
若你在純文字環境中啟動 X 視窗,那麼圖形界面就會出現在當時的那個 tty 上面。舉例來說,你在 tty3 登入系統,然後輸入 startx 啟動個人的圖形界面, 那麼這個圖形界面就會產生在 tty3 上面!這樣說可以理解嗎?
# 純文字界面下 (不能有 X 存在) 啟動視窗界面的作法 [dmtsai@study ~]$ startx
不過startx這個指令並非萬靈丹,你要讓startx生效至少需要底下這幾件事情的配合:
其實,所謂的視窗環境,就是:『文字界面加上 X 視窗軟體』的組合!因此,文字界面是一定會存在的,只是視窗界面軟體就看你要不要啟動而已。 所以,我們才有辦法在純文字環境下啟動一個個人化的 X 視窗啊!因為這個 startx 是任何人都可以執行的喔!並不一定需要管理員身份的。 所以,是否預設要使用圖形界面,只要在後續管理服務的程序中,將『 graphical.target 』這個目標服務設定為預設,就能夠預設使用圖形界面囉!
剛剛你如果有按下[Ctrl] + [Alt] + [F2]就可以來到tty2的登入畫面,而如果你並沒有啟用圖形視窗界面的話, 那麼預設就是會來到tty1這個環境中。這個純文字環境的登入的畫面 (鳥哥用 dmtsai 帳號登入) 有點像這樣:
CentOS Linux 7 (Core) Kernel 3.10.0-229.el7.x86_64 on an x86_64 study login: dmtsai Password: <==這裡輸入你的密碼 Last login: Fri May 29 11:55:05 on tty1 <==上次登入的情況 [dmtsai@study ~]$ _ <==游標閃爍,等待你的指令輸入
上面顯示的內容是這樣的:
好了這樣就是登入主機了!很快樂吧!耶~
另外,再次強調,在Linux系統下最好常使用一般帳號來登入即可,所以上例中鳥哥是以自己的帳號dmtsai來登入的。 因為系統管理員帳號(root)具有無窮大的權力,例如他可以刪除任何一個檔案或目錄。因此若你以root身份登入Linux系統, 一個不小心下錯指令,這個時候可不是『欲哭無淚』就能夠解決的了問題的~
因此,一個稱職的網路/系統管理人員,通常都會具有兩個帳號,平時以自己的一般帳號來使用Linux主機的任何資源, 有需要動用到系統功能修訂時,才會轉換身份成為root呢!所以,鳥哥強烈建議你建立一個普通的帳號來供自己平時使用喔! 更詳細的帳號訊息,我們會在後續的『第十三章帳號管理』再次提及! 這裡先有概念即可!
那麼如何離開系統呢?其實應該說『登出Linux』才對!登出很簡單,直接這樣做:
[dmtsai@study ~]$ exit
就能夠登出Linux了。但是請注意:『離開系統並不是關機!』 基本上,Linux本身已經有相當多的工作在進行,你的登入也僅是其中的一個『工作』而已, 所以當你離開時,這次這個登入的工作就停止了,但此時Linux其他的工作是還是繼續在進行的! 本章後面我們再來提如何正確的關機,這裡先建立起這個概念即可!
其實我們都是透過『程式』在跟系統作溝通的,本章上面提到的視窗管理員或文字模式都是一組或一隻程式在負責我們所想要完成的任務。 文字模式登入後所取得的程式被稱為殼(Shell),這是因為這支程式負責最外面跟使用者(我們)溝通,所以才被戲稱為殼程式! 更多與作業系統及殼程式的相關性可以參考第零章、計算機概論內的說明。
我們Linux的殼程式就是厲害的bash這一支!關於更多的bash我們在第三篇再來介紹。現在讓我們來練一練打字吧!
其實整個指令下達的方式很簡單,你只要記得幾個重要的概念就可以了。舉例來說,你可以這樣下達指令的:
[dmtsai@study ~]$ command [-options] parameter1 parameter2 ... 指令 選項 參數(1) 參數(2)
上述指令詳細說明如下:
注意到上面的說明當中,『第一個被輸入的資料絕對是指令或者是可執行的檔案』! 這個是很重要的概念喔!還有,按下[Enter]鍵表示要開始執行此一命令的意思。我們來實際操作一下: 以ls這個『指令』列出『自己家目錄(~)』下的『所有隱藏檔與相關的檔案屬性』, 要達成上述的要求需要加入 -al 這樣的選項,所以:
[dmtsai@study ~]$ ls -al ~ [dmtsai@study ~]$ ls -al ~ [dmtsai@study ~]$ ls -a -l ~
上面這三個指令的下達方式是一模一樣的執行結果喔!為什麼?請參考上面的說明吧! 關於更詳細的文字模式使用方式,我們會在第十章認識BASH再來強調喔! 此外,請特別留意,在Linux的環境中, 『大小寫字母是不一樣的東西!』也就是說,在Linux底下, VBird與vbird這兩個檔案是『完全不一樣的』檔案呢!所以, 你在下達指令的時候千萬要注意到指令是大寫還是小寫。例如當輸入底下這個指令的時候,看看有什麼現象:
[dmtsai@study ~]$ date <==結果顯示日期與時間 [dmtsai@study ~]$ Date <==結果顯示找不到指令 [dmtsai@study ~]$ DATE <==結果顯示找不到指令
很好玩吧!只是改變小寫成為大寫而已,該指令就變的不存在了! 因此,請千萬記得這個狀態呦!
另外,很多時候你會發現,咦!怎麼我輸入指令之後顯示的結果的是亂碼? 這跟鳥哥說的不一樣啊!呵呵!不要緊張~我們前面提到過,Linux是可以支援多國語系的,若可能的話, 螢幕的訊息是會以該支援語系來輸出的。但是,我們的終端機介面(terminal)在預設的情況下, 無法支援以中文編碼輸出資料的。這個時候,我們就得將支援語系改為英文,才能夠以英文顯示出正確的訊息。 那怎麼做呢?你可以這樣做:
1. 顯示目前所支援的語系 [dmtsai@study ~]$ locale LANG=zh_TW.utf8 # 語言語系的輸出 LC_CTYPE="zh_TW.utf8" # 底下為許多資訊的輸出使用的特別語系 LC_NUMERIC=zh_TW.UTF-8 LC_TIME=zh_TW.UTF-8 # 時間方面的語系資料 LC_COLLATE="zh_TW.utf8" ....中間省略.... LC_ALL= # 全部的資料同步更新的設定值 # 上面的意思是說,目前的語系(LANG)為zh_TW.UTF-8,亦即台灣繁體中文的萬國碼 [dmtsai@study ~]$ date 鈭? 5??29 14:24:36 CST 2015 # 純文字界面下,無法顯示中文字,所以前面是亂碼 2. 修改語系成為英文語系 [dmtsai@study ~]$ LANG=en_US.utf8 [dmtsai@study ~]$ export LC_ALL=en_US.utf8 # LANG 只與輸出訊息有關,若需要更改其他不同的資訊,要同步更新 LC_ALL 才行! [dmtsai@study ~]$ date Fri May 29 14:26:45 CST 2015 # 順利顯示出正確的英文日期時間啊! [dmtsai@study ~]$ locale LANG=en_US.utf8 LC_CTYPE="en_US.utf8" LC_NUMERIC="en_US.utf8" ....中間省略.... LC_ALL=en_US.utf8 # 再次確認一下,結果出現,確實是en_US.utf8這個英文語系!
注意一下,那個『LANG=en_US.utf8』是連續輸入的,等號兩邊並沒有空白字元喔! 這樣一來,就能夠在『這次的登入』察看英文訊息囉!為什麼說是『這次的登入』呢? 因為,如果你登出Linux後,剛剛下達的指令就沒有用啦! ^_^,這個我們會在第十章再好好聊一聊的!好囉,底下我們來練習一下一些簡單的指令, 好讓你可以瞭解指令下達方式的模式:
底下我們立刻來操作幾個簡單的指令看看囉!同時請注意,我們已經使用了英文語系作為預設輸出的語言喔!
如果在文字介面中想要知道目前Linux系統的時間,那麼就直接在指令列模式輸入date即可顯示:
[dmtsai@study ~]$ date
Fri May 29 14:32:01 CST 2015
上面顯示的是:星期五, 五月二十九日, 14:32 分, 01秒,在 2015 年的 CST 時區!台灣在CST時區中啦! 請趕快動手做做看呦!好了,那麼如果我想要讓這個程式顯示出『2015/05/29』這樣的日期顯示方式呢? 那麼就使用date的格式化輸出功能吧!
[dmtsai@study ~]$ date +%Y/%m/%d 2015/05/29 [dmtsai@study ~]$ date +%H:%M 14:33
那個『+%Y%m%d』就是date指令的一些參數功能啦!很好玩吧!那你問我, 鳥哥怎麼知道這些參數的啊?要背起來嗎?當然不必啦!底下再告訴你怎麼查這些參數囉!
從上面的例子當中我們也可以知道,指令之後的選項除了前面帶有減號『-』之外,某些特殊情況下, 選項或參數前面也會帶有正號『+』的情況!這部份可不要輕易的忘記了呢!
那如果我想要列出目前這個月份的月曆呢?呵呵!直接給他下達cal即可!
[dmtsai@study ~]$ cal May 2015 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
除了本月的日曆之外,連同今日所在日期處都會有反白的顯示呢!真有趣!cal (calendar)這個指令可以做的事情還很多,例如你可以顯示整年的月曆情況:
[dmtsai@study ~]$ cal 2015 2015 January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7 4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14 11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21 18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28 25 26 27 28 29 30 31 29 30 31 April May June Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 1 2 1 2 3 4 5 6 5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13 12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20 19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27 26 27 28 29 30 24 25 26 27 28 29 30 28 29 30 31 ....(以下省略)....
基本上cal這個指令可以接的語法為:
[dmtsai@study ~]$ cal [month] [year]
所以,如果我想要知道2015年10月的月曆,可以直接下達:
[dmtsai@study ~]$ cal 10 2015
October 2015
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
那請問今年有沒有13月啊?來測試一下這個指令的正確性吧!下達下列指令看看:
[dmtsai@study ~]$ cal 13 2015
cal: illegal month value: use 1-12
cal竟然會告訴我們『錯誤的月份,請使用1-12』這樣的資訊呢!所以, 未來你可以很輕易的就以cal來取得日曆上面的日期囉!簡直就是萬年曆啦! ^_^。 另外,由這個cal指令的練習我們也可以知道,某些指令有特殊的參數存在, 若輸入錯誤的參數,則該指令會有錯誤訊息的提示,透過這個提示我們可以藉以瞭解指令下達錯誤之處。 這個練習的結果請牢記在心中喔!
如果在文字模式當中,突然想要作一些簡單的加減乘除,偏偏手邊又沒有計算機!這個時候要筆算嗎? 不需要啦!我們的Linux有提供一支計算程式,那就是bc喔。你在指令列輸入bc後,螢幕會顯示出版本資訊, 之後就進入到等待指示的階段。如下所示:
[dmtsai@study ~]$ bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. _ <==這個時候,游標會停留在這裡等待你的輸入
事實上,我們是『進入到bc這個軟體的工作環境當中』了! 就好像我們在Windows裡面使用『小算盤』一樣!所以,我們底下嘗試輸入的資料, 都是在bc程式當中在進行運算的動作。所以囉,你輸入的資料當然就得要符合bc的要求才行! 在基本的bc計算機操作之前,先告知幾個使用的運算子好了:
好!讓我們來使用bc計算一些咚咚吧!
[dmtsai@study ~]$ bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 1+2+3+4 <==只有加法時 10 7-8+3 2 10*52 520 10%3 <==計算『餘數』 1 10^2 100 10/100 <==這個最奇怪!不是應該是 0.1 嗎? 0 quit <==離開 bc 這個計算器
在上表當中,粗體字表示輸入的資料,而在每個粗體字的底下就是輸出的結果。 咦!每個計算都還算正確,怎麼10/100會變成0呢?這是因為bc預設僅輸出整數,如果要輸出小數點下位數,那麼就必須要執行 scale=number ,那個number就是小數點位數,例如:
[dmtsai@study ~]$ bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. scale=3 <==沒錯!就是這裡!! 1/3 .333 340/2349 .144 quit
注意啊!要離開bc回到命令提示字元時,務必要輸入『quit』來離開bc的軟體環境喔! 好了!就是這樣子啦!簡單的很吧!以後你可以輕輕鬆鬆的進行加減乘除啦!
從上面的練習我們大概可以知道在指令列模式裡面下達指令時,會有兩種主要的情況:
我們以一個簡單的圖示來說明:
如圖4.2.1所示,上方指令下達後立即顯示訊息且立刻回到命令提示字元的環境。 如果有進入軟體功能的環境(例如上面的bc軟體),那麼就得要使用該軟體的結束指令 (例如在bc環境中輸入quit)才能夠回到命令提示字元中!那你怎麼知道你是否在命令提示字元的環境呢? 很簡單!你只要看到游標是在『[dmtsai@study ~]$ 』這種提示字元後面, 那就是等待輸入指令的環境了。很容易判斷吧!不過初學者還是很容易忘記啦!
在繼續後面章節的學習之前,這裡很需要跟大家再來報告一件事,那就是我們的文字模式裡頭具有很多的功能組合鍵, 這些按鍵可以輔助我們進行指令的編寫與程式的中斷呢!這幾個按鍵請大家務必要記住的!很重要喔!
[Tab]按鍵就是在鍵盤的大寫燈切換按鍵([Caps Lock])上面的那個按鍵!在各種Unix-Like的Shell當中, 這個[Tab]按鍵算是Linux的Bash shell最棒的功能之一了!他具有『命令補全』與『檔案補齊』的功能喔! 重點是,可以避免我們打錯指令或檔案名稱呢!很棒吧!但是[Tab]按鍵在不同的地方輸入,會有不一樣的結果喔! 我們舉下面的例子來說明。上一小節我們不是提到 cal 這個指令嗎?如果我在指令列輸入 ca 再按兩次 [tab] 按鍵, 會出現什麼訊息?
[dmtsai@study ~]$ ca[tab][tab] <==[tab]按鍵是緊接在 a 字母後面! cacertdir_rehash cairo-sphinx cancel case cache_check cal cancel.cups cat cache_dump calibrate_ppa capsh catchsegv cache_metadata_size caller captoinfo catman # 上面的 [tab] 指的是『按下那個tab鍵』,不是要你輸入中括號內的tab啦!
發現什麼事?所有以ca為開頭的指令都被顯示出來啦!很不錯吧!那如果你輸入『ls -al ~/.bash』再加兩個[tab]會出現什麼?
[dmtsai@study ~]$ ls -al ~/.bash[tab][tab]
.bash_history .bash_logout .bash_profile .bashrc
咦!在該目錄下面所有以 .bash 為開頭的檔案名稱都會被顯示出來了呢!注意看上面兩個例子喔, 我們按[tab]按鍵的地方如果是在command(第一個輸入的資料)後面時,他就代表著 『命令補全』,如果是接在第二個字以後的,就會變成『檔案補齊』的功能了!但是在某些特殊的指令底下,檔案補齊的功能可能會變成『參數/選項補齊』喔! 我們同樣使用 date 這個指令來查一下:
[dmtsai@study ~]$ date --[tab][tab] <==[tab]按鍵是緊接在 -- 後面! --date --help --reference= --rfc-3339= --universal --date= --iso-8601 --rfc-2822 --set= --version # 瞧!系統會列出來 date 這個指令可以使用的選項有哪些喔~包括未來會用到的 --date 等項目
總結一下:
善用 [tab] 按鍵真的是個很好的習慣!可以讓你避免掉很多輸入錯誤的機會!
如果你在Linux底下輸入了錯誤的指令或參數,有的時候這個指令或程式會在系統底下『跑不停』這個時候怎麼辦?別擔心, 如果你想讓當前的程式『停掉』的話,可以輸入:[Ctrl]與c按鍵(先按著[Ctrl]不放,且再按下c按鍵,是組合按鍵), 那就是中斷目前程式的按鍵啦!舉例來說,如果你輸入了『find /』這個指令時,系統會開始跑一些東西(先不要理會這個指令串的意義),此時你給他按下 [Ctrl]-c 組合按鍵,嘿嘿!是否立刻發現這個指令串被終止了!就是這樣的意思啦!
[dmtsai@study ~]$ find / ....(一堆東西都省略).... # 此時螢幕會很花,你看不到命令提示字元的!直接按下[ctrl]-c即可! [dmtsai@study ~]$ <==此時提示字元就會回來了!find程式就被中斷!
不過你應該要注意的是,這個組合鍵是可以將正在運作中的指令中斷的, 如果你正在運作比較重要的指令,可別急著使用這個組合按鍵喔! ^_^
那麼[Ctrl]-d是什麼呢?就是[Ctrl]與d按鍵的組合啊!這個組合按鍵通常代表著: 『鍵盤輸入結束(End Of File, EOF 或 End Of Input)』的意思! 另外,他也可以用來取代exit的輸入呢!例如你想要直接離開文字介面,可以直接按下[Ctrl]-d就能夠直接離開了(相當於輸入exit啊!)。
如果你在純文字的畫面中執行某些指令,這個指令的輸出訊息相當長啊!所以導致前面的部份已經不在目前的螢幕畫面中, 所以你想要回頭去瞧一瞧輸出的訊息,那怎辦?其實,你可以使用 [Shift]+[Page Up] 來往前翻頁,也能夠使用 [Shift]+[Page Down] 來往後翻頁! 這兩個組合鍵也是可以稍微記憶一下,在你要稍微往前翻畫面時,相當有幫助!
總之,在Linux底下,文字介面的功能是很強悍的!要多多的學習他,而要學習他的基礎要訣就是...多使用、多熟悉啦!
萬一我下達了錯誤的指令怎麼辦?不要緊呀!你可以藉由螢幕上面顯示的錯誤訊息來瞭解你的問題點, 那就很容易知道如何改善這個錯誤訊息囉!舉個例子來說,假如想執行date卻因為大小寫打錯成為DATE時, 這個錯誤的訊息是這樣顯示的:
[dmtsai@study ~]$ DATE bash: DATE: command not found... # 這裡顯示錯誤的訊息 Similar command is: 'date' # 這裡竟然給你一個可能的解決方案耶!
上面那個bash:表示的是我們的Shell的名稱, 本小節一開始就談到過Linux的預設殼程式就是bash囉! 那麼上面的例子說明了bash有錯誤,什麼錯誤呢?bash告訴你:
DATE: command not found
字面上的意思是說『指令找不到』,那個指令呢?就是DATE這個指令啦! 所以說,系統上面可能並沒有DATE這個指令囉!就是這麼簡單!通常出現『command not found』的可能原因為:
從 CentOS 7 開始,bash 竟然會嘗試幫我們找解答耶!看一下上面輸出的第二行『Similar command is: 'date'』,他說,相似的指令是 date 喔! 沒錯啊!我們就是輸入錯誤的大小寫而已~這就已經幫我們找到答案了!看了輸出,你也應該知道如何解決問題了吧?
介紹這幾個指令讓你玩一玩先,更詳細的指令操作方法我們會在第三篇的時候再進行介紹! 現在讓我們來想一想,萬一我在操作date這個指令的時候,手邊又沒有這本書,我要怎麼知道要如何加那些奇怪的參數, 好讓輸出的結果符合我想要的輸出格式呢?嘿嘿!到下一節鳥哥來告訴你怎麼辦吧!
先來瞭解一下Linux有多少指令呢?在文字模式下,你可以輸入 g 之後直接按下兩個[Tab]按鍵,看看總共有多少以 g 開頭的指令可以讓你用?
[dmtsai@study ~]$ g[tab][tab]<==在g之後直接輸入兩次[tab]按鍵 Display all 217 possibilities? (y or n) <==如果不想要看,按 n 離開
如上所示,鳥哥安裝的這個系統中,少說也有200多個以 g 為開頭的指令可以讓dmtsai這個帳號使用。 那在Linux裡面到底要不要背『指令』啊?可以啊!你背啊!這種事,鳥哥這個『忘性』特佳的老人家實在是背不起來 @_@ ~當然啦,有的時候為了要考試(例如一些認證考試等等的)還是需要背一些重要的指令與選項的! 不過,鳥哥主要還是以理解『在什麼情況下,應該要使用哪方面的指令』為準的!
既然鳥哥說不需要背指令,那麼我們如何知道每個指令的詳細用法?還有,某些設定檔的內容到底是什麼? 這個可就不需要擔心了!因為在Linux上開發的軟體大多數都是自由軟體/開源軟體,而這些軟體的開發者為了讓大家能夠瞭解指令的用法, 都會自行製作很多的文件,而這些文件也可以直接在線上就能夠輕易的被使用者查詢出來喔!很不賴吧! 這根本就是『線上說明文件』嘛!哈哈!沒錯!確實如此。我們底下就來談一談,Linux到底有多少的線上文件資料呢?
事實上,幾乎 Linux 上面的指令,在開發的時候,開發者就將可以使用的指令語法與參數寫入指令操作過程中了!你只要使用『 --help 』這個選項, 就能夠將該指令的用法作一個大致的理解喔!舉例來說,我們來瞧瞧 date 這個指令的基本用法與選項參數的介紹:
[dmtsai@study ~]# date --help Usage: date [OPTION]... [+FORMAT] # 這裡有基本語法 or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] # 這是設定時間的語法 Display the current time in the given FORMAT, or set the system date. # 底下是主要的選項說明 Mandatory arguments to long options are mandatory for short options too. -d, --date=STRING display time described by STRING, not 'now' -f, --file=DATEFILE like --date once for each line of DATEFILE ....(中間省略).... -u, --utc, --universal print or set Coordinated Universal Time (UTC) --help 顯示此求助說明並離開 --version 顯示版本資訊並離開 # 底下則是重要的格式 (FORMAT) 的主要項目 FORMAT controls the output. Interpreted sequences are: %% a literal % %a locale's abbreviated weekday name (e.g., Sun) %A locale's full weekday name (e.g., Sunday) ....(中間省略).... # 底下是幾個重要的範例 (Example) Examples: Convert seconds since the epoch (1970-01-01 UTC) to a date $ date --date='@2147483647' ....(底下省略)....
看一下上面的顯示,首先一開始是下達語法的方式 (Usage),這個 date 有兩種基本語法,一種是直接下達並且取得日期回傳值,且可以 +FORAMAT 的方式來顯示。 至於另一種方式,則是加上 MMDDhhmmCCYY 的方式來設定日期時間。他的格式是『月月日日時時分分西元年』的格式!再往下看, 會說明主要的選項,例如 -d 的意義等等,後續又會出現 +FORMAT 的用法!從裡面你可以查到我們之前曾經用過得『 date +%Y%m%d 』這個指令與選項的說明。
基本上,如果是指令,那麼透過這個簡單的 --help 就可以很快速的取得你所需要的選項、參數的說明了!這很重要!我們說過,在 linux 底下你需要學習『任務達成』的方式, 不用硬背指令參數。不過常用的指令你還是得要記憶一下,而選項就透過 --help 來快速查詢即可。
同樣的,透過 cal --help 你也可以取得相同的解釋!相當好用!不過,如果你使用 bc --help 的話,雖然也有簡單的解釋,但是就沒有類似 scale 的用法說明, 同時也不會有 +, -, *, /, % 等運算子的說明了!因此,雖然 --help 已經相當好用,不過,通常 --help 用在協助你查詢『你曾經用過的指令所具備的選項與參數』而已, 如果你要使用的是從來沒有用過得指令,或者是你要查詢的根本就不是指令,而是檔案的『格式』時,那就得要透過 man page 囉!!
咦!date --help 沒有告訴你 STRING 是什麼?嘿嘿!不要擔心,除了 --help 之外,我們Linux上面的其他線上求助系統已經都幫你想好要怎麼辦了, 所以你只要使用簡單的方法去尋找一下說明的內容,馬上就清清楚楚的知道該指令的用法了!怎麼看呢?就是找男人(man) 呀!喔!不是啦!這個man是manual(操作說明)的簡寫啦!只要下達:『man date』 馬上就會有清楚的說明出現在你面前喔!如下所示:
[dmtsai@study ~]$ LANG="en_US.utf8" # 還記得這個咚咚的用意吧?前面提過了,是為了『語系』的需要啊!下達過一次即可! [dmtsai@study ~]$ man date DATE(1) User Commands DATE(1) # 請注意上面這個括號內的數字 NAME <==這個指令的完整全名,如下所示為date且說明簡單用途為設定與顯示日期/時間 date - print or set the system date and time SYNOPSIS <==這個指令的基本語法如下所示 date [OPTION]... [+FORMAT] <==第一種單純顯示的用法 date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] <==這種可以設定系統時間的用法 DESCRIPTION <==詳細說明剛剛語法談到的選項與參數的用法 Display the current time in the given FORMAT, or set the system date. Mandatory arguments to long options are mandatory for short options too. -d, --date=STRING <==左邊-d為短選項名稱,右邊--date為完整選項名稱 display time described by STRING, not 'now' -f, --file=DATEFILE like --date once for each line of DATEFILE -I[TIMESPEC], --iso-8601[=TIMESPEC] output date/time in ISO 8601 format. TIMESPEC='date' for date only (the default), 'hours', 'minutes', 'seconds', or 'ns' for date and time to the indicated precision. ....(中間省略).... # 找到了!底下就是格式化輸出的詳細資料! FORMAT controls the output. Interpreted sequences are: %% a literal % %a locale's abbreviated weekday name (e.g., Sun) %A locale's full weekday name (e.g., Sunday) ....(中間省略).... ENVIRONMENT <==與這個指令相關的環境參數有如下的說明 TZ Specifies the timezone, unless overridden by command line parameters. If neither is specified, the setting from /etc/localtime is used. EXAMPLES <==一堆可用的範本 Convert seconds since the epoch (1970-01-01 UTC) to a date $ date --date='@2147483647' ....(中間省略).... DATE STRING <==上面曾提到的 --date 的格式說明! The --date=STRING is a mostly free format human readable date string such as "Sun, 29 Feb 2004 16:21:42 -0800" or "2004-02-29 16:21:42" or even "next Thursday". A date string may contain items indicating calendar date, time of day, time zone, day of AUTHOR <==這個指令的作者啦! Written by David MacKenzie. COPYRIGHT <==受到著作權法的保護!用的就是 GPL 了! Copyright © 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WAR‐ RANTY, to the extent permitted by law. SEE ALSO <==這個重要,你還可以從哪裡查到與date相關的說明文件之意 The full documentation for date is maintained as a Texinfo manual. If the info and date programs are properly installed at your site, the command info coreutils 'date invocation' should give you access to the complete manual. GNU coreutils 8.22 June 2014 DATE(1)
看(鳥哥沒罵人!)馬上就知道一大堆的用法了!如此一來,不就可以知道date的相關選項與參數了嗎?真方便! 而出現的這個螢幕畫面,我們稱呼他為man page, 你可以在裡頭查詢他的用法與相關的參數說明。如果仔細一點來看這個man page的話,你會發現幾個有趣的東西。
首先,在上個表格的第一行,你可以看到的是:『DATE(1)』,DATE我們知道是指令的名稱, 那麼(1)代表什麼呢?他代表的是『一般使用者可使用的指令』的意思!咦!還有這個用意啊!呵呵! 沒錯~在查詢資料的後面的數字是有意義的喔!他可以幫助我們瞭解或者是直接查詢相關的資料。 常見的幾個數字的意義是這樣的:
代號 | 代表內容 |
1 | 使用者在shell環境中可以操作的指令或可執行檔 |
2 | 系統核心可呼叫的函數與工具等 |
3 | 一些常用的函數(function)與函式庫(library),大部分為C的函式庫(libc) |
4 | 裝置檔案的說明,通常在/dev下的檔案 |
5 | 設定檔或者是某些檔案的格式 |
6 | 遊戲(games) |
7 | 慣例與協定等,例如Linux檔案系統、網路協定、ASCII code等等的說明 |
8 | 系統管理員可用的管理指令 |
9 | 跟kernel有關的文件 |
上述的表格內容可以使用『man man』來更詳細的取得說明。透過這張表格的說明, 未來你如果使用man page在察看某些資料時,就會知道該指令/檔案所代表的基本意義是什麼了。 舉例來說,如果你下達了『man null』時,會出現的第一行是:『NULL(4)』,對照一下上面的數字意義, 嘿嘿!原來null這個玩意兒竟然是一個『裝置檔案』呢!很容易瞭解了吧!
再來,man page的內容也分成好幾個部分來加以介紹該指令呢!就是上頭man date那個表格內, 以NAME作為開始介紹,最後還有個SEE ALSO來作為結束。基本上,man page大致分成底下這幾個部分:
代號 | 內容說明 |
NAME | 簡短的指令、資料名稱說明 |
SYNOPSIS | 簡短的指令下達語法(syntax)簡介 |
DESCRIPTION | 較為完整的說明,這部分最好仔細看看! |
OPTIONS | 針對 SYNOPSIS 部分中,有列舉的所有可用的選項說明 |
COMMANDS | 當這個程式(軟體)在執行的時候,可以在此程式(軟體)中下達的指令 |
FILES | 這個程式或資料所使用或參考或連結到的某些檔案 |
SEE ALSO | 可以參考的,跟這個指令或資料有相關的其他說明! |
EXAMPLE | 一些可以參考的範例 |
有時候除了這些外,還可能會看到Authors與Copyright等,不過也有很多時候僅有NAME與DESCRIPTION等部分。 通常鳥哥在查詢某個資料時是這樣來查閱的:
大致上瞭解了man page的內容後,那麼在man page當中我還可以利用哪些按鍵來幫忙查閱呢?首先, 如果要向下翻頁的話,可以按下鍵盤的空白鍵,也可以使用[Page Up]與[Page Down]來翻頁呢!同時,如果你知道某些關鍵字的話, 那麼可以在任何時候輸入『/word』,來主動搜尋關鍵字!例如在上面的搜尋當中,我輸入了『/date』會變成怎樣?
DATE(1) User Commands DATE(1) NAME date - print or set the system date and time SYNOPSIS date [OPTION]... [+FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] DESCRIPTION Display the current time in the given FORMAT, or set the system date. ....(中間省略).... /date <==只要按下/,游標就會跑到這個地方來,你就可以開始輸入搜尋字串咯
看到了嗎,當你按下『/』之後,游標就會移動到螢幕的最下面一行, 並等待你輸入搜尋的字串了。此時,輸入date後,man page就會開始搜尋跟date有關的字串, 並且移動到該區域呢!很方便吧!最後,如果要離開man page時,直接按下『 q 』就能夠離開了。 我們將一些在man page常用的按鍵給他整理整理:
按鍵 | 進行工作 |
空白鍵 | 向下翻一頁 |
[Page Down] | 向下翻一頁 |
[Page Up] | 向上翻一頁 |
[Home] | 去到第一頁 |
[End] | 去到最後一頁 |
/string | 向『下』搜尋 string 這個字串,如果要搜尋 vbird 的話,就輸入 /vbird |
?string | 向『上』搜尋 string 這個字串 |
n, N | 利用 / 或 ? 來搜尋字串時,可以用 n 來繼續下一個搜尋 (不論是 / 或 ?) ,可以利用 N 來進行『反向』搜尋。舉例來說,我以 /vbird 搜尋 vbird 字串, 那麼可以 n 繼續往下查詢,用 N 往上查詢。若以 ?vbird 向上查詢 vbird 字串, 那我可以用 n 繼續『向上』查詢,用 N 反向查詢。 |
q | 結束這次的 man page |
要注意喔!上面的按鍵是在man page的畫面當中才能使用的! 比較有趣的是那個搜尋啦!我們可以往下或者是往上搜尋某個字串,例如要在man page內搜尋vbird這個字串, 可以輸入 /vbird 或者是 ?vbird ,只不過一個是往下而一個是往上來搜尋的。而要 重複搜尋 某個字串時,可以使用 n 或者是 N 來動作即可呢! 很方便吧!^_^
既然有man page,自然就是因為有一些文件資料,所以才能夠以man page讀出來囉!那麼這些man page的資料 放在哪裡呢?不同的distribution通常可能有點差異性,不過,通常是放在/usr/share/man這個目錄裡頭,然而,我們可以透過修改他的man page搜尋路徑來改善這個目錄的問題!修改/etc/man_db.conf (有的版本為man.conf或manpath.conf或man.config等)即可囉!至於更多的關於man的訊息你可以使用『 man man 』來查詢呦!關於更詳細的設定,我們會在第十章 bash 當中繼續的說明喔!
在某些情況下,你可能知道要使用某些特定的指令或者是修改某些特定的設定檔,但是偏偏忘記了該指令的完整名稱。 有些時候則是你只記得該指令的部分關鍵字。這個時候你要如何查出來你所想要知道的man page呢? 我們以底下的幾個例子來說明man這個指令有用的地方喔!
[dmtsai@study ~]$ man -f man
man (1) - an interface to the on-line reference manuals
man (1p) - display system documentation
man (7) - macros to format man pages
使用 -f 這個選項就可以取得更多與man相關的資訊,而上面這個結果當中也有提示了 (數字) 的內容,
舉例來說,第三行的『 man (7) 』表示有個man (7)的說明文件存在喔!但是卻有個man (1)存在啊!
那當我們下達『 man man 』的時候,到底是找到哪一個說明檔呢?
其實,你可以指定不同的文件的,舉例來說,上表當中的兩個 man 你可以這樣將他的文件叫出來:[dmtsai@study ~]$ man 1 man <==這裡是用 man(1) 的文件資料 [dmtsai@study ~]$ man 7 man <==這裡是用 man(7) 的文件資料你可以自行將上面兩個指令輸入一次看看,就知道,兩個指令輸出的結果是不同的。 那個1, 7就是分別取出在man page裡面關於1與7相關資料的文件檔案囉! 好了,那麼萬一我真的忘記了下達數字,只有輸入『 man man 』時,那麼取出的資料到底是1還是7啊? 這個就跟搜尋的順序有關了。搜尋的順序是記錄在/etc/man_db.conf 這個設定檔當中, 先搜尋到的那個說明檔,就會先被顯示出來! 一般來說,通常會先找到數字較小的那個啦!因為排序的關係啊!所以, man man 會跟 man 1 man 結果相同!
除此之外,我們還可以利用『關鍵字』找到更多的說明文件資料喔!什麼是關鍵字呢? 從上面的『man -f man』輸出的結果中,我們知道其實輸出的資料是:
當使用『man -f 指令』時,man只會找資料中的左邊那個指令(或檔案)的完整名稱,有一點不同都不行! 但如果我想要找的是『關鍵字』呢?也就是說,我想要同時找上面說的兩個地方的內容,只要該內容有關鍵字存在, 不需要完全相同的指令(或檔案)就能夠找到時,該怎麼辦?請看下個範例囉!
[dmtsai@study ~]$ man -k man fallocate (2) - manipulate file space zshall (1) - the Z shell meta-man page ....(中間省略).... yum-config-manager (1) - manage yum configuration options and yum repositories yum-groups-manager (1) - create and edit yum's group metadata yum-utils (1) - tools for manipulating repositories and extended package management看到了吧!很多對吧!因為這個是利用關鍵字將說明文件裡面只要含有man那個字眼的(不見得是完整字串) 就將他取出來!很方便吧! ^_^(上面的結果有特殊字體的顯示是為了方便讀者查看, 實際的輸出結果並不會有特別的顏色顯示喔!)
事實上,還有兩個指令與man page有關呢!而這兩個指令是man的簡略寫法說~就是這兩個:
[dmtsai@study ~]$ whatis [指令或者是資料] <==相當於 man -f [指令或者是資料] [dmtsai@study ~]$ apropos [指令或者是資料] <==相當於 man -k [指令或者是資料]
而要注意的是,這兩個特殊指令要能使用,必須要有建立 whatis 資料庫才行!這個資料庫的建立需要以 root 的身份下達如下的指令:
[root@study ~]# mandb # 舊版的 Linux 這個指令是使用 makewhatis 喔!這一版開使用 mandb 了!
在所有的Unix Like系統當中,都可以利用 man 來查詢指令或者是相關檔案的用法; 但是,在Linux裡面則又額外提供了一種線上求助的方法,那就是利用info這個好用的傢伙啦!
基本上,info與man的用途其實差不多,都是用來查詢指令的用法或者是檔案的格式。但是與man page一口氣輸出一堆資訊不同的是,info page則是將文件資料拆成一個一個的段落,每個段落用自己的頁面來撰寫, 並且在各個頁面中還有類似網頁的『超連結』來跳到各不同的頁面中,每個獨立的頁面也被稱為一個節點(node)。 所以,你可以將info page想成是文字模式的網頁顯示資料啦!
不過你要查詢的目標資料的說明文件必須要以info的格式來寫成才能夠使用info的特殊功能(例如超連結)。 而這個支援info指令的文件預設是放置在/usr/share/info/這個目錄當中的。 舉例來說,info這個指令的說明文件有寫成info格式,所以,你使用『 info info 』可以得到如下的畫面:
[dmtsai@study ~]$ info info File: info.info, Node: Top, Next: Getting Started, Up: (dir) Info: An Introduction ********************* The GNU Project distributes most of its on-line manuals in the "Info format", which you read using an "Info reader". You are probably using an Info reader to read this now. ....(中間省略).... If you are new to the Info reader and want to learn how to use it, type the command 'h' now. It brings you to a programmed instruction sequence. # 這一段在說明,按下 h 可以有簡易的指令說明!很好用! ....(中間省略).... * Menu: * Getting Started:: Getting started using an Info reader. * Advanced:: Advanced Info commands. * Expert Info:: Info commands for experts. * Index:: An index of topics, commands, and variables. --zz-Info: (info.info.gz)Top, 52 lines --Bot------------------------------------------
仔細的看到上面這個顯示的結果,裡面的第一行顯示了很多的資訊喔!第一行裡面的資料意義為:
從第一行你可以知道這個節點的內容、來源與相關連結的資訊。更有用的資訊是,你可以透過直接按下N, P, U來去到下一個、上一個與上一層的節點(node)!非常的方便! 第一行之後就是針對這個節點的說明。在上表的範例中,第二行以後的說明就是針對info.info內的Top這個節點所做的。 另外,如論你在任何一個頁面,只要不知道怎麼使用 info 了,直接按下 h 系統就能夠提供一些基本按鍵功能的介紹喔!
copy of the license to the document, as described in section 6 of the license. * Menu: * Getting Started:: Getting started using an Info reader. * Advanced:: Advanced Info commands. * Expert Info:: Info commands for experts. * Index:: An index of topics, commands, and variables. --zz-Info: (info.info.gz)Top, 52 lines --Bot------------------------------------------- Basic Info command keys # 這裡是按下 h 之後才會出現的一堆簡易按鈕列說明! x Close this help window. # 按下 x 就可以關閉這個 help 的視窗 q Quit Info altogether. # 完全離開 info page 喔! H Invoke the Info tutorial. Up Move up one line. Down Move down one line. DEL Scroll backward one screenful. SPC Scroll forward one screenful. -----Info: *Info Help*, 405 lines --Top-------------------------------------------------
再來,你也會看到有『Menu』那個咚咚吧!底下共分為四小節,分別是Getting Started等等的,我們可以使用上下左右按鍵來將游標移動到該文字或者『 * 』上面,按下Enter, 就可以前往該小節了!另外,也可以按下[Tab]按鍵,就可以快速的將游標在上表的畫面中的node間移動, 真的是非常的方便好用。如果將info.info內的各個節點串在一起並繪製成圖表的話,情況有點像底下這樣:
如同上圖所示,info的說明文件將內容分成多個node,並且每個node都有定位與連結。 在各連結之間還可以具有類似『超連結』的快速按鈕,可以透過[tab]鍵在各個超連結間移動。 也可以使用U,P,N來在各個階層與相關連結中顯示!非常的不錯用啦! 至於在info page當中可以使用的按鍵,可以整理成底下這樣,事實上,你也可以在 info page 中按下 h 喔!
按鍵 | 進行工作 |
空白鍵 | 向下翻一頁 |
[Page Down] | 向下翻一頁 |
[Page Up] | 向上翻一頁 |
[tab] | 在 node 之間移動,有 node 的地方,通常會以 * 顯示。 |
[Enter] | 當游標在 node 上面時,按下 Enter 可以進入該 node 。 |
b | 移動游標到該 info 畫面當中的第一個 node 處 |
e | 移動游標到該 info 畫面當中的最後一個 node 處 |
n | 前往下一個 node 處 |
p | 前往上一個 node 處 |
u | 向上移動一層 |
s(/) | 在 info page 當中進行搜尋 |
h, ? | 顯示求助選單 |
q | 結束這次的 info page |
info page是只有Linux上面才有的產物,而且易讀性增強很多~不過查詢的指令說明要具有info page功能的話,得用info page的格式來寫成線上求助文件才行!我們CentOS 7將info page的文件放置到/usr/share/info/目錄中!至於非以info page格式寫成的說明文件(就是man page),雖然也能夠使用info來顯示,不過其結果就會跟man相同。 舉例來說,你可以下達『info man』就知道結果了! ^_^
剛剛前面說,一般而言,指令或者軟體製作者,都會將自己的指令或者是軟體的說明製作成『線上說明文件』! 但是,畢竟不是每個咚咚都需要做成線上說明文件的,還有相當多的說明需要額外的文件!此時,這個所謂的 How-To(如何做的意思)就很重要啦!還有,某些軟體不只告訴你『如何做』,還會有一些相關的原理會說明呢。
那麼這些說明文件要擺在哪裡呢?哈哈!就是擺在/usr/share/doc這個目錄啦!所以說,你只要到這個目錄底下, 就會發現好多好多的說明文件檔啦!還不需要到網路上面找資料呢!厲害吧!^_^ 舉例來說,你可能會先想要知道 grub2 這個新版的開機管理軟體有什麼能使用的指令?那可以到底下的目錄瞧瞧:
另外,很多原版軟體釋出的時候,都會有一些安裝須知、預計工作事項、未來工作規劃等等的東西,還有包括可安裝的程序等, 這些檔案也都放置在 /usr/share/doc 當中喔!而且/usr/share/doc這個目錄下的資料主要是以套件(packages)為主的, 例如 nano 這個軟體的相關資訊在 /usr/share/doc/nano-xxx(那個xxx表示版本的意思!)。
總結上面的三個咚咚(man, info, /usr/share/doc/),請記住喔:
在Linux系統當中有非常多的文書編輯器存在,其中最重要的就是後續章節我們會談到的 vim 這傢伙! 不過其實還有很多不錯用的文書編輯器存在的!在這裡我們就介紹一下簡單的nano這一支文書編輯器來玩玩先!
nano的使用其實很簡單,你可以直接加上檔名就能夠開啟一個舊檔或新檔!底下我們就來開啟一個名為text.txt的檔名來看看:
[dmtsai@study ~]$ nano text.txt # 不管text.txt存不存在都沒有關係!存在就開啟舊檔,不存在就開啟新檔 GNU nano 2.3.1 File: text.txt <==這個是游標所在處 [ New File ] ^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos ^X Exit ^J Justify ^W Where Is ^V Next Page ^U UnCut Te ^T To Spell # 上面兩行是指令說明列,其中^代表的是[ctrl]的意思
如上圖所示,你可以看到第一行反白的部分,那僅是在宣告nano的版本與檔名(File: text.txt)而已。 之後你會看到最底下的三行,分別是檔案的狀態(New File)與兩行指令說明列。指令說明列反白的部分就是組合鍵, 接的則是該組合鍵的功能。那個指數符號(^)代表的是鍵盤的[Ctrl]按鍵啦!底下先來說說比較重要的幾個組合按鍵:
比較常見的功能是這些,如果你想要取得更完整的說明,可以在nano的畫面中按下[ctrl]-G或者是[F1]按鍵, 就能夠顯示出完整的nano內指令說明了。好了,請你在上述的畫面中隨便輸入許多字, 輸入完畢之後就儲存後離開,如下所示:
GNU nano 2.3.1 File: text.txt Type some words in this nano editor program. You can use [ctrl] plus some keywords to go to some functions. Hello every one. Bye bye. <==這個是由標所在處 ^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos ^X Exit ^J Justify ^W Where Is ^V Next Page ^U UnCut Te ^T To Spell
此時按下[ctrl]-X會出現類似下面的畫面:
GNU nano 2.3.1 File: text.txt Type some words in this nano editor program. You can use [ctrl] plus some keywords to go to some functions. Hello every one. Bye bye. Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ? ▋ Y Yes N No ^C Cancel
如果不要儲存資料只想要離開,可以按下N即可離開。如果確實是需要儲存的,那麼按下Y後,最後三行會出現如下畫面:
File Name to Write: text.txt▋ <==可在這裡修改檔名或直接按[enter] ^G Get Help M-D DOS Format M-A Append M-B Backup File ^C Cancel M-M Mac Format M-P Prepend
如果是單純的想要儲存而已,直接按下[enter]即可儲存後離開nano程式。不過上表中最底下還有兩行,我們知道指數符號代表[ctrl], 那個M是代表什麼呢?其實就是[alt]囉!其實nano也不需要記太多指令啦!只要知道怎麼進入nano、怎麼離開,怎麼搜尋字串即可。 未來我們還會學習更有趣的vi呢!
OK!大概知道開機的方法,也知道基本的指令操作,而且還已經知道線上查詢了,好累呦! 想去休息呢!那麼如何關機呢?我想,很多朋友在DOS的年代已經有在玩電腦了! 在當時我們關掉DOS的系統時,常常是直接關掉電源開關,而 Windows 在你不爽的時候,按著電源開關四秒也可以關機!但是在Linux則相當的不建議這麼做!
Why?在 Windows (非 NT 主機系統) 系統中,由於是單人假多工的情況,所以即使你的電腦關機, 對於別人應該不會有影響才對!不過呢,在 Linux 底下,由於每個程序 (或者說是服務) 都是在在背景下執行的,因此,在你看不到的螢幕背後其實可能有相當多人同時在你的主機上面工作, 例如瀏覽網頁啦、傳送信件啦以 FTP 傳送檔案啦等等的,如果你直接按下電源開關來關機時, 則其他人的資料可能就此中斷!那可就傷腦筋了!
此外,最大的問題是,若不正常關機,則可能造成檔案系統的毀損 (因為來不及將資料回寫到檔案中,所以有些服務的檔案會有問題!)。所以正常情況下,要關機時需要注意底下幾件事:
所以底下我們就來談一談幾個與關機/重新開機相關的指令囉!
在第零章、計算機概論裡面我們談到過資料在電腦中運作的模式, 所有的資料都得要被讀入記憶體後才能夠被CPU所處理,但是資料又常常需要由記憶體寫回硬碟當中(例如儲存的動作)。 由於硬碟的速度太慢(相對於記憶體來說),如果常常讓資料在記憶體與硬碟中來回寫入/讀出,系統的效能就不會太好。
因此在Linux系統中,為了加快資料的讀取速度,所以在預設的情況中, 某些已經載入記憶體中的資料將不會直接被寫回硬碟,而是先暫存在記憶體當中,如此一來, 如果一個資料被你重複的改寫,那麼由於他尚未被寫入硬碟中,因此可以直接由記憶體當中讀取出來, 在速度上一定是快上相當多的!
不過,如此一來也造成些許的困擾,那就是萬一你的系統因為某些特殊情況造成不正常關機 (例如停電或者是不小心踢到power)時,由於資料尚未被寫入硬碟當中,哇!所以就會造成資料的更新不正常啦! 那要怎麼辦呢?這個時候就需要sync這個指令來進行資料的寫入動作啦! 直接在文字介面下輸入sync,那麼在記憶體中尚未被更新的資料,就會被寫入硬碟中!所以,這個指令在系統關機或重新開機之前, 很重要喔!最好多執行幾次!
雖然目前的 shutdown/reboot/halt 等等指令均已經在關機前進行了 sync 這個工具的呼叫,不過,多做幾次總是比較放心點~呵呵~
[dmtsai@study ~]$ su - # 這個指令在讓你的身份變成 root !底下請輸入 root 的密碼! Password: # 就這裡!請輸入安裝時你所設定的 root 密碼! Last login: Mon Jun 1 16:10:12 CST 2015 on pts/0 [root@study ~]# sync
由於Linux的關機是那麼重要的工作,因此除了你是在主機前面以實體終端機 (tty1~tty7) 來登入系統時, 不論用什麼身份都能夠關機之外,若你是使用遠端管理工具(如透過pietty使用ssh服務來從其他電腦登入主機), 那關機就只有root有權力而已喔!
嗯!那麼就來關機試試看吧!我們較常使用的是shutdown這個指令,而這個指令會通知系統內的各個程序 (processes),並且將通知系統中的一些服務來關閉。shutdown可以達成如下的工作:
那麼shutdown的語法是如何呢?聰明的讀者大概已經開始找『男人』了!沒錯,隨時隨地的 man 一下,是很不錯的舉動!好了,簡單的語法規則為:
[root@study ~]# /sbin/shutdown [-krhc] [時間] [警告訊息] 選項與參數: -k : 不要真的關機,只是發送警告訊息出去! -r : 在將系統的服務停掉之後就重新開機(常用) -h : 將系統的服務停掉後,立即關機。 (常用) -c : 取消已經在進行的 shutdown 指令內容。 時間 : 指定系統關機的時間!時間的範例底下會說明。若沒有這個項目,則預設 1 分鐘後自動進行。 範例: [root@study ~]# /sbin/shutdown -h 10 'I will shutdown after 10 mins' Broadcast message from root@study.centos.vbird (Tue 2015-06-02 10:51:34 CST): I will shutdown after 10 mins The system is going down for power-off at Tue 2015-06-02 11:01:34 CST!
在執行 shutdown 之後,系統告訴大家,這部機器會在十分鐘後關機!並且會將訊息顯示在目前登入者的螢幕前方! 你可以輸入『 shutdown -c 』來取消這次的關機指令。而如果你什麼參數都沒有加,單純執行 shutdown 之後, 系統預設會在 1 分鐘後進行『關機』的動作喔!我們也提供幾個常見的時間參數給你參考!
[root@study ~]# shutdown -h now 立刻關機,其中 now 相當於時間為 0 的狀態 [root@study ~]# shutdown -h 20:25 系統在今天的 20:25 分會關機,若在21:25才下達此指令,則隔天才關機 [root@study ~]# shutdown -h +10 系統再過十分鐘後自動關機 [root@study ~]# shutdown -r now 系統立刻重新開機 [root@study ~]# shutdown -r +30 'The system will reboot' 再過三十分鐘系統會重新開機,並顯示後面的訊息給所有在線上的使用者 [root@study ~]# shutdown -k now 'This system will reboot' 僅發出警告信件的參數!系統並不會關機啦!嚇唬人!
還有三個指令可以進行重新開機與關機的任務,那就是reboot, halt, poweroff。 其實這三個指令呼叫的函式庫都差不多,所以當你使用『man reboot』時,會同時出現三個指令的用法給你看呢。 其實鳥哥通常都只有記poweroff與reboot這兩個指令啦!一般鳥哥在重新開機時,都會下達如下的指令喔:
[root@study ~]# sync; sync; sync; reboot
既然這些指令都能夠關機或重新開機,那他有沒有什麼差異啊?基本上,在預設的情況下, 這幾個指令都會完成一樣的工作!(全部的動作都是去呼叫 systemctl 這個重要的管理命令!) 所以,你只要記得其中一個就好了!重點是,你自己習慣即可!
[root@study ~]# halt # 系統停止~螢幕可能會保留系統已經停止的訊息! [root@study ~]# poweroff # 系統關機,所以沒有提供額外的電力,螢幕空白!
更多halt與poweroff的選項功能,請務必使用man去查詢一下喔!
如果你跟鳥哥一樣是個老人家,那麼一定會知道有個名為 init 的指令,這個指令可以切換不同的執行等級~ 執行等級共有 0~6 七個,其中 0 就是關機、6 就是重新開機等等。不過,這個 init 目前只是一個相容模式而已~ 所以在 CentOS 7 當中,雖然你依舊可以使用『 init 0 』來關機,但是那已經跟所謂的『執行等級』無關了!
那目前系統中所有服務的管理是使用哪個指令呢?那就是 systemctl 啦!這個指令相當的複雜!我們會在很後面系統管理員部份才講的到! 目前你只要學習 systemctl 當中與關機有關的部份即可。要注意,上面談到的 halt, poweroff, reboot, shutdown 等等,其實都是呼叫這個 systemctl 指令的喔! 這個指令跟關機有關的語法如下:
[root@study ~]# systemctl [指令] 指令項目包括如下: halt 進入系統停止的模式,螢幕可能會保留一些訊息,這與你的電源管理模式有關 poweroff 進入系統關機模式,直接關機沒有提供電力喔! reboot 直接重新開機 suspend 進入休眠模式 [root@study ~]# systemctl reboot # 系統重新開機 [root@study ~]# systemctl poweroff # 系統關機
\S Kernel \r on an \m