Linux 基礎學習篇 - Mandrake 9

第十六章、程序與資源管理 - for Mandrake 9

鳥哥的第一本書籍的主要內容,內容稍微與書籍不太一樣了!

最近更新時間: 2003/02/10

鳥哥的第一本書大約是在 2002 年的年底左右出版的,內容幾乎都是 Linux 基礎學習,一點也沒有談到伺服器的部份!這也是後來的雛型! 不過內容錯誤的地方很多,導致在 2003 年的年底推出了『基礎學習篇增訂版』的內容,大致上就是處理掉一些比較有嚴重錯誤的部份。 不過,因為 Linux 的版本變化非常快速,因此,寫完了這些文件之後,鳥哥還是持續在網站上更新文件內容,導致原本書籍內容的資料與網站資料差異太大! 這個問題直到鳥哥在 2008 年左右才發現!糟糕了!舊版的文件資料已經遺失~覺得相當扼腕~

因此,在底下的文件內容與當初的書籍內容雖然大同小異,不過章節的編排卻是有所不同!再花時間去一個一個處理,似乎也不太符合成本效益! 鳥哥僅是想要將自己以前的文件記錄下來而已,同時將過時的 big5 編碼改回 utf8 編碼,再加上可以支援 RWD 的樣式而已啦! 內容已經不多做編排~因此,如果內容文件你看不懂,那也是應該的! ^_^

建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。最新文章請前往鳥站首頁查閱囉!

特別說明線上求助:

這部份真的太重要了!不希望大家老是到討論區上面發問一些『可能會被碎碎唸』的問題,所以這裡再次的重複的強調一次!
  • 關於線上 Linux 指令查詢:

  • 基本上,使用 Linux 最好還是使用文字界面登入比較好!這是因為 X-Window 雖然對於新手來說,他的附加功能蠻強大的,不過,如果單純使用 X-Window 來使用 Linux 的話,那麼跟使用 Window 有何不同呢?!(當然囉,如果您想將 Linux 作為 DeskTop 的話,那就另當別論囉!)由於使用 X-Window 可能具備了很多的後遺症!這是因為 X-Window 只能算是 Linux 下的一套『軟體』,並不是一套『作業系統』,所以 X-Window 對於你的系統的全部功能並不能完全的掌握,並且,由於 X-Window 在 Run 的時候會耗用比較多的資源,這一點對於比較老舊的機器來說是很要命的!例如鳥哥的 P-166 來來去去就只有 64 MB 的記憶體大小,如果一跑 X-Window 的話,那麼我其他的網路服務可能就會有遲滯的情況發生....!基本上,對於有心想要往 Linux 裡面鑽的朋友呀!還是希望您可以多多的使用文字界面來設定您所有的服務,這樣您比較容易清楚 Linux 的主要架構,並且,也能瞭解每一個指令與其相關的設定檔案的相關位置,對於您往後的除錯工作具有相當大的幫助呦!所以囉,有鑑於『幫助節省系統資源』與『幫助使用者更加瞭解 Linux 系統架構』,這裡鳥哥大力的推薦使用文字界面來操作 Linux 咯!
     
    基本上,比較常用的一般指令(尤其是檔案與目錄的建置方面的指令)已經在前幾章討論過了,有需要的或可以前往一觀呦!。另外一個最重要的地方是,在 Linux 主機上,已經內建各個指令的說明內容了,而且是很詳細的線上說明,你可以使用:
     
    [root@tsai  root]# man  command <==command 為你欲查詢的指令名稱 
    [root@tsai  root]# info command
     
    在上表中,針對 command 這個指令你可以使用 man 或者是 info 來查詢他的功能與說明,例如你要查尋 ls 這個指令時,你可以輸入: man  ls 或  info  ls 來查詢一下!適當的利用線上查詢對於你的英文及相關的指令功能有一定程度的幫助喔!就鳥哥使用的情況來看,還是那句老話,『不要害怕看英文』,看久了還是會懂得啦!因為鳥哥的英文也不好(其實是很破),不過努力的看還是可以看的懂得呀!然後,通常我在開始玩 Linux 的時候,都是拿一本英文字典在旁邊查...!
  • 關於線上查詢『參數設定檔案結構』

  • 此外,如果是一般的參數檔案的話,應該如何查詢其設定方式呢?!呵呵!就輸入底下這個參數吧!
     
    [root@tsai root]# man 5 passwd
    [root@tsai root]# man passwd
     
    呵呵!仔細的比較一下上面提供的兩個指令,您會很輕易的發現兩者的不同!怎麼說不同呢?嘿嘿!第二個顯示的其實是 /usr/bin/passwd 這個執行檔的使用方法介紹,但是第一個加上參數 5 的時候,就自動的變成去查詢 /etc/passwd 這個檔案的設定功能了!記得:『在 Linux 當中,使用 man 的時候,參數設定檔的查詢都是以 5 來設定的!』怎麼會是 5 呢?如何設定的,哈哈!那就需要來查看一下 man 這個咚咚的搜尋路徑 (MANPATH) 了!
  • 線上查看 man pages 的搜尋路徑:

  • 這裡有個有趣的課題要來讓大家想一想,我在查詢指令的用法時,或者是查詢參數檔案的設定時, Linux 到哪裡去找的呀!?呵呵!就是到 MANPATH 這個變數當中搜尋的囉!那麼 MANPATH 在哪裡設定的呢?嗯!很容易找的到的,那就是 /etc/man.conf 這個檔案囉!在該檔案中,當我們執行 man 的時候,系統就會一個一個的去查詢 PATH ,就有點像我們在執行某些執行檔的時候一樣!那麼預設的 MANPATH 在哪裡呀!?就是在:
     
    • /usr/share/man
    • /usr/local/man
     
    上面這兩個是大宗啦!好了,那麼如果我安裝了一個新的套件,是以 Tarball 安裝在 /usr/local/newpackes 底下,而且我知道該套件的 man pages 放在 /usr/local/newpackes 底下,那麼我該如何讓該目錄可以被 MANPATH 查詢到呢?很簡單呀!將該目錄寫入 /etc/man.conf 裡頭就可以啦!
  • Linux 主機內的文件資料:

  • 基本上,你的 Linux 裡面就已經具有相當多的文件資料了,只不過是原文的!好了,你知道該文件資料擺在哪裡嗎?!就是在底下的目錄當中啦!
    • /usr/share/doc
    有空的話多到裡頭去看看!你會看到很多相關的資訊呦!很棒的啦!
  • 注意螢幕前面顯示的訊息:

  • 另外,很多錯誤訊息基本上都已經提供您解決的方案了!所以在發生錯誤的時候,請千萬記得『讀取一下您螢幕上顯示的錯誤訊息』吧!!這是最容易自救的方式!
  • 留心 /var/log 裡頭的檔案:

  • 基本上, Linux 預設的情況中,已經將大大小小的事件都寫入 log file ( 登入檔 ) 當中了!這個時候如果您發現您的系統有問題,嗯!到該目錄下去查看一下,差不多都可以解決您的問題呢!留意留意!

