目錄:(内容較多,加個目錄)
|-程序管理
程序常用指令
|- w檢視目前系統資訊
|- ps程序檢視指令
|- kill終止程序
|- 一個存放記憶體中的特殊目錄/proc
|- 程序的優先級
|- 程序的挂起與恢複
|- 通過top指令檢視程序
計劃任務
|- 計劃任務的重要性
|- 一次性計劃at和batch
|- 周期性計劃crontab
程序管理的概念
程序和程式差別
1.程式是靜态概念,本身作為一種軟體資源長期儲存;而程序是程式的執行過程,它是動态概念,有一定的生命期,是動态産生和消亡的。
2.程式和程序無一一對應關系。一個程式可以由多個時程公用;另一一方面,一個程序在活動中有可順序地執行若幹個程式
父子程序的關系
1.子程序是由一個程序所産生的程序,産生這個子程序的程序稱為父程序
2.在linux系統中,使用系統調用fork建立程序。fork複制的内容包括父程序的資料和堆棧段以及父程序的程序環境。
3.父程序終止子程序自然終止。
前台程序和背景程序
前台程序
在shell提示處理打入指令後,建立一個子程序,運作指令,shell等待指令退出,然後傳回到對使用者給出提示符。這條指令與shell異步運作,即在前台運作,使用者在它完成之前不能執行别一個命
很簡單,我們在執行這個查找指令時,無法進行其它操作,這個查找就屬于前台程序
背景程序
在shell提示處打入指令,若後随一個&,shell建立子程序運作此指令,但不等待指令退出,而直接傳回到對使用者給出提示。這條指令與shell同步運作,即在背景運作。“背景程序必須是非互動式的”
再來看這個指令就變成了背景程序,我們用同樣的條件進行查找,把查找記過放到hzh/test/init.find這個檔案中。不影響我們前台其它的操作。
程序的狀
學過作業系統原理的同學應該可以看得懂,不懂再去翻翻書,不知道你有沒有想起當時教這門課的老師呢?呵呵
常用程序指令
w檢視目前系統資訊
w指令,我在之前的章節用曾用過,當時是檢視目前使用者資訊,當然也可以檢視到系統相關的資訊。
作用:檢視目前系統活動摘要。
[root@bogon cron]# w
14:48:39 up 2:46, 1 user, load average: 0.00, 0.01, 0.00
user tty from login@ idle jcpu pcpu what
root pts/1 192.168.203.1 12:27 0.00s 0.17s 0.02s w
w顯示資訊的含義:
jcpu: 以終端代号來區分,該終端所有相關的程序的程序執行時,所消耗的cpu時間會顯示在這裡
pcpu: cpu執行程式消耗的時間
what: 使用者下在執行的操作
load average :分别顯示系統在過去1、5、15分鐘内的平均負載程度。
from: 顯示使用者從何處登入系統,“:0”的顯示代表該使用者時人x windows下,打開文本模式視窗登入的
idle: 使用者閑置的時間,這是一個計時器,一旦使用者執行任何操作,該計時器便會被重置
檢視個别使用者資訊:w [使用者名]
[root@localhost ~]# w root
23:32:01 up 52 min, 1 user, load average: 0.00, 0.00, 0.00
user tty from login@ idle jcpu pcpu what
root pts/1 192.168.203.1 22:53 0.00s 0.10s 0.01s w root
ps程序檢視指令
ps應該是檢視程序用得最普遍的指令,我在之前的面試中都被多次問到過。因為linux不是面試我的重點,是以,我後來特意去查了一下。ps我以前的了解就是photoshop的縮寫。哈哈!因為以前本專門跑去學過平面設計。吼吼,扯遠了!
程序檢視指令:ps
常用選項:
-a:顯示所有使用者的程序
-u:顯示使用者名和啟動時間
-x:顯示 沒有控制終端的程序
-e:顯示所有程序,包括沒有控制終端的程序
-l:長格式顯示
-w:寬行顯示,可以使用多個w進行加寬顯示
應用執行個體:
ps 檢視隸屬自己的程序
root@fnngj-virtual-machine:~# ps
pid tty time cmd
1370 pts/0 00:00:00 bash
3185 pts/0 00:00:00 ps
root@root:~# ps -l
f s uid pid ppid c pri ni addr sz wchan tty time cmd
4 s 0 5941 5801 4 80 0 - 1882 wait pts/2 00:00:00 bash
4 r 0 6000 5941 0 80 0 - 1121 - pts/2 00:00:00 ps
看一下上面的選項都指的什麼。。
pid : 程序号
ppld: 父程序的程序号
tty: 程序啟動的終端
stat: 程序目前狀态(s休眠狀态,d不可中斷的休眠狀态,r運作狀态,z僵死狀态,t停止)
ni : 程序優先級
time: 程序自從啟動以後啟用cpu的總時間
command/cmd:程序的指令名
user: 使用者名
%cpu: 占用cpu時間和總時間的百分比
%mem: 占用記憶體與系統記憶體總量的百分比
實列:
ps -u or -l檢視隸屬于自己程序詳細資訊
root@root:~# ps -u or -l
ps -le or -aux檢視所有使用者執行的程序的詳細資訊
root@root:~# ps le or -aux
ps -aux --sort pid可按程序執行的時間、pid、uid等對程序進行排序
root@root:~# ps -aux --sort pid
ps -uu fnngj 檢視某個用記啟動的程序
root@root:~# ps -uu fnngj
ps -le | grep init 檢視指定程序資訊
root@root:~# ps -le | grep init
kill終止程序
在winddow下面,我們要結束一個程序,最簡單的方式就是關閉這個程式,相應的程序也會随之結束,遇到不能關閉的情況。會打開任務管理器結果掉。那麼在linux下如果做呢?我們可以使用kill指令來終止程序。
為什麼要殺死程序?
* 該程序點用了過多的cpu時間
* 該程序縮住了一個終端,使其他前台程序無法運作
* 運作時間過長,但沒有預期效果
* 産生了過多到螢幕或磁盤檔案的輸出
* 無法正常退出
kill用法:
關閉程序:kill [程序号]
root@root:~# kill -l
1) sighup 2) sigint 3) sigquit 4) sigill 5) sigtrap
6) sigabrt 7) sigbus 8) sigfpe 9) sigkill 10) sigusr1
11) sigsegv 12) sigusr2 13) sigpipe 14) sigalrm 15) sigterm
16) sigstkflt 17) sigchld 18) sigcont 19) sigstop 20) sigtstp
21) sigttin 22) sigttou 23) sigurg 24) sigxcpu 25) sigxfsz
26) sigvtalrm 27) sigprof 28) sigwinch 29) sigio 30) sigpwr
31) sigsys 34) sigrtmin 35) sigrtmin+1 36) sigrtmin+2 37) sigrtmin+3
38) sigrtmin+4 39) sigrtmin+5 40) sigrtmin+6 41) sigrtmin+7 42) sigrtmin+8
43) sigrtmin+9 44) sigrtmin+10 45) sigrtmin+11 46) sigrtmin+12 47) sigrtmin+13
48) sigrtmin+14 49) sigrtmin+15 50) sigrtmax-14 51) sigrtmax-13 52) sigrtmax- 12
53) sigrtmax-11 54) sigrtmax-10 55) sigrtmax-9 56) sigrtmax-8 57) sigrtmax-7
58) sigrtmax-6 59) sigrtmax-5 60) sigrtmax-4 61) sigrtmax-3 62) sigrtmax-2
63) sigrtmax-1 64) sigrtmax
我們看到每個編号對應一個含義,如 9) sigkill ;9标注的是sigkill ,那麼我們可用9來終止程序。
關閉程序:
kill -s 9 [程序号] (強行關閉)
kill -9 [程序号] (強行關閉)
上面的兩種形式都可以強行關閉程序。
重新開機程序:
有時候我們需要把程序重新啟動一下,可以下面的指令完成。
kill -1 [程序号] (重新開機程序)
root@root:~# kill -1 3567 重新開機pid為3567的程序
關閉圖形程式:
關閉圖形程式: xkill
當你在終端下輸入這個指令時,你的滑鼠會變成一個小叉子,你隻去點你想要關閉的視窗就可以關閉了
其它:
結束所有程序: killall
查×××程序号: pgrep [服務名稱]
關閉程序: pkill [程序名稱]
一個存放記憶體中的特殊目錄/proc
這個目錄比較特殊,他并不在我們磁盤上,而在我們的記憶體當中;目前系統運作的所有程序都動态的存放在這個目錄中。
root@root:~# ls /proc
1 14 15 187 287 820 dma net
10 1401 1524 19 3 827 driver pagetypeinfo
1037 1403 1525 1906 32 830 execdomains partitions
1043 1413 1527 1919 34 832 fb sched_debug
1047 1414 1531 2 35 834 filesystems schedstat
11 1415 1536 20 36 840 fs scsi
1172 1418 1544 2024 454 842 interrupts self
12 1423 1555 2025 459 843 iomem slabinfo
.....................
上面每個編号就是以我們目前程序pid所指令的目錄名。
當然,目前目錄下也存放了一些我們系統的資訊
檢視我們目前cpu的資訊
root@root:~# cat /proc/cpuinfo
processor : 0
vendor_id : genuineintel
cpu family : 6
model : 23
model name : pentium(r) dual-core cpu t4500 @ 2.30ghz
stepping : 10
cpu mhz : 2294.000
cache size : 1024 kb
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov
pat
pse36 clflush dts acpi mmx fxsr sse sse2 ss nx constant_tsc up arch_perfmon
pebs
bts xtopology tsc_reliable aperfmperf pni ssse3 hypervisor dts
bogomips : 4588.00
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
檢視記憶體資訊
root@root:~# cat /proc/meminfo
memtotal: 508344 kb
memfree: 10668 kb
buffers: 10700 kb
cached: 96056 kb
swapcached: 34124 kb
active: 231384 kb
inactive: 231576 kb
active(anon): 178524 kb
inactive(anon): 178316 kb
active(file): 52860 kb
inactive(file): 53260 kb
........................
檢視目前分區的資訊
root@root:~# cat /proc/partitions
major minor #blocks name
8 0 20971520 sda
8 1 20446208 sda1
8 2 1 sda2
8 5 522240 sda5
程序的優先級
我們學過作業系統原理的同學都知道,我們系統在執行程式時有會先後順序的,但為什麼我們的電腦可以邊聽音樂,邊聊qq,邊上網,甚至還可以同時挂幾個遊戲。因為我們cpu運作超快。他可以把每個程式的程序排好隊,這個執行一下,那個執行一下。是以,我們會覺得各種程式是并行運作的。
當然,程序也會分個快慢緩急的,是以要對程序分個優先級。同學們在食堂排隊打飯,總理來了,這優先級多高啊。同學們紛紛讓開,先給總理打。
* 優先級取值範圍為(-20,19)
linux給我們提供的優先級的範圍為-20到19,我們啟動一個程序時,預設的優先級為0 ,-20的優先級為最大,或者說最高。當然,我們在設定的時候可以寫-30,但系統預設為-20。
nice指令
指定程式的運作優先級
格式:nice -n command
例如:nice --5 command
renice 指令
改變一個正在運作的程序的優先級
格式: renice n pid
例如:renice -5 777
例子:
[root@bogon cron]# ps -le
[root@bogon cron]# renice -20 [pid]
nohup指令可以在使用者退出時繼續執行某一程序
一般的指令在使用者退登入後就停止執行了,nohup指令可以使程序在使用者登出後仍舊繼續執行,nohup指令将執行後的資料資訊和錯誤資訊預設存儲到檔案nohup.out中
格式:
nohup program &
[root@bogon cron]# nohup find / -name init* > /hzh/test/find.init.20120520 &
如果我們沒指定/hzh/test/find.init.20120520這個儲存位置的話,系統預設會把查詢的結果放到nohup.out的檔案中。我們一般不會去使用預設方式儲存。
程序的挂起與恢複
當我們執行一條指令時,發現太慢或輸出内容太多,最常用到的做法就是終止(ctrl+c),那麼挂起呢?通俗一點就是暫停呗!^_^!!
程序中止(挂起)和終止
挂起(ctrl+z)
終止(ctrl+c)
[root@bogon ~]# find / -name init* > /hzh/test/find.init.20120520
[1]+ stopped find / -name init* >/hzh/test/find.init.20120520
被暫停的程序會提示我們stopped
小知識:系統中有兩種運作的程序,我們在前台是看不到的。一種是背景執行的指令,一種就是被暫停的。那我們通過什麼方式檢視被暫停和背景執行的程序呢?
檢視被挂起的程序(jobs)
程序的恢複:
恢複到前台繼續運作(fg)
恢複到背景繼續運作(bg)
[root@bogon ~]# jobs 通過jobs指令可以檢視後被暫停的程序
[root@bogon ~]# fg fg會将暫停的程序恢複到前台繼續執行。
find / -name init* >/hzh/test/find.init.20120520
[root@bogon ~]# bg bg會将暫停的程序恢複到背景繼續執行
[1]+ find / -name init* >/hzh/test/find.init.20120520 &
通過top指令檢視程序
top指令與前面介紹的ps指令相似,已經介紹了ps,為什麼還要top?top有它自己的優點呢。它比ps顯示的資訊更詳細。而且是動态的噢,資訊是在不斷變化的噢!
[root@bogon ~]# top
top - 12:45:16 up 43 min, 1 user, load average: 0.00, 0.04, 0.06
tasks: 57 total, 1 running, 56 sleeping, 0 stopped, 0 zombie
cpu(s): 0.3% us, 0.3% sy, 0.0% ni, 99.3% id, 0.0% wa, 0.0% hi, 0.0% si
mem: 1034536k total, 232864k used, 801672k free, 60188k buffers
swap: 1052248k total, 0k used, 1052248k free, 118692k cached
pid user pr ni virt res shr s %cpu %mem time+ command
6848 root 15 0 28948 8444 2524 s 0.3 0.8 0:05.44 x
7181 root 16 0 7036 2436 1968 s 0.3 0.2 0:00.26 sshd
7244 root 16 0 1964 976 772 r 0.3 0.1 0:00.45 top
1 root 16 0 3116 544 464 s 0.0 0.1 0:00.97 init
2 root rt 0 0 0 0 s 0.0 0.0 0:00.00 migration/0
3 root 34 19 0 0 0 s 0.0 0.0 0:00.00 ksoftirqd/0
4 root 5 -10 0 0 0 s 0.0 0.0 0:00.03 events/0
5 root 5 -10 0 0 0 s 0.0 0.0 0:00.01 khelper
6 root 5 -10 0 0 0 s 0.0 0.0 0:00.00 kthread
7 root 15 -10 0 0 0 s 0.0 0.0 0:00.00 kacpid
88 root 5 -10 0 0 0 s 0.0 0.0 0:00.01 kblockd/0
89 root 15 0 0 0 0 s 0.0 0.0 0:00.00 khubd
106 root 20 0 0 0 0 s 0.0 0.0 0:00.00 pdflush
107 root 15 0 0 0 0 s 0.0 0.0 0:00.18 pdflush
108 root 25 0 0 0 0 s 0.0 0.0 0:00.00 kswapd0
109 root 6 -10 0 0 0 s 0.0 0.0 0:00.00 aio/0
255 root 25 0 0 0 0 s 0.0 0.0 0:00.00 kseriod
d: 指定重新整理的時間間隔
c: 顯示整個指令而不僅僅顯示指令名
在指令運作的時候按鍵盤d,會出現如下提示要求你輸入重新整理的間隔時間
change delay from 3.0 to: 10(秒)
常用指令:
u : 檢視指定使用者的程序
k : 終止執行中的程序
h or ? 獲得幫助
r: 重新設定程序優先級
s: 改變重新整理的時間間隔
w: 将目前設定寫入~/.toprc檔案中
這裡不細講了,感興趣的可以用 man top 指令檢視top的詳細幫助。
為什麼要計劃任務
為什麼要設定計劃任務
我們在系統的管理中,很多時候不是及時的去操作,比如對某一網站資料的備份,備份的過程需要占用大量的系統資源,淩晨三四點的時候系統通路使用者最少,系統最空閑。但我們的系統的系統管理者總不能老那個時間爬起來操作吧。如果在家遠端操作的話,老婆不願意了。哈哈!
計劃任務的指令
計劃指令分一次性計劃和周期性計劃。比如我要在今年10月1結婚,這是一次性的計劃。不能每年的10月1結婚吧,真有女女願意結,咱經濟上也吃不消呀。睡覺就是周期性的計劃。比如,我給自己規定每天晚上的11點半睡覺。那麼到時間我就上床睡覺。
at 安排作業在某一時刻執行一次
batch 安排作業在系統負載不重時執行一次
cron 安排周期性運作的作業
一次性計劃at和batch
at指令指定時間的方式
絕對計時方法:
midnight noon teatime
hh:mm [today]
hh:mm tomorrow
hh:mm 星期
hh:mm mm/dd/yy
相對計時方法:
now+n minutes
mow+n hours
now+n days
用法:
指定在今天下午17:30執行某指令(假設現在時間是下午14:30,2012年1月11日)
指令格式:
at 5:30pm
at 17:30
at 17:20 today
at now+3 hours
at now+180 minutes
at 17:30 12.1.11
at 17:30 1.11.12
好!現格式知道了,玩個執行個體吧!
[root@bogon ~]# at now+5 minutes
at>
我們定的時間是5分鐘之後,現在可以在at下面輸入各種任務,儲存!5分鐘之後執行;不過,我們需要注意,在用指令時最好寫指令的絕對路徑,為了安全。
at> /usr/bin/wall < /etc/motd 做一個廣播,把etc/motd 檔案廣播出去
at> 可以繼續寫其它的計劃
at> <eot>
job 2 at 2012-05-20 13:43 ctrl+d儲存計劃并退出
是否還擔心我們的計劃是否啟動,通過下面兩個指令檢視at程序是否正常啟動
[root@bogon test]# at -l
3 2012-05-20 13:57 a root
[root@bogon test]# atq
如果真的沒有啟動的話,可以通過手工方式重新啟動一下
[root@bogon ~]# /etc/rc.d/init.d/atd start
删除at計劃任務
[root@bogon test]# at -d
檢視at計劃任務
[root@bogon test]# ls /var/spool/at/
batch指令
作用:
安排一個或多個指令在系統負載較輕進運作一次(一般情況下負載較輕指平均負載降到0.8以下)
使用方法同at
周期性計劃指令crontab
作用:用于生成cron程序所需要的crontab檔案
crontab的指令格式
crontab {-l|-r|-e}
-l 顯示目前的crontab
-r 删除目前的crontab
-e 使用編輯器編輯目前crontab檔案
好多人都覺得周期計劃任務設定起來比較麻煩,其實我們隻要掌握規律就很好設定。
crontab -e
規則: 把知道的具體的時間添上,不知道的都添加上*
分鐘 小時 天 月 星期 指令/腳本
假如,我們每天早上4點要做一下操作,以下面方式表示:
分鐘 小時 天 月 星期 指令/腳本
* 18 * * 1,3 [具體的操作]
假如,我們每周一和三下午的6點要做一下操作,以下面方式表示:
分鐘 小時 天 月 星期 指令/腳本
* 4 * * * [具體的操作]
案例:在上學的時候都有上機課,周一到周五,下午5點30上課結果。我們需要在5點30發一個通知,5點45自動關機。設定計劃任務需要分兩步完成,第一步提醒,第二步關機
分鐘 小時 天 月 星期 指令/腳本
30 17 * * 1-5 /usr/bin/wall < /hzh/test/guanji.wall
45 17 * * 1-5 /usr/bin/shudown -h now
操作方法:
[root@bogon test]# crontab -e 回車會進入一個vi文本中
根據我上面介紹格式編寫内容,然後儲存退出
crontab: installing new crontab 表示建立計劃成功
通過下面方式進行檢視計劃:
[root@bogon test]# cd /var/spool/cron
[root@bogon cron]# ls
root
[root@bogon cron]# cat root
30 17 * * 1-5 /usr/bin/shudown -h now