linux是個(gè)多用戶系統(tǒng),有時(shí)候也要了解其他用戶現(xiàn)在在干什么,所以在本節(jié)中還將接觸多用戶方面的
內(nèi)容。同時(shí)Linux是一個(gè)多進(jìn)程系統(tǒng),經(jīng)常需要對(duì)這些進(jìn)程進(jìn)行一些調(diào)配和管理;而要進(jìn)行管理,首先就要知
道現(xiàn)在的進(jìn)程情況:究竟有哪些進(jìn)程?進(jìn)程情況如何?等等。所以需要進(jìn)程查看方面的工作。
who命令
該命令主要用于查看當(dāng)前在線上的用戶情況。這個(gè)命令非常有用。如果用戶想和其他用戶建立即時(shí)通訊,比如使用talk命令,那么首先要確定的就是該用戶確實(shí)
在線上,不然talk進(jìn)程就無法建立起來。又如,系統(tǒng)管理員希望監(jiān)視每個(gè)登錄的用戶此時(shí)此刻的所作所為,也要使用who命令。
who命令的常用語法格式如下:
who [imqsuwHT] [--count] [--idle] [--heading] [--help]
[--message] [--mesg] [--version] [--writable] [file] [am i]
所有的選項(xiàng)都是可選的,也就是說可以單獨(dú)使用who命令。不使用任何選項(xiàng)時(shí),who命令將顯示以下三項(xiàng)內(nèi)容:
login name:登錄用戶名;
terminal line:使用終端設(shè)備;
login time:登錄到系統(tǒng)的時(shí)間。
如果給出的是兩個(gè)非選項(xiàng)參數(shù),那么who命令將只顯示運(yùn)行who程序的用戶名、登錄終端和登錄時(shí)間。
通常這兩個(gè)參數(shù)是“am i”,即該命令格式為:“who am i”。
下面對(duì)who命令的常用參數(shù)進(jìn)行說明。
-m 和“who am i”的作用一樣,顯示運(yùn)行該程序的用戶名。
-q,--count
只顯示用戶的登錄帳號(hào)和登錄用戶的數(shù)量,該選項(xiàng)優(yōu)先級(jí)高于其他任何選項(xiàng)。
-s 忽略。主要是用于和其他版本的who命令兼容。
-i,-u,--idle
在登錄時(shí)間后面顯示該用戶最后一次對(duì)系統(tǒng)進(jìn)行操作至今的時(shí)間,也就是常說的
“發(fā)呆”時(shí)間。其中“.”符號(hào)代表該用戶在前1秒仍然處于活動(dòng)狀態(tài);“old”則表示該用戶空閑已經(jīng)超過了24小時(shí)。
-H,--heading 顯示一行列標(biāo)題。常用的標(biāo)題如表4-2所示。
表4-2 who命令輸出常用標(biāo)題
標(biāo) 題
說 明
USER
用戶登錄帳號(hào)
LINE
用戶登錄使用終端
LOGIN-TIME
用戶登錄時(shí)間
IDLE
用戶空閑 洌次唇脅僮韉氖奔?
PID
用戶登錄shell的進(jìn)程ID
FROM
用戶網(wǎng)絡(luò)地址
-w,-T--mesg,--message,--writable
和-s選項(xiàng)一樣,在登錄帳號(hào)后面顯示一個(gè)字符來表示用戶的信息狀態(tài):
+:允許寫信息;
-:不允許寫信息;
?:不能找到終端設(shè)備。
--help 在標(biāo)準(zhǔn)輸出上顯示幫助信息。
--version 在標(biāo)準(zhǔn)輸出上顯示版本信息。
下面介紹who命令的一些基本用法。
如果需要查看在系統(tǒng)上究竟有哪些用戶,可以直接使用who命令。
[例17] 查看登錄到系統(tǒng)的用戶情況
$ 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)
可以看到,現(xiàn)在系統(tǒng)一共有四個(gè)用戶.
一般來說,這樣就可以了解登錄用戶的大致情況了。但有時(shí)上面的顯示不是那么直觀,因?yàn)闆]有標(biāo)題
說明,不容易看懂,這時(shí)就需要使用-H選項(xiàng)了。
[例18] 查看登錄用戶的詳細(xì)情況,鍵入:
$ 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選項(xiàng)指定顯示用戶空閑時(shí)間,所以可以看到多了一項(xiàng)IDLE。第一個(gè)root用戶的IDLE項(xiàng)
是一個(gè)“.”,這就說明該用戶在前1秒仍然是活動(dòng)的,而其他用戶后面都有一個(gè)時(shí)間,稱為空閑時(shí)間。
最后來看看使用“who am i”格式命令的結(jié)果:
233.river.net!root tty1 Mar 17 13:49
可見只顯示出了運(yùn)行該who命令的用戶情況,當(dāng)然這時(shí)候不存在空閑時(shí)間。
who命令應(yīng)用起來非常簡(jiǎn)單,可以比較準(zhǔn)確地掌握用戶的情況,所以使用非常廣泛。
w命令
該命令也用于顯示登錄到系統(tǒng)的用戶情況,但是與who不同的是,w命令功能更加強(qiáng)大,它不但可以顯示有誰登錄到系統(tǒng),還可以顯示出這些用戶當(dāng)前正在進(jìn)行的工作,并且臣剖菹嘍詗ho命令來說更加詳細(xì)和科學(xué),可以認(rèn)為w命令就是who命令的一個(gè)增強(qiáng)版。
w命令的顯示項(xiàng)目按以下順序排列:當(dāng)前時(shí)間,系統(tǒng)啟動(dòng)到現(xiàn)在的時(shí)間,登錄用戶的數(shù)目,系統(tǒng)在最近1秒、5秒和15秒的平均負(fù)載。然后是每個(gè)用戶的各項(xiàng)數(shù)
據(jù),項(xiàng)目顯示順序如下:登錄帳號(hào)、終端名稱、遠(yuǎn)程主機(jī)名、登錄時(shí)間、空閑時(shí)間、JCPU、PCPU、當(dāng)前正在運(yùn)行進(jìn)程的命令行。
其中JCPU時(shí)間指的是和該終端(tty)連接的所有進(jìn)程占用的時(shí)間。這個(gè)時(shí)間里并不包括過去的后臺(tái)作業(yè)時(shí)間,但卻包括當(dāng)前正在運(yùn)行的后臺(tái)作業(yè)所占用的時(shí)間。而PCPU時(shí)間則是指當(dāng)前進(jìn)程(即在WHAT項(xiàng)中顯示的進(jìn)程)所占用的時(shí)間。下面介紹該命令的具體用法和參數(shù)。
語法格式如下:
w -[husfV] [user]
下面對(duì)參數(shù)進(jìn)行說明:
-h 不顯示標(biāo)題。
-u
當(dāng)列出當(dāng)前進(jìn)程和CPU時(shí)間時(shí)忽略用戶名。這主要是用于執(zhí)行su命令后的情況。
-s 使用短模式。不顯示登錄時(shí)間、JCPU和PCPU時(shí)間。
-f
切換顯示FROM項(xiàng),也就是遠(yuǎn)程主機(jī)名項(xiàng)。默認(rèn)值是不顯示遠(yuǎn)程主機(jī)名,當(dāng)然系統(tǒng)管理員可以對(duì)源文件
作一些修改使得顯示該項(xiàng)成為默認(rèn)值。
-V 顯示版本信息。
User 只顯示指定用戶的相關(guān)情況。
[例19] 顯示當(dāng)前登錄到系統(tǒng)的用戶的詳細(xì)情況
$ 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簡(jiǎn)介
前面介紹的兩個(gè)命令都是用于查看當(dāng)前系統(tǒng)用戶的情況,下面就來看看進(jìn)程的情況,這也是本章的主題。要對(duì)進(jìn)程進(jìn)行監(jiān)測(cè)和控制,首先必須要了解當(dāng)前進(jìn)程的情
況,也就是需要查看當(dāng)前進(jìn)程,而ps命令就是最基本同時(shí)也是非常強(qiáng)大的進(jìn)程查看命令。使用該命令可以確定有哪些進(jìn)程正在運(yùn)行和運(yùn)行的狀態(tài)、進(jìn)程是否結(jié)束、
進(jìn)程有沒有僵死、哪些進(jìn)程占用了過多的資源等等。總之大部分信息都是可以通過執(zhí)行該命令得到的。
2. ps命令及其參數(shù)
ps命令最常用的還是用于監(jiān)控后臺(tái)進(jìn)程的工作情況,因?yàn)楹笈_(tái)進(jìn)程是不和屏幕鍵盤這些標(biāo)準(zhǔn)輸入/輸出設(shè)
備進(jìn)行通信的,所以如果需要檢測(cè)其情況,便可以使用ps命令了。
該命令語法格式如下:
ps [選項(xiàng)]
下面對(duì)命令選項(xiàng)進(jìn)行說明:
-e 顯示所有進(jìn)程。
-f 全格式。
-h 不顯示標(biāo)題。
-l 長(zhǎng)格式。
-w 寬輸出。
a 顯示終端上的所有進(jìn)程,包括其他用戶的進(jìn)程。
r 只顯示正在運(yùn)行的進(jìn)程。
x 顯示沒有控制終端的進(jìn)程。
O[+|-] k1 [,[+|-] k2 [,…]] 根據(jù)SHORT
KEYS、k1、k2中快捷鍵指定的多級(jí)排序順序顯示進(jìn)程列表。對(duì)于ps的不同格式都存在著默認(rèn)的順序指定。這些默認(rèn)順序可以被用戶的指定所覆蓋。其中“+”字符是可選
的,“-”字符是倒轉(zhuǎn)指定鍵的方向。
pids
只列出付ń痰那榭觥8鶻蘄D之間使用逗號(hào)分隔。該進(jìn)程列表必須在命令行參數(shù)的最后一個(gè)選項(xiàng)
后面緊接著給出,中間不能插入空格。比如:ps -f1,4,5。
以下介紹長(zhǎng)命令行選項(xiàng),這些選項(xiàng)都使用“--”開頭:
--sort X[+|-] key [,[+|-] key [,…]] 從SORT
KEYS段中選一個(gè)多字母鍵。“+”字符是可選的,因?yàn)槟J(rèn)的方向就是按數(shù)字升序或者詞典順序。比如:
ps -jax -sort=uid,-ppid,+pid。
--help 顯示幫助信息。
--version 顯示該命令的版本信息。
在前面的選項(xiàng)說明中提到了排序鍵,接下來對(duì)排序鍵作進(jìn)一步說明。需要注意的是排序中使用的值是ps使
用的內(nèi)部值,并非僅用于某些輸出格式的偽值。排序鍵列表見表4-3。
表4-3 排序鍵列表
短格式
長(zhǎng)格式
說 明
c
cmd
可執(zhí)行的簡(jiǎn)單名稱
C
cmdline
完整命令行
f
flags
長(zhǎng)模式標(biāo)志
g
pgrp
進(jìn)程的組ID
G
tpgid
控制tty進(jìn)程組ID
j
cutime
累計(jì)用戶時(shí)間
J
cstime
累計(jì)系統(tǒng)時(shí)間
k
utime
用戶時(shí)間
K
stime
系統(tǒng)時(shí)間
m
min_flt
次要頁錯(cuò)誤的數(shù)量
M
maj_flt
主要頁錯(cuò)誤的數(shù)量
n
cmin_flt
累計(jì)次要頁錯(cuò)誤
N
cmaj_flt
累計(jì)主要頁錯(cuò)誤
o
session
對(duì)話ID
p
pid
進(jìn)程ID
P
ppid
父進(jìn)程ID
r
rss
駐留大小
R
resident
駐留頁
s
size
內(nèi)存大小(千字節(jié))
S
share
共享頁的數(shù)量
t
tty
tty次要設(shè)備號(hào)
T
start_time
進(jìn)程啟動(dòng)的時(shí)間
U
uid
UID
u
user
用戶名
v
vsize
總的虛擬內(nèi)存數(shù)量(字節(jié))
y
priority
內(nèi)核調(diào)度優(yōu)先級(jí)
3. 常用ps命令參數(shù)
前面兩節(jié)介紹的參數(shù)可能讓讀者覺得有些可怕,實(shí)際上這是一個(gè)非常容易使用的命令,一般的用戶只
需掌握一些最常用的命令參數(shù)就可以了。
最常用的三個(gè)參數(shù)是u、a、x,下面將通過例子來說明其具體用法。
[例20] 以root身份登錄系統(tǒng),查看當(dāng)前進(jìn)程狀況
$ ps
PID TTY TIME COMMAND
5800 ttyp0 00:00:00 bash
5835 ttyp0 00:00:00 ps
可以看到,顯示的項(xiàng)目共分為四項(xiàng),依次為PID(進(jìn)程ID)、TTY(終端名稱)、TIME(進(jìn)程執(zhí)行時(shí)間)
、COMMAND(該進(jìn)程的命令行輸入)。
可以使用u選項(xiàng)來查看進(jìn)程所有者及其他一些詳細(xì)信息,如下所示:
$ 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進(jìn)程前面有條橫線,意味著該進(jìn)程便是用戶的登錄shell,所以對(duì)于一個(gè)登錄用戶來說帶短橫線的進(jìn)
程只有一個(gè)。還可以看到%CPU、%MEM兩個(gè)選項(xiàng),前者指該進(jìn)程占用的CPU時(shí)間和總時(shí)間的百分比;后者指該進(jìn)程
占用的內(nèi)存和總內(nèi)存的百分比。
在這種情況下看到了所有控制終端的進(jìn)程;但是對(duì)于其他那些沒有控制終端的進(jìn)程還是沒有觀察到,所以這
時(shí)就需要使用x選項(xiàng)。使用x選項(xiàng)可以觀察到所有的進(jìn)程情況。