首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

每天一搬(2):程序管理

2012-07-23 
每日一搬(2):程序管理?程序观察:ps? top? pstree?ps : 观察程序的执行情况,特别zombile程序?SIGHUP的发音

每日一搬(2):程序管理

?

程序观察:ps? top? pstree

?

ps : 观察程序的执行情况,特别zombile程序

?

SIGHUP的发音是“sig-hup”,是signal hangup的缩写,含义是“中止信号”。你如何发送一个SIGHUP信号呢?这里有几种方式:

#

# kill -1 [pid]

# killall -1 [process-name]

?

?

?

系统资源的观察:free uname? uptime? netstat? dmesg dar

?

?

--------------------------------------------
free
[root@linux ~]# free [-b|-k|-m|-g] [-t]
參數:
-b??:直接輸入 free 時,顯示的單位是 Kbytes,我們可以使用 b(bytes), m(Mbytes)
? ?? ?k(Kbytes), 及 g(Gbytes) 來顯示單位喔!
-t??:在輸出的最終結果,顯示實體記憶體與 swap 的總量。
範例:
範例一:顯示目前系統的記憶體容量
[root@linux ~]# free -m
? ?? ?? ?? ? total? ?? ? used? ?? ? free? ???shared? ? buffers? ???cached
Mem:? ?? ?? ???376? ?? ???366? ?? ?? ?10? ?? ?? ? 0? ?? ???129? ?? ?? ?94
-/+ buffers/cache:? ?? ???141? ?? ???235
Swap:? ?? ?? ? 996? ?? ?? ? 0? ?? ???995
仔細看看,我的系統當中有 384 MB 左右的實體記憶體,我的 swap 有 1GB 左右, 那我使用 free -m
以 MBytes 來顯示時,就會出現上面的資訊。Mem 那一行顯示的是實體記憶體的量, Swap 則是虛擬記
憶體的量。 total 是總量, used 是已被使用的量, free 則是剩餘可用的量。 後面的
shared/buffers/cached 則是在已被使用的量當中,用來作為緩衝及快取的量。
仔細的看到範例一的輸出喔,我的 Linux 主機是很平凡的,根本沒有什麼工作, 但是,我的實體記憶
體是幾乎被用光光的情況呢!不過,至少有 129 MB 用在緩衝記憶工作, 94 MB 則用在快取工作,也就
是說,系統是『很有效率的將所有的記憶體用光光』, 目的是為了讓系統的存取效能加速啦!
很多朋友都會問到這個問題『我的系統明明很輕鬆,為何記憶體會被用光光?』 現在瞭了吧?沒有錯!
被用光是正常的!而需要注意的反而是 swap 的量。一般來說, swap 最好不要被使用,尤其 swap 最
好不要被使用超過 20% 以上, 如果您發現 swap 的用量超過 20% ,那麼,最好還是買實體記憶體來插
吧! 因為, Swap 的效能跟實體記憶體實在差很多,而系統會使用到 swap , 絕對是因為實體記憶體
不足了才會這樣做的!如此,瞭解吧!

--------------------------------------------
uname
[root@linux ~]# uname [-asrmpi]
參數:
-a??:所有系統相關的資訊;
-s??:系統核心名稱
-r??:核心的版本
-m??:本系統的硬體名稱
-p??:CPU 的類型
-i??:硬體的平台 (ix86)
範例:
範例一:輸出系統的基本資訊
[root@linux ~]# uname -a
Linux linux.site 2.6.12-1.1398_FC4 #1 Fri Jul 15 00:52:32 EDT 2005
i686 i686 i386 GNU/Linux
這個咚咚我們前面使用過很多次了喔!uname 可以列出目前系統的核心版本、 主要硬體平台以及 CPU
類型等等的資訊。以上面範例一的狀態來說,我的 Linux 主機使用的核心名稱為 Linux,而主機名稱為
linux.site,核心的版本為 2.6.12-1.1398_FC4,該核心版本建立的日期為 2005/07/15, 適用的硬體
平台為 i386 以上等級的硬體平台喔。

--------------------------------------------
uptime
這個指令很單純呢!就是顯示出目前系統已經開機多久的時間,以及 1, 5, 15 分鐘的平均負載就是了
。還記得 top 吧?沒錯啦! 這個 uptime 可以顯示出 top 畫面的最上面一行!
[root@linux ~]# uptime
18:06:30 up 52 days,??6:40,??1 user,??load average: 0.00, 0.00, 0.00
# 上面表示,目前是 18:06 ,本系統已經開機 52 天又 6:40 ,有 1 個使用者在線上,
# 平均負載很低,所以都是 0 啊!