Linux 多人多工環境指令

多人多工
  • 多人環境:Linux 最棒的地方就在於他的多人多工環境了!那麼,什麼是『多人多工』?!在 Linux 上面允許不同的人使用,而且每個人都有其特殊的權限,只有一個人具有至高無上的權力,那就是 root (系統管理員),除了他之外,其他人都必須要受一些限制的!而每個人進入 Linux 的環境設定都可以隨著每個然的喜好來設定( 還記得我們在 BASH 那一章提過的 ~/.bashrc 吧!?對了!就是那個光! )!咦! Windows 也可以呀!是沒錯呀!但是要曉得的是,您只能在 Windows 前面才可以進行『登入』的工作,也就是說,每次 Windows 僅允許一個人物登入!當然囉,Windows NT 也同樣的具有這個多人多工的功能!不過,由於 NT 實在是太耗系統資源了,個人認為,還是比不上 Linux 或者是 Unix 家族的網路連線來的順暢呢!

  •  
  • 多工行為:我想,使用過 Windows 的人絕對都會遇到這樣的事情:『這個檔案正在使用中,您無法開啟這個檔案!』我哩勒!還得將正在執行當中的程式關掉之後才能開這個中間暫存檔!!而且這個時候還只有我自己一個人在使用呢??受不了??呵呵! Linux 就不會這樣囉!您可以同時在不同的畫面,同時由不同的人(當然囉,有的是經由 SSH 網路連線過來,有的是直接在螢幕前面的朋友囉!)使用『同一個檔案』,不論是開啟或者是修改,只要您有權限,(還記得前面說過的檔案權限的資料吧?!忘記了?回頭複習去吧!!)就可以使用該檔案!!這個東西可有用的緊!由於鳥哥是很常使用程式的(就是 Fortran 啦,吃飯的工具!),而由於我們有一部主機專門用來工作的,所以配備比較高檔一點(雙 PIII 的 CPU),那麼我就可以同時的進行兩個 compiler 的程序,而且還不會互相的影響,並且資源分配的還蠻均勻的!哈哈!又捨棄掉 Windows 的耗費資源的咚咚,唉呦?怎麼會跑得這麼順暢呀!爽斃了!!

  •  
  • 七個基本視窗:在 Linux 當中,預設提供了六個文字界面登入視窗,以及一個圖形界面,你可以使用 [Alt]+[F1].....[F7]來切換不同的終端機界面,而且每個終端機界面的登入者還可以不同人!很炫吧!不像 Windows 一次只能在螢幕前登入一個人!!這個東西可就很有用啦!尤其是在某個程序死掉的時候!

  •  
  • 殺掉程序:以前的鳥哥笨笨的,總是以為使用 Windows 98 就可以啦!後來,因為工作的關係,需要使用 Unix 系統,想說我只要在工作機前面就好,才不要跑來跑去的到 Unix 工作站前面去呢!所以就使用 Windows 連到我的 Unix 工作站工作!好死不死,我一個程序跑下來要 2~3 天,唉?偏偏常常到了地 2.5 天的時候, Windows 98 就給他掛點去!當初真的是給他怕死了??後來因為換了新電腦,用了隨機版的 Windows 2000 ,呵呵,這東西真不錯(指對單人而言),在當機的時候,他可以僅將錯誤的程序踢掉,而不干擾其他的程序進行,呵呵!從此以後,就不用擔心會當機連連囉!不過, 2000 畢竟還不夠好,因為有的時候還是會死當!!那麼 Linux 呢?哈哈!更棒了,幾乎可以說絕對不會當機的!因為他可以在任何時候,將某個被困住的程序殺掉,然後在重新執行該程序而不用重新開機!夠炫吧!那麼如果我在 Linux 下以文字界面登入,在螢幕當中顯示錯誤訊息後就掛了?動都不能動,該如何是好!?這個時候那預設的七個視窗就幫上忙啦!你可以隨意的再按  [Alt]+[F1].....[F7] 來切換到其他的終端機界面,然後以 ps -aux 找出剛剛的錯誤程序,然後給他 kill 一下,哈哈,回到剛剛的終端機界面!恩?棒!又回復正常囉!

  •  
  • CPU 的工作問題:在早期玩 Windows 98 的朋友應該都曉得的是,Windows 98 預設 CPU 是『一直全速在跑的』,也不能這樣說啦,應該說 windows 98 的 CPU 是一直在通電的!連沒有工作的時候,他的 CPU 使用率還是可以到達 100% ,所以容易造成 CPU 過熱當機的問題!這個情況雖然可以在 NT 獲 2000 中得到解決,或者可以加灌 CPU 省電軟體來降低溫度,但是仍然是怪怪的!而在 Linux 當中根本就沒有這個問題, CPU 沒有使用,就不會有通電,哈哈!省電又沒有高熱呦!不然您可以瞧一瞧咱們這個網站的 CPU 使用率,除了 WWW 線上人數過多的時候會衝到 30% 左右之外,其他時候可是低低的呦!
