LINUX(十二) Linux程式檢視

楊奇龍發表於2010-06-01

  
  本節中要介紹的不只是程式檢視方面的內容,由於Linux是個多使用者系統,有時候也要了解其他使用者現在在幹什麼,所以在本節中還將接觸多使用者方面的內容。同時Linux是一個多程式系統,經常需要對這些程式進行一些調配和管理;而要進行管理,首先就要知道現在的程式情況:究竟有哪些程式?程式情況如何?等等。所以需要程式檢視方面的工作。
  who命令
  該命令主要用於檢視當前線上上的使用者情況。這個命令非常有用。如果使用者想和其他使用者建立即時通訊,比如使用talk命令,那麼首先要確定的就是該使用者確實線上上,不然talk程式就無法建立起來。又如,系統管理員希望監視每個登入的使用者此時此刻的所作所為,也要使用who命令。
  who命令的常用語法格式如下:
  who [imqsuwHT] [--count] [--idle] [--heading] [--help] [--message] [--mesg] [--version] [--writable] [file] [am i]
  所有的選項都是可選的,也就是說可以單獨使用who命令。
  不使用任何選項時,who命令將顯示以下三項內容:
  login name:登入使用者名稱;
  terminal line:使用終端裝置;
  login time:登入到系統的時間。
  如果給出的是兩個非選項引數,那麼who命令將只顯示執行who程式的使用者名稱、登入終端和登入時間。通常這兩個引數是“am i”,即該命令格式為:“who am i”。

  下面對who命令的常用引數進行說明。
  -m 和“who am i”的作用一樣,顯示執行該程式的使用者名稱。
  -q,--count 只顯示使用者的登入帳號和登入使用者的數量,該選項優先順序高於其他任何選項。
  -s 忽略。主要是用於和其他版本的who命令相容。
  -i,-u,--idle 在登入時間後面顯示該使用者最後一次對系統進行操作至今的時間,也就是常說的“發呆”時間。
  -H,--heading 顯示一行列標題。常用的標題如表4-2所示。
  表4-2who命令輸出常用標題
  標 題
  說 明
  USER
  使用者登入帳號
  LINE
  使用者登入使用終端
  LOGIN-TIME
  使用者登入時間
  IDLE
  使用者空閒時間,即未進行操作的時間
  PID
  使用者登入shell的程式ID
  FROM
  使用者網路地址

  -w,-T--mesg,--message,--writable 和-s選項一樣,在登入帳號後面顯示一個字元來表示使用者的資訊狀態:


  +:允許寫資訊;

  -:不允許寫資訊;

  ?:不能找到終端裝置。

  --help 在標準輸出上顯示幫助資訊。

  --version 在標準輸出上顯示版本資訊。

  下面介紹who命令的一些基本用法。
  如果需要檢視在系統上究竟有哪些使用者,可以直接使用who命令。
  [例17] 檢視登入到系統的使用者情況
  $ who
  root tty1 Mar 17 13:49
  foxy tty2 Mar 17 13:49
  root tty3 Mar 17 13:49
  bbs ttyp0 Mar 17 13:49 (river.net)

  可以看到,現在系統一共有四個使用者。第一列是登入使用者的帳號;第二列是登入所使用的終端;第三列是登入時間;第四列是使用者從什麼地方登入的網路地址,這裡是域名。

  一般來說,這樣就可以瞭解登入使用者的大致情況了。但有時上面的顯示不是那麼直觀,因為沒有標題說明,不容易看懂,這時就需要使用-H選項了。
  [例18] 檢視登入使用者的詳細情況,鍵入:
  $ who -uH
  顯示如下:

  USER LINE LOGIN-TIME IDLE FROM
  root tty1 Mar 17 13:49
  foxy tty2 Mar 17 13:49 00:01
  root tty3 Mar 17 13:49 00:01
  bbs ttyp0 Mar 17 13:49 00:01 (river.net)

  這樣一目瞭然。其中-u選項指定顯示使用者空閒時間,所以可以看到多了一項IDLE。第一個root使用者的IDLE項是一個“.”,這就說明該使用者在前1秒仍然是活動的,而其他使用者後面都有一個時間,稱為空閒時間。
  最後來看看使用“who am i”格式命令的結果:
  233.river.net!root tty1 Mar 17 13:49
  可見只顯示出了執行該who命令的使用者情況,當然這時候不存在空閒時間。
  who命令應用起來非常簡單,可以比較準確地掌握使用者的情況,所以使用非常廣泛。
  w命令

  該命令也用於顯示登入到系統的使用者情況,但是與who不同的是,w命令功能更加強大,它不但可以顯示有誰登入到系統,還可以顯示出這些使用者當前正在進行的工作,並且統計資料相對who命令來說更加詳細和科學,可以認為w命令就是who命令的一個增強版。
  w命令的顯示專案按以下順序排列:當前時間,系統啟動到現在的時間,登入使用者的數目,系統在最近1秒、5秒和15秒的平均負載。然後是每個使用者的各項資料,專案顯示順序如下:登入帳號、終端名稱、遠端主機名、登入時間、空閒時間、JCPU、PCPU、當前正在執行程式的命令列。
  其中JCPU時間指的是和該終端(tty)連線的所有程式佔用的時間。這個時間裡並不包括過去的後臺作業時間,但卻包括當前正在執行的後臺作業所佔用的時間。而PCPU時間則是指當前程式(即在WHAT項中顯示的程式)所佔用的時間。下面介紹該命令的具體用法和引數。
  語法格式如下:
  w -[husfV] [user]
  下面對引數進行說明:
  -h 不顯示標題。
  -u 當列出當前程式和CPU時間時忽略使用者名稱。這主要是用於執行su命令後的情況。
  -s 使用短模式。不顯示登入時間、JCPU和PCPU時間。
  -f 切換顯示FROM項,也就是遠端主機名項。預設值是不顯示遠端主機名,當然系統管理員可以對原始檔作一些修改使得顯示該項成為預設值。
  -V 顯示版本資訊。
  User 只顯示指定使用者的相關情況。
  [例19] 顯示當前登入到系統的使用者的詳細情況
  $ w
  2:50pm up 2 min, 4 users, load average:0.22,0.16,0.06
  USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
  root tty1 2:49pm 0:00s 0.56s 0.10s w
  foxy tty2 2:49pm 1:09 0.42s 0.42s bash
  root tty3 2:49pm 46.00s 0.67s 0.25s telnet bbs3
  bbs ttyp0 river.net 2:49pm 45.00s 0.49s 0.49s bbs h river.net

  ps命令
  1. ps簡介
  前面介紹的兩個命令都是用於檢視當前系統使用者的情況,下面就來看看程式的情況,這也是本章的主題。要對程式進行監測和控制,首先必須要了解當前程式的情況,也就是需要檢視當前程式,而ps命令就是最基本同時也是非常強大的程式檢視命令。使用該命令可以確定有哪些程式正在執行和執行的狀態、程式是否結束、程式有沒有僵死、哪些程式佔用了過多的資源等等。總之大部分資訊都是可以透過執行該命令得到的。
  2. ps命令及其引數
  ps命令最常用的還是用於監控後臺程式的工作情況,因為後臺程式是不和螢幕鍵盤這些標準輸入/輸出裝置進行通訊的,所以如果需要檢測其情況,便可以使用ps命令了。
  該命令語法格式如下:
  ps [選項]
  下面對命令選項進行說明:
  -e 顯示所有程式。
  -f 全格式。
  -h 不顯示標題。
  -l 長格式。
  -w 寬輸出。
  a 顯示終端上的所有程式,包括其他使用者的程式。
  r 只顯示正在執行的程式。
  x 顯示沒有控制終端的程式。
  O[+|-] k1 [,[+|-] k2 [,…]] 根據SHORT KEYS、k1、k2中快捷鍵指定的多級排序順序顯示程式列表。對於ps的不同格式都存在著預設的順序指定。這些預設順序可以被使用者的指定所覆蓋。其中“+”字元是可選的,“-”字元是倒轉指定鍵的方向。
  pids 只列出指定程式的情況。各程式ID之間使用逗號分隔。該程式列表必須在命令列引數的最後一個選項後面緊接著給出,中間不能插入空格。比如:ps -f1,4,5。
  以下介紹長命令列選項,這些選項都使用“--”開頭:
  --sort X[+|-] key [,[+|-] key [,…]] 從SORT KEYS段中選一個多字母鍵。“+”字元是可選的,因為預設的方向就是按數字升序或者詞典淥承頡1熱紓?ps -jax -sort=uid,-ppid,+pid。
  --help 顯示幫助資訊。
  --version 顯示該命令的版本資訊。

  在前面的選項說明中提到了排序鍵,接下來對排序鍵作進一步說明。需要注意的是排序中使用的值是ps使用的內部值,並非僅用於某些輸出格式的偽值。排序鍵列表見表4-3。

  表4-3 排序鍵列表
  短格式
  長格式
  說 明
  c
  cmd
  可執行的簡單名稱
  C
  cmdline
  完整命令列
  f
  flags
  長模式標誌
  g
  pgrp

  程式的組ID
  G
  tpgid
  控制tty程式組ID
  j
  cutime
  累計使用者時間
  J
  cstime
  累計系統時間
  k
  utime
  使用者時間
  K
  stime
  系統時間
  m
  min_flt
  次要頁錯誤的數量

  M
  maj_flt
  主要頁錯誤的數量
  n
  cmin_flt
  累計次要頁錯誤
  N
  cmaj_flt
  累計主要頁錯誤
  o
  session
  對話ID
  p
  pid
  程式ID
  P
  ppid
  父程式ID
  r
  rss
  駐留大小
  R
  resident
  駐留頁
  s
  size


  記憶體大小(千位元組)

  S
  share
  共享頁的數量

  t
  tty
  tty次要裝置號
  T
  start_time
  程式啟動的時間
  U
  uid
  UID
  u
  user
  使用者名稱
  v
  vsize
  總的虛擬記憶體數量(位元組)
  y
  priority
  核心排程優先順序
  3. 常用ps命令引數
  前面兩節介紹的引數可能讓讀者覺得有些可怕,實際上這是一個非常容易使用的命令,一般的使用者只需掌握一些最常用的命令引數就可以了。 最常用的三個引數是u、a、x,下面將透過例子來說明其具體用法。
  [例20] 以root身份登入系統,檢視當前程式狀況
  $ ps
  PID TTY TIME COMMAND
  5800 ttyp0 00:00:00 bas
  5835 ttyp0 00:00:00 ps
  可以看到,顯示的專案共分為四項,依次為PID(程式ID)、TTY(終端名稱)、TIME(程式執行時間)、COMMAND(該程式的命令列輸入)。
  可以使用u選項來檢視程式所有者及其他一些詳細資訊,如下所示:
  $ ps u
  USER PID %CPU %MEM USZ RSS TTY STAT START TIME COMMAND
  test 5800 0.0 0.4 1892 1040 ttyp0 S Nov27 0:00 -bash
  test 5836 0.0 0.3 2528 856 ttyp0 R Nov27 0:00 ps u

  在bash程式前面有條橫線,意味著該程式便是使用者的登入shell,所以對於一個登入使用者來說帶短橫線的程式只有一個。還可以看到%CPU、%MEM兩個選項,前者指該程式佔用的CPU時間和總時間的百分比;後者指該程式佔用的記憶體和總記憶體的百分比。
  在這種情況下看到了所有控制終端的程式;但是對於其他那些沒有控制終端的程式還是沒有觀察到,所以這時就需要使用x選項。使用x選項可以觀察到所有的程式情況。
  [例21] 下面是使用x選項的例子:
  $ ps x
  PID TTY STAT TIME COMMAND
  5800 ttyp0 S 0:00 -bash
  5813 ttyp1 S 0:00 -bash
  5921 ttyp0 S 0:00 man ps
  5922 ttyp0 S 0:00 sh -c /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz | /
  5923 ttyp0 S 0:00 /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz
  5924 ttyp0 S 0:00 /usr/bin/less -is
  5941 ttyp1 R 0:00 ps x
  可以發現突然一下子就多出了那麼多的程式。這些多出來的程式就是沒有控制終端的程式。 前面看到的所有程式都是test使用者自己的。其實還有許多其他使用者在使用著系統,自然也就對應著其他的很多程式。如果想對這些程式有所瞭解,可以使用a選項來檢視當前系統所有使用者的所有程式。經常使用的是aux組合選項,這可以顯示最詳細的程式情況。

  [例22]
  $ ps aux
  USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  root 1 0.0 0.0 1136 64 ? S Nov25 0:02 init [3]
  root 2 0.0 0.0 0 0 ? SW Nov25 0:00 [kflushd]
  root 3 0.0 0.0 0 0 ? SW Nov25 0:03 [kupdate]
  root 4 0.0 0.0 0 0 ? SW Nov25 0:00 [kpiod]
  root 5 0.0 0.0 0 0 ? SW Nov25 0:00 [kswapd]
  root 163 0.0 0.1 1628 332 ? S Nov25 0:02 sshd
  root 173 0.0 0.0 1324 200 ? S Nov25 0:00 syslogd
  root 181 0.0 0.0 1420 0 ? SW Nov25 0:00 [klogd]
  daemon 191 0.0 0.1 1160 312 ? S Nov25 0:00 /usr/sbin/atd
  root 201 0.0 0.1 1348 492 ? S Nov25 0:00 crond
  root 212 0.0 0.0 1292 68 ? S Nov25 0:00 inetd
  ……
  在顯示的最前面是其他使用者的程式情況,可以看到有root、daemon等使用者以及他們所啟動的程式。 在上面的例子中,介紹了ps命令最常見的一些選項和選項組合,使用者可以根據自己的需要選用。
  top命令
  top命令和ps命令的基本作用是相同的,顯示系統當前的程式和其他狀況;但是top是一個動態顯示過程,即可以透過使用者按鍵來不斷重新整理當前狀態。如果在前臺執行該命令,它將獨佔前臺,直到使用者終止該程式為止。 比較準確的說,top命令提供了實時的對系統處理器的狀態監視。它將顯示系統中CPU最“敏感”的任務列表。該命令可以按CPU使用。記憶體使用和執行時間對任務進行排序;而且該命令的很多特性都可以透過互動式命令或者在個人定製檔案中進行設定。在後面的介紹中將把命令引數和互動命令分開講述。
  下面是該命令的語法格式:
  top [-] [d delay] [q] [c] [s] [S] [i]
  d 指定每兩次螢幕資訊重新整理之間的時間間隔。當然使用者可以使用s互動命令來改變之。
  q 該選項將使top沒有任何延遲的進行重新整理。如果呼叫程式有超級使用者許可權,那麼top將以儘可能高的優先順序執行。
  S 指定累計模式。
  s 使top命令在安全模式中執行。這將去除互動命令所帶來的潛在危險。
  i 使top不顯示任何閒置或者僵死程式。
  c 顯示整個命令列而不只是顯示命令名
  top命令顯示的專案很多,預設值是每5秒更新一次,當然這是可以設定的。
  顯示的各專案為: uptime 該項顯示的是系統啟動時間、已經執行的時間和三個平均負載值(最近1秒,5秒,15秒的負載值)。 processes 自最近一次重新整理以來的執行程式總數。當然這些程式被分為正在執行的,休眠的,停止的等很多種類。程式和狀態顯示可以透過互動命令t來實現。
  CPU states 顯示使用者模式,系統模式,優先順序程式(只有優先順序為負的列入考慮)和閒置等各種情況所佔用CPU時間的百分比。優先順序程式所消耗的時間也被列入到使用者和系統的時間中,所以總的百分比將大於100%。
  Mem 記憶體使用情況統計,其中包括總的可用記憶體,空閒記憶體,已用記憶體,共享記憶體和快取所佔記憶體的情況。
  Swap 交換空間統計,其中包括總的交換空間,可用交換空間,已用交換空間。
  PID 每個程式的ID。
  PPID 每個程式的父程式ID。
  UID 每個程式所有者的UID 。
  USER 每個程式所有者的使用者名稱。
  PRI 每個程式的優先順序別。
  NI 該程式的優先順序值。
  SIZE 該程式的程式碼大小加上資料大小再加上堆疊空間大小的總數。單位是KB。
  TSIZE 該程式的程式碼大小。對於核心程式這是一個很奇怪的值。
  DSIZE 資料和堆疊的大小。
  TRS 文字駐留大小。
  D 被標記為“不乾淨”的頁專案。
  LIB 使用的庫頁的大小。對於ELF程式沒有作用。
  RSS 該程式佔用的實體記憶體的總數量,單位是KB。
  SHARE 該程式使用共享記憶體的數量。
  STAT 該程式的狀態。
  其中S代表休眠狀態;
  D代表不可中斷的休眠狀態;
  R代表執行狀態;
  Z代表僵死狀態;
  T代表停止或跟蹤狀態。
  TIME 該程式自啟動以來所佔用的總CPU時間。如果進入的是累計模式,那麼該時間還包括這個程式子程式所佔用的時間。且標題會變成CTIME。

  %CPU 該程式自最近一次重新整理以來所佔用的CPU時間和總時間的百分比。
  %MEM 該程式佔用的實體記憶體佔總記憶體的百分比。
  COMMAND 該程式的命令名稱,如果一行顯示不下,則會進行擷取。記憶體中的程式會有一個完整的命令列。

  下面介紹在top命令執行過程中可以使用的一些互動命令。從使用角度來看,熟練的掌握這些命令比掌握選項還重要一些。這些命令都是單字母的,如果在命令列選項中使用了s選項,則可能其中一些命令會被遮蔽掉。
   立即重新整理顯示。
  Ctrl+L 擦除並且重寫螢幕。
  h或者? 顯示幫助畫面,給出一些簡短的命令總結說明。
  k 終止一個程式。系統將提示使用者輸入需要終止的程式PID,以及需要傳送給該程式什麼樣的訊號。一般的終止程式可以使用15訊號;如果不能正常結束那就使用訊號9強制結束該程式。預設值是訊號15。在安全模式中此命令被遮蔽。
  i 忽略閒置和僵死程式。這是一個開關式命令。
  q 退出程式。
  r 重新安排一個程式的優先順序別。系統提示使用者輸入需要改變的程式PID以及需要設定的程式優先順序值。輸入一個正值將使優先順序降低,反之則可以使該程式擁有更高的優先權。預設值是10。
  S 切換到累計模式。
  s 改變兩次重新整理之間的延遲時間。系統將提示使用者輸入新的時間,單位為s。如果有小數,就換算成m s。輸入0值則系統將不斷重新整理,預設值是5 s。需要注意的是如果設定太小的時間,很可能會引起不斷重新整理,從而根本來不及看清顯示的情況,而且系統負載也會大大增加。
  f或者F 從當前顯示中新增或者刪除專案。
  o或者O 改變顯示專案的順序。
  l 切換顯示平均負載和啟動時間資訊。
  m 切換顯示記憶體資訊。
  t 切換顯示程式和CPU狀態資訊。
  c 切換顯示命令名稱和完整命令列。
  M 根據駐留記憶體大小進行排序。
  P 根據CPU使用百分比大小進行排序。
  T 根據時間/累計時間進行排序。
  W 將當前設定寫入~/.toprc檔案中。這是寫top配置檔案的推薦方法。

  從上面的介紹中可以看到,top命令是一個功能十分強大的監控系統的工具,尤其對於系統管理員而言更是如此。一般的使用者可能會覺得ps命令其實就夠用了,但是top命令的強勁功能確實提供了不少方便。下面來看看實際使用的情況。
  [例23] 鍵入top命令檢視系統狀況
  $ top

  1:55pm up 7 min, 4 user, load average:0.07,0.09,0.06
  29 processes:28 sleeping, 1 running, 0 zombie, 0 stopped
  CPU states: 4.5% user, 3.6% system, 0.0% nice, 91.9% idle
  Mem: 38916K av, 18564K used, 20352K free, 11660K shrd, 1220K buff
  Swap: 33228K av, 0K used, 33228K free, 11820K cached
  PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND
  363 root 14 0 708 708 552 R 0 8.1 1.8 0:00 top
  1 root 0 0 404 404 344 S 0 0.0 1.0 0:03 init
  2 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kflushd
  3 root -12 -12 0 0 0 SW< 0 0.0 0.0 0:00 kswapd
  4 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 md_thread
  5 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 md_thread
  312 root 1 0 636 636 488 S 0 0.0 1.6 0:00 telnet
  285 root 6 0 1140 1140 804 S 0 0.0 2.9 0.00 bash
  286 root 0 0 1048 1048 792 S 0 0.0 2.6 0.00 bash
  25 root 0 0 364 364 312 S 0 0.0 0.9 0.00 kerneld
  153 root 0 0 456 456 372 S 0 0.0 1.1 0.00 syslogd
  160 root 0 0 552 552 344 S 0 0.0 1.4 0.00 klogd
  169 daemon 0 0 416 416 340 S 0 0.0 1.0 0.00 atd
  178 root 2 0 496 496 412 S 0 0.0 1.2 0.00 crond
  187 bin 0 0 352 352 284 S 0 0.0 0.9 0.00 portmap
  232 root 0 0 500 500 412 S 0 0.0 1.2 0.00 rpc.mountd
  206 root 0 0 412 412 344 S 0 0.0 1.0 0.00 inetd
  215 root 0 0 436 436 360 S 0 0.0 1.1 0.00 icmplog
  第一行的專案依次為當前時間、系統啟動時間、當前系統登入使用者數目、平均負載。第二行為程式情況,依次為程式總數、休眠程式數、執行程式數、僵死程式數、終止程式數。第三行為CPU狀態,依次為使用者佔用、系統佔用、優先程式佔用、閒置程式佔用。第四行為記憶體狀態,依次為平均可用記憶體、已用記憶體、空閒記憶體、共享記憶體、快取使用記憶體。第五行為交換狀態,依次為平均可用交換容量、已用容量、閒置容量、快取記憶體容量。然後下面就是和ps相仿的各程式情況列表了。
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-664168/,如需轉載,請註明出處,否則將追究法律責任。

相關文章