--------------------------------------------
netstat
這個 netstat 也是挺好玩的,其實,這個指令比較常被用在網路的監控方面, 不過,在程序管理方面
也是需要瞭解的啦!這個指令的執行如下所示:基本上, netstat 的輸出分為兩大部分,上面是網路介
面相關的連線,下方則是與 unix 程序有關的項目。
[root@linux ~]# netstat -[atunlp]
參數:
-a??:將目前系統上所有的連線、監聽、Socket 資料都列出來
-t??:列出 tcp 網路封包的資料
-u??:列出 udp 網路封包的資料
-n??:不已程序的服務名稱,以埠號 (port number) 來顯示;
-l??:列出目前正在網路監聽 (listen) 的服務;
-p??:列出該網路服務的程序 PID
範例:
範例一:列出目前系統已經建立的網路連線與 unix socket 狀態
[root@linux ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address? ?? ???Foreign Address? ?? ? State
tcp? ?? ???0? ? 256 59-125-83-224.ad:ssh linux.test.s:52679? ? ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags? ?? ? Type? ?? ? State? ?? ?? ?I-Node Path
unix??16? ???[ ]? ?? ?? ?DGRAM? ?? ?? ?? ?? ?? ???4870? ?/dev/log
unix??2? ?? ?[ ]? ?? ?? ?DGRAM? ?? ?? ?? ?? ?? ???3561? ?@udevd
unix??3? ?? ?[ ]? ?? ?? ?STREAM? ???CONNECTED? ???509237
# 在上面的結果當中,顯示了兩個部分,分別是網路的連線以及 linux 上面的 socket
# 連線狀態。在網路連線的部分主要內容為:
# Proto :網路的封包協定,主要分為 TCP 與 UDP 封包,相關資料請參考伺服器篇;
# Recv-Q:非由使用者程式連結到此 socket 的複製的總 bytes 數;
# Send-Q:非由遠端主機傳送過來的 acknowledged 總 bytes 數;
# Local Address??:本地端的 IP
# Foreign Address:遠端主機的 IP;
# State :連線狀態,主要有建立(ESTABLISED)及監聽(LISTEN);
# 至於 unix 傳統的 socket 連接狀態則是:
# Proto :一般就是 unix 啦;
# RefCnt:連接到此 socket 的程序數量;
# Flags :連線的旗標;
# Type??:socket 存取的類型。主要有確認連線的 STREM 與不需確認的 DGRAM 兩種;
# State :CONNECTED 表示已經連線建立。
# Path??:連接到此 socket 的相關程式的路徑!或者是相關資料輸出的路徑。
範例二:找出目前系統上已在監聽的網路連線及其 PID
[root@linux ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address? ?Foreign Address??State? ?PID/Program name
tcp? ?? ???0? ?? ?0 0.0.0.0:21? ?? ?0.0.0.0:*? ?? ???LISTEN??1598/vsftpd
tcp? ?? ???0? ?? ?0 127.0.0.1:25? ? 0.0.0.0:*? ?? ???LISTEN??1666/master
tcp? ?? ???0? ?? ?0 :::22? ?? ?? ???:::*? ?? ?? ?? ? LISTEN??5281/sshd
udp? ?? ???0? ?? ?0 0.0.0.0:68? ?? ?0.0.0.0:*? ?? ?? ?? ?? ? 21339/dhclient
# 看到了嗎?最後面一個欄位就是該埠號被該 PID 或程式所啟動的!
範例三:將上述的本地端 0.0.0.0:21 那個網路服務關閉的話?
[root@linux ~]# kill 1598
[root@linux ~]# killall vsftpd
很多朋友常常有疑問,那就是,我的主機目前到底開了幾個門(ports), 呵呵!其實,不論主機提供什
麼樣的服務,一定必須要有相對應的 program 在主機上面執行才行啊! 舉例來說,我們鳥園的 Linux
主機提供的就是 WWW 服務,那麼我的主機當然有一個程式在提供 WWW 的服務啊!呵呵!那就是 Apache
這個套件所提供的啦! ^_^。 所以,當我執行了這個程式之後,我的系統自然就可以提供 WWW 的服務
了。那如何關閉啊? 就關掉該程式所觸發的那個程序就好了!例如上面的範例三所提供的例子啊! ^_^

--------------------------------------------
dmesg
在開機的時候你會發現有很多的訊息出現吧,例如 CPU 的形式、硬碟、 光碟型號及硬碟分割表等等,
這些資訊的產生都是核心 (kernel) 在進行硬體的測試與驅動啦。 但是訊息都是『刷』的一聲就跑過去
了!完全來不及看!傷腦筋~
這些訊息有時候對於系統管理員是很重要的,因為他提供了系統的資訊呀! 要看這些訊息你可以用
dmesg 這個指令來觀看! 因為訊息實在太多了,所以可以加入這個管線指令『 | more 』來使畫面暫停

範例一:輸出所有的核心開機時的資訊
[root@linux ~]# dmesg | more
範例二:搜尋開機的時候,硬碟的相關資訊為何?
[root@linux ~]# dmesg | grep -i hd
? ? ide0: BM-DMA at 0xffa0-0xffa7, BIOS settings: hda:DMA, hdb:DMA
? ? ide1: BM-DMA at 0xffa8-0xffaf, BIOS settings: hdc:DMA, hdd:pio
hda: ST320430A, ATA DISK drive
hdb: Maxtor 5T030H3, ATA DISK drive
hdc: CD-540E, ATAPI CD/DVD-ROM drive
.....底下省略.....
由範例二就知道我這部主機的硬碟是怎樣了吧?!沒錯啦! 還可以查閱能不能找到網路卡喔!網路卡的
代號是 eth ,所以,直接輸入 dmesg | grep -i eth 試看看呢!

--------------------------------------------
sar
這個 sar 並不是系統預設的安裝套件,如果您不是選擇全部安裝的話,這個套件預設是不裝的。 不過
,如果您是選擇全部安裝,嘿嘿!那就可以玩這個 sar 了。 這個 sar 的功能倒是可以玩一玩的,因為
他可以在您想要主動偵測主機的資源狀態, 然後繪製成為圖表時,相當好用的一個工具喔!
[root@linux ~]# sar [-ru] [秒數] [次數]
參數:
-u??:進行 CPU 資源的統計;
-r??:進行主記憶體目前狀態的分析
範例:
範例一:統計目前主機 CPU 狀態,每秒一次,共計三次!
[root@linux ~]# sar -u 1 3
Linux 2.6.12-1.1398_FC4 (vbird.vbird.idv.tw)? ? 09/16/05
14:16:17? ?? ?? ? CPU? ???%user? ???%nice? ?%system? ?%iowait? ???%idle
14:16:18? ?? ?? ? all? ?? ?0.00? ?? ?0.00? ?? ?0.00? ?? ?0.00? ? 100.00
14:16:19? ?? ?? ? all? ?? ?0.00? ?? ?0.00? ?? ?0.00? ?? ?0.00? ? 100.00
14:16:20? ?? ?? ? all? ?? ?0.00? ?? ?0.00? ?? ?0.00? ?? ?0.00? ? 100.00
Average:? ?? ?? ? all? ?? ?0.00? ?? ?0.00? ?? ?0.00? ?? ?0.00? ? 100.00
# 我這部主機單純用在家裡測試的,所以沒有什麼網路服務,看的出來,嘿嘿!很安靜!
範例二:統計目前主機記憶體的使用情況
[root@linux ~]# sar -r 1 3
Linux 2.6.12-1.1398_FC4 (vbird.vbird.idv.tw)? ? 09/16/05
14:17:40? ? kbmemfree kbmemused??%memused kbbuffers??kbcached kbswpfree
14:17:41? ?? ???26004? ? 359672? ???93.26? ? 127528? ???83996? ?1019236
14:17:42? ?? ???26004? ? 359672? ???93.26? ? 127528? ???83996? ?1019236
14:17:43? ?? ???26004? ? 359672? ???93.26? ? 127528? ???83996? ?1019236
Average:? ?? ???26004? ? 359672? ???93.26? ? 127528? ???83996? ?1019236
# 其實這個與 free 的輸出結果也差不了太多啦!
鳥哥倒是很喜歡使用 sar 來做背景主動偵測系統 CPU 的動作!
--------------------------------------------


部分信息出处

?

?

我正好用到一个取某个月的月份命令:

?

?

**前一个天的日期**date -d"1 day ago" +"%y%m%d"date -d "yesterday" +"%y%m%d"**前一个月的日期**date -d"1 month ago" +"%y%m%d"类似的还有date -d"-1 day ago 1 month ago" +"%y%m%d"date -d"1 day ago -1 year ago 1 month ago" +"%y%m%d"

热点排行