背景執行
  • 另外一個功能,就是『背景執行』的功夫了。當你輸入

  •  
      [root@tsai  root]#  cp  file1  file2  &
     
    這一串指令的時候,表示將 file1 這個檔案複製為 file2 ,且放置於背景中執行,也就是說執行這一個命令之後,在這一個終端介面仍然可以做其他的工作!而當這一個指令( cp  file1  file2 )執行完畢之後,系統將會在您的終端介面顯示完成的消息!很便利喔!
多人多工的問題
  • 多人多工確實有很多的好處,但其實也有管理上的困擾,因為使用者越來越多,將導致你管理上的困擾哩!另外,由於使用者日盛,當使用者達到一定的人數後,通常你的機器便需要升級了,因為 CPU 的運算與 RAM 的大小可能就會不敷使用!
好了!廢話說完了!開始來談一談幾個常用的指令吧!

背景工作管理

有時後我們並不是一定要在螢幕前進行工作的,尤其是某些朋友特別不喜歡同時開啟多個視窗,會容易搞混掉!這個時候就需要使用到背景工作管理的一些指令囉!這些指令是需要同時使用的!如 &, [Ctrl]+z, bg, fg, jobs, 與 kill 等等!此外,最主要利用到『背景工作』的使用者通常是怎麼回是呢?『就是當您的主機已經被限制使用者僅能同時登入一次』的時候,也就是說,你無法用兩個視窗登入到同一部主機,可以做的到嗎?可以呀!目前很多的主機為了節省系統資源,就是這樣搞的,然而這個時候萬一您要進行很多工作的時候,要怎麼辦?!阿!傷腦筋呀!還好!在 Linux 裡面支援了很多這方面的事情!我們可以這樣做呢! ^_^
學習本章的時候會使用到部分的命令重導向,所以請前往 BASH SHELL 閱讀一番!

  • &

  • 語法
    [root @test /root ]# command &
    參數說明:
    範例:
    [root @test /root]# find / -name testing & <==將該執行程序丟到背景執行
    [root @test /root]# fg                      <==將該程序叫回螢幕前執行
    說明
    如果想要讓螢幕中的工作( command )在背景底下執行的時後,就使用 & 吧!不過,由於是背景執行的,所以該程序的輸出並不會顯現在螢幕上,所以需要特別留意輸出的資訊的管線重導的問題呦!另外,如何將該程序叫回來螢幕上面執行呢?就使用 fg 即可!當然囉,也可以使用 [Ctrl]+z 來將目前正在進行當中的工作丟到背景底下!那麼擺在背景底下執行有何好處呢?!最大的好處就是不怕被『 [Ctrl]+c 』這個中斷指令來中斷了!!

  • [Ctrl]+z

  • 語法
    [root @test /root ]# command
    [root @test /root ]# ^Z          <==按下[Ctrl]加上 z 鍵
    參數說明:
    範例:
    [root @test /root]# vi .bashrc
    ^Z                             <==在 vi 當中的一般模式中鍵入[Ctrl]+z

    [1]+  Stopped                 vi .bashrc    <==這裡會顯示將資料丟到背景當中了!
    [root @test /root]# 

    說明
    如果你正在進行 vi ,而且是在編輯一個重要資料檔案,但是偏偏你想起有的程序需要留意,因此需要退出 vi ,不過,你並不想這個時候儲存退出 vi ,那麼該如何是好呢?!就將資料丟到背景裡面去吧!以上面的例子來說明,當你在執行編輯 /root/.bashrc 這個檔案時,想要暫時離開,那麼就直接在 vi 的『一般模式』當中輸入[Ctrl]加上 z (小寫)按鍵,,那麼系統就會告訴你『工作項目 [1] 在背景當中,而其狀態為[Stopped]亦即是停止的狀態!』,並且會離開 vi 進入到 command line 當中,等待使用者輸入指令!這個咚咚很好用的呦!那如果想要回到 vi 呢?!呵呵,就需要使用 jobs 配合 bg 或 fg 囉!

  • jobs

  • 語法
    [root @test /root ]# jobs
    參數說明:
    範例:
    [root @test /root]# vi .bashrc
    ^Z                              <==在 vi 當中的一般模式中鍵入[Ctrl]+z

    [1]+  Stopped                 vi .bashrc    <==這裡會顯示將資料丟到背景當中了!
    [root @test /root]# jobs
    [1]+  Stopped                 vi .bashrc    <==顯示有一個工作在背景下,狀態為 停止

    說明
    剛剛我們提到的 & 與 vi 在背景下執行,那麼你怎麼知道目前你所進行的背景底下的工作有哪些呢?!很簡單,就是使用 jobs 就可以觀察到啦!以上式為例,使用 jobs 就可以知道目前的背景中工作項目有 vi .bashrc 這一項!那個中括號([])裡面的數字就是 jobs 的代號囉!

  • fg 與 bg

  • 語法
    [root @test /root ]# fg %number
    [root @test /root ]# bg %number
    參數說明:
    %      :後面接數字,表示 jobs 的工作代號
    number :就是工作代號
    範例:
    [root @test /root]# find / -name test
    ^Z
    [1]+  Stopped                 find / -name testing
    [root @test /root]# vi .bashrc
    ^Z
    [2]+  Stopped                 vi .bashrc    <==這裡會顯示將資料丟到背景當中了!
    [root @test /root]# jobs
    [1]-  Stopped                 find / -name testing
    [2]+  Stopped                 vi .bashrc
    [root @test /root]# bg %1
    [root @test /root]# jobs
    [1]-  Running                 find / -name testing &
    [2]+  Stopped                 vi .bashrc
    [root @test /root]# fg %2
    進入 vi 畫面囉!
    說明
    OK!那麼如何來瞭解 jobs 的背景(bg)與前景(fg)的管控呢?!這裡請注意囉!這個 bg 是將『背景當中的程式由 stopped 變成 Running 』的一個手段,至於 fg 『則是將背景中的指令移到螢幕上來動作』,那你怎麼知道你的背景當中有多少的工作(jobs)在進行呢?!就是執行 jobs 來看看背景程式的代號囉!然後以 bg %number 來將資料在背景中執行,而 fg %number 則是將代號為 number 的程式移動到螢幕前面動作!

  • kill

  • 語法
    [root @test /root ]# kill -sigal %number
    參數說明:
    %number :背景工作的代號,可使用 jobs 查詢
    signal
        -1  :重新讀取一次參數設定檔(類似 reload )
        -2  :使用者中斷該工作,類似 [Ctrl]+c 來中斷一個工作
        -9  :立刻殺掉一個工作,不論該工作是否為僵屍程序
        -15 :停止一個工作(這是預設值)
    範例:
    [root @test /root]# jobs
    [1]+  Stopped                 vi .bashrc
    [root @test /root]# kill -9 %1
    說明
    如果想要直接殺掉背景工作中的項目,可以直接輸入 kill 來殺掉!但是由於預設是將該程序停止而已,不見得一定可以將該工作清除乾淨,因此需要送出一個訊號,告訴系統你就是要砍掉該程序!這個時候就使用 kill -9 吧另外, -15 稱為 terminal ,是以一般的正常程序砍掉一個 jobs ,而 –9 有『強制終止』的意思,所以可以控制殭屍程序。

    程序與資源管理:

    終於來到最嚴重的系統管理員的擔心部分!一個被入侵的 Linux 系統最容易被修改的是什麼?想必您一定有聽說過所謂的『木馬程式』吧!所謂的木馬程式就是以一些小指令,由背景執行的方式常駐在系統當中,而當你的系統被入侵者入侵之後,對於您 Linux 主機上面的資訊,呵呵!就是由這些木馬程式傳送到入侵者手中的!所以囉!良好的管理程序的習慣,也是系統管理員必須要做的功課呢!好了!我們必須要瞭解的是『什麼是程序』呀!?說穿了,這也沒有什麼好神秘的,『程序就是您在執行或者啟動一個事件的時候,系統會發給他的一個執行序!』換句話說,當您啟動了一個指令或者是 shell 的時候,系統就會給這個事件或者是 shell 一個代碼,而如果有任何的其他服務要使用到你目前這程序的資源時,就會自動的跑來瞭解一下您的 PID ( process ID, 就是程式序囉!),底下我們使用 ps 與 top 這兩個最常用來觀察系統程序工作狀態的指令來瞭解一下什麼是程序啦!
    另外,我們還得需要來瞭解一下,什麼是『父程序, PPID』與『子程序, child precess』呢?!呵呵!說穿了也沒有什麼了不起!就是『子程序是由父程序執行而得的一個程序,當子程序死掉時,父程序通常不會被影響,但是當父程序死掉時,則所有子程序將一併結束!』常常很多朋友都在反應:『唉呦!我的 sendmail 怎麼關都關不掉,真是見鬼了!』呵呵!這個時候您就得告訴他囉:『唉呦!你關掉的不是父程序呀!只是一些子程序,由於父程序還存活著,所以子程序就會不動的湧出囉!』

  • ps

  • 語法
    [root @test /root ]# ps -aux
    參數說明:
    a   :選擇所有的程序列出
    u   :所有使用者的程序均列出
    x   :所有 tty 的程序列出
    範例:
    [root @test /root]# ps -aux
    USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.1  1384  468 ?        S    Mar31   0:05 init [3]
    root         2  0.0  0.0     0    0 ?        SW   Mar31   0:00 [keventd]
    root         3  0.0  0.0     0    0 ?        SWN  Mar31   0:00 [ksoftirqd_CPU0]
    root         4  0.0  0.0     0    0 ?        SW   Mar31   0:11 [kswapd]
    root         5  0.0  0.0     0    0 ?        SW   Mar31   0:00 [bdflush]
    root         6  0.0  0.0     0    0 ?        SW   Mar31   0:00 [kupdated]
    root       130  0.0  0.0     0    0 ?        SW   Mar31   0:00 [kjournald]
    root       131  0.0  0.0     0    0 ?        SW   Mar31   0:01 [kjournald]
    root       132  0.0  0.0     0    0 ?        SW   Mar31   0:03 [kjournald]
    root       133  0.0  0.0     0    0 ?        SW   Mar31   0:12 [kjournald]
    root       482  0.0  0.2  1444  528 ?        S    Mar31   0:03 syslogd -m 0
    ........
    說明
    這是用來查詢目前主機環境中,在背景執行的相關程序!我通常使用『 ps -aux 』這個參數來列出所有的資訊以提供自己檢查程序的問題!在上面的程序列出當中,說明如下:
    • USER:說明該程序是屬於哪一個人的;
    • PID:該程序的代號;
    • %CPU:代表該程序使用了多少 CPU 資源;
    • %MEM:代表該程序使用了多少的 RAM ;
    • VSZ, RSS:佔去的 ram 的大小( bytes );
    • TTY:是否為登入者執行的程序?若為 tty1-tty6 則為本機登入者,若為 pts/?? 則為遠端登入者執行的程序
    • STAT:該程序的狀態,( R )為可執行的,( S )為該程序正在睡眠中,就是沒有執行了,( T )正在偵測或者是停止了,( Z )僵屍程式,就是 zombie 死掉的程式啦!需要以 kill 除去囉!
    • START:該程序開始的日期;
    • TIME:該程序跑了多久的時間?
    • COMMAND:該程序的內容啦!
    這是一個很有用的指令,尤其是在偵測系統的狀態時!不過,這個程式也是入侵者最喜歡修改的執行程式了!因為他可以寫一個 script 來騙 root 呀!讓某些木馬程式沒有辦法顯示出來~~重要的很!!善加利用吧!此外,那個 PID 是挺重要的資訊呦!因為在後面的 kill 就是藉由瞭解 PID 來進行程序的刪除的動作的!

  • top

  • 語法
    [root @test /root ]# top
    參數說明:
    在執行 top 的程式中,可以輸入下面的字元以進行排序
    A  :以 age 亦即是執行的先後程序進行排序
    T  :由啟動的時間排序
    M  :以所佔的 memory 的大小排序
    P  :以所耗用的 CPU 資源排序
    範例:
    [root @test /root]# top
     11:55pm  up 8 days,  7:40,  1 user,  load average: 0.22, 0.14, 0.10
    71 processes: 69 sleeping, 2 running, 0 zombie, 0 stopped
    CPU states: 24.6% user,  3.7% system,  0.0% nice, 71.5% idle
    Mem:   255892K av,  222300K used,   33592K free,       0K shrd,   48084K buff
    Swap:  289128K av,    8184K used,  280944K free                  110472K cached

      PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
     9898 root       9   0  5976 5976  1364 S     5.5  2.3   0:00 mrtg
     4744 apache    14   0  5312 5052  3764 S     2.1  1.9   0:16 httpd
     9189 apache    14   0  4520 4256  3752 S     1.9  1.6   0:01 httpd
     9187 apache    10   0  4544 4276  3800 S     1.7  1.6   0:01 httpd
     9212 mysql      9   0  7280 4772  2716 S     0.7  1.8   0:00 mysqld
     9888 root      12   0  1064 1064   832 R     0.7  0.4   0:00 top
     4842 mysql     10   0  7280 4772  2716 S     0.5  1.8   0:06 mysqld
     9218 mysql     10   0  7280 4772  2716 S     0.5  1.8   0:00 mysqld

    說明
    使用 ps 是一個不錯的管理工具,但是 ps 畢竟不是動態的,若使用 top 的話,呵呵!可以用動態(每五秒鐘更新一次)的方式來偵測程序的進行!而且在程序進行中,還可以使用 P 來以 CPU 耗用資源排序、使用 M 來以 memory 佔用大小排序等等,非常好用的管理工作!有空的話多以 man top 來玩一玩吧!

  • free

  • 語法
    [root @test /root ]# free
    參數說明:
    -k  :以 KBytes 來顯示記憶體
    -m  :以 MBytes 來顯示記憶體
    範例:
    [root @test /root]# free
                 total       used       free     shared    buffers     cached
    Mem:        255892     222076      33816          0      49072     112272
    -/+ buffers/cache:      60732     195160
    Swap:       289128       7572     281556
    說明
    另一個觀看系統資源的就是使用 free 來檢查目前記憶體的使用情況囉!在上面顯示的是,我有 256 MB 的時體記憶體,也有大約 270 MB 的 swap (就是虛擬記憶體啦!)大小。

  • sar

  • 語法
    [root @test /root ]# sar [-u] [-r] 秒數 次數
    參數說明:
    -u  :看 CPU 使用的情況
    -r  :看 memory 使用的情況
    秒數:幾秒鐘觀測一次?
    次數:共觀測幾次
    範例:
    [root @test /root]# sar -u 1 3
    12:10:28 AM       CPU     %user     %nice   %system     %idle
    12:10:29 AM       all      0.00      0.00      0.00    100.00
    12:10:30 AM       all      0.00      0.00      0.00    100.00
    12:10:31 AM       all     12.00      0.00      1.00     87.00
    Average:          all      4.00      0.00      0.33     95.67
    [root @test /root]# sar -r 1 3
    12:11:11 AM kbmemfree kbmemused  %memused kbmemshrd kbbuffers  kbcached kbswpfree kbswpused  %swpused
    12:11:12 AM     24416    231476     90.46         0     51068    112536    281556      7572      2.62
    12:11:13 AM     24420    231472     90.46         0     51068    112536    281556      7572      2.62
    12:11:14 AM     24392    231500     90.47         0     51068    112540    281556      7572      2.62
    Average:        24409    231483     90.46         0     51068    112537    281556      7572      2.62
    說明
    鳥哥真的是很喜歡使用 sar 來看系統的資源呢!真的是太方便了!比較常用的是 CPU 與 RAM 的觀察,當然囉,還可以觀察硬碟的 I/O 變化!!在上面的例子中,觀察 CPU 的現象中,可以發現 CPU idle 的情況很長!不錯!另外,在 RAM 的觀測中,比較常使用的是 %memused (使用的百分比)及 %swpused (虛擬記憶體使用的百分比),很方便吧!一覽無遺呦!事實上, VBird 也已經以 sar 來作為 MRTG 繪製圖表的一個工具,很是方便的!不過,比較麻煩的是, Mandrake 預設並沒有安裝這個套件,如果您有需要的話,可以到相關網站上面下載 sysstat 這個套件呢!

  • kill

  • 語法
    [root @test /root ]# kill -signal PID
    參數說明:
    那個 -signal 跟上面的 kill 一樣:
    -9  :殺掉該程序
    -15 :停止該程序!
    範例:
    [root @test /root]# kill -9 2380
    說明
    要殺掉一個程序的時後,自然需要知道該程序的 PID 才行!另外,需要注意的是,由於很多的程序都有附屬關係,例如 sendmail 可能會同時開啟相當多的程序在工作(如果郵件量很大的時後!)所以,如果砍掉的是『子程序』是無法將整個程序殺掉的!而要知道該程序的代號(PID)自然就得善用 ps, top 等工具囉! 此外,您常常會發現在一些 scripts 裡面,會寫著 kill –1 PID 的字樣,那個 –l 是讓該 PID 重新讀取一次設定檔的意思,最常發現在 syslogd 這個 daemon 呢!我們在後頭再來提一提這個重要的咚咚!

  • uname

  • 語法
    [root @test /root ]# uname [-apnr]
    參數說明:
    -a :所有的系統資訊均列出
    -p :列出 CPU 資訊
    -n :列出 host name
    -r :列出 kernel 版本資訊
    範例:
    [root @test /root]# uname -a
    Linux tsai.adsldns.org 2.4.18 #2 Mon Mar 25 21:51:51 CST 2002 i586 unknown
    說明
    想要知道你的系統資訊嗎?包括你的核心版本、主機名稱、CPU 資訊等等!使用 uname 就可以達到啦!另外,如果對於你的 CPU 有興趣的話,那麼不妨在 /proc 底下看看:
    [root @test /root ]# more /proc/cpuinfo
    processor       : 0
    vendor_id       : AuthenticAMD
    cpu family      : 5
    model           : 9
    model name      : AMD-K6(tm) 3D+ Processor
    stepping        : 1
    cpu MHz         : 400.917
    cache size      : 256 KB
    fdiv_bug        : no
    hlt_bug         : no
    f00f_bug        : no
    coma_bug        : no
    fpu             : yes
    fpu_exception   : yes
    cpuid level     : 1
    wp              : yes
    flags           : fpu vme de pse tsc msr mce cx8 pge mmx syscall 3dnow k6_mtrr
    bogomips        : 799.53
    看到了嗎?!馬上就知道你的 CPU 的 type 囉!

    程序的優先順序: nice, renice,

    好了!接著下來我們來談一談『我哪一個程序可以最優先被處理!?』呵呵!這是個很重要的課題!怎麼說呢?因為在你的系統當中,通常『同一個時間一定有多個程序會佔用到 CPU 的資源,哪麼那個程序比較重要,讓 CPU 可以先跑該程序,就是一個重要的課題了!』您說是吧!好了,如果您還記得 ps 這個指令的話,那麼來看一看加入 ps -l 這個功能所顯示出來的訊息吧!
     
    [root @test /root ]# ps -l
      F S   UID   PID  PPID  C PRI  NI ADDR    SZ WCHAN  TTY          TIME CMD
    100 S     0  5624  5606  0  70   0    -   608 wait4  pts/0    00:00:00 bash
    000 R     0  6944  5624  0  76   0    -   769 -      pts/0    00:00:00 ps

    注意看到上面那些資訊:

    • UID 代表執行者的身份;
    • PID 代表這個程序的代號;
    • PPID 代表這個程序是由那個程序發展出來的,亦即是父程序;
    • PRI 代表這個程序『可被執行的優先順序』越小越早被執行!
    • NI 代表這個程序的 nice 值!
    好啦!這裡有兩個奇怪的資訊,一個是 PRI 一個是 NI 這兩個鬼東西!嗯! PRI 還容易理解,就是該程序被 CPU 執行的先後順序啦!所以當 CPU 忙線中的時候,那麼 PRI 值月小的就會被越快執行!那麼 NI 是什麼?呵呵!那個就是 nice 值啦!那麼什麼是 nice 值呢?就是『系統可被執行的修正數值!』如前面所說的,由於 PRI 是越小越快被執行,而由於我們加入 nice 值之後,將使得 PRI 變為:
    • PRI(new) = PRI(old) + nice
    呵呵!如此一來,則當 nice 值為負值的時候,那麼該程序將會提前被執行!就是變的優先處理囉!這個概念需要特別的注意!另外,這裡也需要注意的是:『只有具有 root 權限的身份者,可以將程序的 nice 調為負值』一般而言,我們可以這樣說:
    • 一般使用者可用 nice 值 : 0 ~ 19
    • root 管理員可用 nice 值: -20 ~ 19
    沒錯!就是這樣!底下我們來談一談,如何在:
    1. 程序一開始就給予一個 nice 值;與
    2. 改變正執行中的程序之 nice 值

    • nice

    • 語法
      [root @test /root ]# nice [-n number] command
      參數說明:
      -n :就是後面那個 number 即為 nice 值!
      範例:
      [root @test /root]# nice -n -5 find / -name core > /tmp/core
      說明
      就如同前面說的, nice 是用來調整程序的執行優先順序!這裡只是一個執行的範例罷了!通常什麼時候要將 nice 值調大呢?
      • 一些非重要的程序之進行:例如備份工作!由於備份工作相當的耗系統資源,這個時候就可以將備份的指令之 nice 值調大一些,可以使系統的支援分配的更為公平!

    • renice

    • 語法
      [root @test /root ]# renice [number] PID
      參數說明:
      範例:
      [root @test /root]# ps -aux
      [root @test /root]# renice 5 234
      說明
      這個 renice 的功能就不太一樣了!由於 renice 是『將一個正在進行當中的程序的優先順序降低』,所以必須要:
        先取得該程序的 PID 才行!
      所以囉,通常 renice 都與 ps 相互配合才對!先找處某個程序的 PID 之後,才來重新的設定其 nice 值!

    訊息管理

    想要知道開機的時候 Linux 偵測主機的訊息嗎?想知道目前有哪些人在你的機器上嗎?想知道目前的時間嗎?!想瞭解最近某個人登入的時間嗎?!嗯!這都需要使用到一些訊息管理的程式呦!像是 last, who, dmesg 等等!

  • dmesg

  • 語法
    [root @test /root ]# dmesg
    參數說明:
    範例:
    [root @test /root]# dmesg | more
    說明
    在開機的時候你會發現有很多的訊息出現吧,例如 CPU 的形式、硬碟、光碟型號及硬碟分割表等等。但是訊息都是『刷』的一聲就跑過去了!這些訊息有時候對於系統管理員是很重要的,因為他提供了系統的資訊呀!要看這些訊息你可以用 dmesg 這個指令來觀看!加上 |more 的原因是因為訊息太多了,所以可以加入這個管線指令來使畫面暫停!


  • uptime

  • 語法
    [root @test /root ]# uptime
    參數說明:
    範例:
    [root @test /root]# uptime
     11:27pm  up 9 days,  7:12,  1 user,  load average: 0.07, 0.12, 0.14
    說明
    知不知道你的 Linux 主機已經開機多久了?還有,過去 1, 5, 15 分鐘的系統平均 loading 是多少呢?呵呵!使用 uptime 就對了!在上面的例子中,執行 uptime 之後,顯示目前時間是 11:27pm, 而系統已經開機了 9 天又 7:12 之多,目前有一個使用者在線上,過去 1, 5, 15 分鐘系統平均負荷為 0.07, 0.12, 0.14!

  • who  &  w

  • 語法
    [root @test /root ]# who
    [root @test /root ]# w
    參數說明:
    範例:
    [root @test /root]# who
    root     pts/0    Aug  2 20:43

    [root @test /root]# w
      8:48pm  up 4 days,  5:08,  1 user,  load average: 0.00, 0.00, 0.00
    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
    root     pts/0    192.168.1.2       8:43pm  0.00s  0.38s   ?     -

    說明
    這是用來視察目前在系統上的使用者指令,你也可以使用 w 這個指令來下達動作。基本上,who 與 w 的功能是相同的,只是 who 僅列出使用者名稱與登入時間,至於 w 則會列出使用者的
    • 來源位址(IP):就是 FROM 那一項即是IP;
    • 登入時間:即是 LOGIN@ 那一項;
    • 工作項目:就是 WHAT 那一項!
    此外,不知道你有沒有發現,在使用 w 的時候,開頭會有一個訊息,『 8:48m up 4days ....』那個是 uptime 的輸出結果!

  • whoami

  • 語法
    [root @test /root ]# whoami
    參數說明:
    範例:
    [root @test /root]# whoami
    test
    說明
    如果您是一位稱職的系統管理員,那麼您應該曉得盡量不要使用 root 登入系統這件事吧!那麼如何管理系統呢?!可以使用 su 或者是 sudo 來管理啊!通常我是比較習慣使用 su 啦! OK!那麼您已經是 root 的身份了,不過,可能由於執行程序的關係,常常會忘了到底自己的真實身份,這個時候 whoami 就可以解救你啦!如上面所示,雖然我的身份是 root ,不過,實際上我是 test 的啦!使用 su 變換身份而已!!

  • last

  • 語法
    [root @test /root ]# last
    參數說明:
    -number :number 為數字,如果您的登入訊息太多了,可以使用這個指令!
    範例:
    [test @test /root]# last -5
    test    pts/0        192.168.1.2      Tue Apr  9 20:34 - 20:35  (00:01)
    test    pts/0        192.168.1.2      Tue Apr  9 20:14 - 20:30  (00:15)
    test    ftpd21546    192.168.1.2      Tue Apr  9 02:55 - 03:06  (00:10)
    test    ftpd15813    192.168.1.2      Tue Apr  9 01:20 - 01:21  (00:00)
    test    pts/0        192.168.1.2      Mon Apr  8 20:14 - 00:27  (04:13)
    wtmp begins Tue Apr  2 01:12:26 2002
    說明
    要知道有沒有被入侵,常常使用的就是 last 這個指令囉!包括 ftp, telnet, ssh 都會被紀錄在這個訊息當中,不過目前是只有記錄一個月的量!這個指令真的是不錯用的!常常可以發現是否有不正常的人物登入資訊呢!

  • date

  • 語法
    [root @test /root ]# date [-s] [-R]
    [root @test /root ]# date +[format]
    參數說明:
    -s  :用來設定 Linux 主機時間的參數,如果你的主機時間不對,用這個就對啦!
    -R  :如果發現你的語系是中文的,在純文字模式底下用這個試試看
    +[format]
       %a :星期幾
       %b :月份名稱
       %d :日期
       %y :年份
          :還有很多的參數,請使用 man 自行查詢
    範例:
    [root @test /root]# date +%a" "%b" "%y
    Wed Apr 02
    [root @test /root]# date -s 04/10/2002   <==改變日期
    [root @test /root]# date -s 02:02:00     <==改變時間
    [root @test /root]# clock -r         <==檢查 BIOS 裡面的時間
    [root @test /root]# clock -w         <==將目前 Linux 的時間寫到 BIOS 裡面去!
    說明
    date 簡單的用法是只能查看時間的,不過,更廣義的用法是可以搭配很多種樣式來進行時間輸出的紀錄!此外,在 Linux 底下要更改時間,呵呵呵呵!也需要使用到 date 呦!不過,千萬記得, date 改完時間後,還要使用 clock 將時間記錄在 BIOS 裡面才算是完成了時間修改呦!

  • hostname

  • 語法
    [root @test /root ]# hostname
    參數說明:
    範例:
    [test @test /root]# hostname
    test.adsldns.org
    說明
    很簡單吧!就是用來查看你主機名稱的指令就是了!

    關於網路校時: ntpdate

    您或許偶而會發現這樣的問題:咦!我的 Linux 主機怎麼經過一段時間的運作之後,時間會跑掉?而且有的時候,還會跑掉的蠻嚴重的!這是因為我們 Linux 系統的時間記錄器與 BIOS 的時間記錄器,可能與真實的、我們使用的時間有點差異,這種差異在短時間內差異性並不明顯,但若延長到一年、兩年以上,那麼日積月累下來,呵呵!時間差異性甚至可以達到小時?因此,這個時候以網路上合法的而且具有公信力的時間伺服器( time server )來校正你的 linux 主機時間,就有其必要性囉!那麼該如何校正呢?很簡單啦!由於 time server 已經在網路上面可以找到啦,台灣地區可以使用底下這一部 time server :
    time.stdtime.gov.tw
    那麼網路校時使用哪一個 port 呢?就是 123 這個 port ,而使用的軟體就是 ntpdate 這一支程式!在 Mandrake 當中,很抱歉的,預設還是沒有安裝這個套件,所以,請趕快將 CD 拿出來,放入 CDROM ,並且 mount 上他,然後以十八章教的 RPM 程式安裝他吧!之後就可以使用囉!

    基本上,網路校時需要兩個步驟:

    1. 由 time.stdtime.gov.tw 取得最新的時間,並即時更新 Linux 系統時間;
    2. 更改 BIOS 的時間。
    所以整個方法只要執行兩行即可搞定:
     
    [root @test root]# ntpdate time.stdtime.gov.tw
    [root @test root]# clock –w

    如果還想要讓系統自動去更新時間的話,哈哈!對啦!那個 /etc/crontab 不要忘記了!將底下這一行寫入 /etc/crontab 當中:

    10 5 * * 0,3  root /usr/sbin/ntpdate time.stdtime.gov.tw; clock -w
    這樣一來,每星期三、日的五點,系統就會自動的去更新您 Linux 的時間囉!讚!

    本章習題練習 ( 要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看)

    • 我今天想要查詢 /etc/crontab 與 crontab 這個程式的用法與寫法,請問我該如何線上查詢?

    • 答:
        查詢 crontab 指令可以使用 man crontab 或 info crontab ,至於查詢 /etc/crontab ,則可以使用 man 5 crontab囉!
         
    • 我要如何查詢 crond 這個 daemon 的 PID 與他的 PRI 值呢?

    • 答:
        ps –aux | grep crond 即可查到!
         
    • 我要如何修改 crond 這個 PID 的優先執行序?

    • 答:
        在例題二當中我可以找到 crond 的 PID ,藉由 renice –n PID 即可降低 nice 值,亦即提高優先執行的順序!
         
    • 我是一般身份使用者,我是否可以調整不屬於我的程序的 nice 值?此外,如果我調整了我自己的程序的 nice 值到 10 ,是否可以將他調回 5 呢?

    • 答:
        不行!一般身份使用者僅能調整屬於自己的 PID 程序,並且,只能將 nice 值一再地調高,並不能調低,所以調整為 10 之後,就不能降回 5 囉!
         
    • 我要怎麼知道我的網路卡在開機的過程中有沒有被捉到?

    • 答:
        可以使用 dmesg 來視察!
    修改歷史:
    • 2002/06/28:第一次完成
    • 2003/02/10:重新編排與加入 FAQ
    伺服器篇文件
    各版本彙整說明
    CentOS 6.x