Linux at命令定時(shí)發(fā)送郵件具體用法 - 51CTO.COM
Linux at命令定時(shí)發(fā)送郵件具體用法
有時(shí)候需要在某個(gè)時(shí)候通知?jiǎng)e人或自己做某件事情,對(duì)于一些天天讀郵件的人來說,發(fā)個(gè)郵件最保險(xiǎn)。這一點(diǎn)在Linux操作系統(tǒng)下用Linux at命令配合mail很容易做到。 AD:
51CTO云計(jì)算架構(gòu)師峰會(huì) 搶票進(jìn)行中!?
?
有時(shí)候需要在某個(gè)時(shí)候通知?jiǎng)e人或自己做某件事情,對(duì)于一些天天讀郵件的人來說,發(fā)個(gè)郵件最保險(xiǎn)。這一點(diǎn)在Linux操作系統(tǒng)下用Linux at命令配合mail很容易做到。
Linux at命令可以在某個(gè)時(shí)間運(yùn)行某個(gè)程序,而mail可以以命令行的方式把存于一個(gè)文本中的郵件正文發(fā)送抄送出去。
Linux at命令定時(shí)發(fā)送郵件具體用法:
1. 把email正文準(zhǔn)備好,比如寫在email.txt里
2. 然后寫一個(gè)腳本,如run.sh
#!/usr/bin/bash
mail -s "Title here" -c Address_CC Address_To < email.txt
3. 命令行里執(zhí)行
at 0815am Jan 24
at>./run.sh
at>^D
run.sh就可以在8:15am, Jan 24執(zhí)行了
不過有些服務(wù)器限制了對(duì)at命令的使用,這樣還有一個(gè)笨方法,
在run.sh的開頭加上"speep time",然后直接運(yùn)行run.sh,在轉(zhuǎn)至后臺(tái)就可以了。
time在這里是整數(shù),指多少秒。
但是有些服務(wù)器當(dāng)終端沒有輸入一段時(shí)間會(huì)使用戶自動(dòng)logout,可以讓腳本里不時(shí)地做一些動(dòng)作如pwd,ls等防止這種情況。
以上是Linux操作系統(tǒng)中用Linux at命令定時(shí)發(fā)送郵件的方法。
Linux at命令定時(shí)發(fā)送郵件具體用法 - 51CTO.COM
Linux at命令定時(shí)發(fā)送郵件具體用法
有時(shí)候需要在某個(gè)時(shí)候通知?jiǎng)e人或自己做某件事情,對(duì)于一些天天讀郵件的人來說,發(fā)個(gè)郵件最保險(xiǎn)。這一點(diǎn)在Linux操作系統(tǒng)下用Linux at命令配合mail很容易做到。 AD:
51CTO云計(jì)算架構(gòu)師峰會(huì) 搶票進(jìn)行中!?
?
有時(shí)候需要在某個(gè)時(shí)候通知?jiǎng)e人或自己做某件事情,對(duì)于一些天天讀郵件的人來說,發(fā)個(gè)郵件最保險(xiǎn)。這一點(diǎn)在Linux操作系統(tǒng)下用Linux at命令配合mail很容易做到。
Linux at命令可以在某個(gè)時(shí)間運(yùn)行某個(gè)程序,而mail可以以命令行的方式把存于一個(gè)文本中的郵件正文發(fā)送抄送出去。
Linux at命令定時(shí)發(fā)送郵件具體用法:
1. 把email正文準(zhǔn)備好,比如寫在email.txt里
2. 然后寫一個(gè)腳本,如run.sh
#!/usr/bin/bash
mail -s "Title here" -c Address_CC Address_To < email.txt
3. 命令行里執(zhí)行
at 0815am Jan 24
at>./run.sh
at>^D
run.sh就可以在8:15am, Jan 24執(zhí)行了
不過有些服務(wù)器限制了對(duì)at命令的使用,這樣還有一個(gè)笨方法,
在run.sh的開頭加上"speep time",然后直接運(yùn)行run.sh,在轉(zhuǎn)至后臺(tái)就可以了。
time在這里是整數(shù),指多少秒。
但是有些服務(wù)器當(dāng)終端沒有輸入一段時(shí)間會(huì)使用戶自動(dòng)logout,可以讓腳本里不時(shí)地做一些動(dòng)作如pwd,ls等防止這種情況。
以上是Linux操作系統(tǒng)中用Linux at命令定時(shí)發(fā)送郵件的方法。
進(jìn)程命令at,batch,cron,bg,fg,who,ps,top,kill,nohup-ChinaUnix操作系統(tǒng)頻道
進(jìn)程命令at,batch,cron,bg,fg,who,ps,top,kill,nohup2006年09月03日 03:32 來源:ChinaUnix博客 作者:guochun 編輯:周榮茂????進(jìn)程管理及作業(yè)控制(1)
????Linux是一個(gè)多任務(wù)的操作系統(tǒng),系統(tǒng)上同時(shí)運(yùn)行著多個(gè)進(jìn)程,正在執(zhí)行的一個(gè)或多個(gè)相
????關(guān)進(jìn)程稱為一個(gè)作業(yè)。使用作業(yè)控制,用戶可以同時(shí)運(yùn)行多個(gè)作業(yè),并在需要時(shí)在作業(yè)
????之間進(jìn)行切換。本章詳細(xì)介紹進(jìn)程管理及作業(yè)控制的命令,包括啟動(dòng)進(jìn)程、查看進(jìn)程、
????調(diào)度作業(yè)的命令。
????進(jìn)程及作業(yè)的概念
????Linux是一個(gè)多用戶多任務(wù)的操作系統(tǒng)。多用戶是指多個(gè)用戶可以在同一時(shí)間使用計(jì)算機(jī)
????系統(tǒng);多任務(wù)是指Linux可以同時(shí)執(zhí)行幾個(gè)任務(wù),它可以在還未執(zhí)行完一個(gè)任務(wù)時(shí)又執(zhí)行
????另一項(xiàng)任務(wù)。
????操作系統(tǒng)管理多個(gè)用戶的請(qǐng)求和多個(gè)任務(wù)。大多數(shù)系統(tǒng)都只有一個(gè)CPU和一個(gè)主存,但一
????個(gè)系統(tǒng)可能有多個(gè)二級(jí)存儲(chǔ)磁盤和多個(gè)輸入/輸出設(shè)備。操作系統(tǒng)管理這些資源并在多個(gè)
????用戶間共享資源,當(dāng)您提出一個(gè)請(qǐng)求時(shí),給您造成一種假象,好象系統(tǒng)只被您獨(dú)自占用
????。而實(shí)際上操作系統(tǒng)監(jiān)控著一個(gè)等待執(zhí)行的任務(wù)隊(duì)列,這些任務(wù)包括用戶作業(yè)、操作系
????統(tǒng)任務(wù)、郵件和打印作業(yè)等。操作系統(tǒng)根據(jù)每個(gè)任務(wù)的優(yōu)先級(jí)為每個(gè)任務(wù)分配合適的時(shí)
????間片,每個(gè)時(shí)間片大約都有零點(diǎn)幾秒,雖然看起來很短,但實(shí)際上已經(jīng)足夠計(jì)算機(jī)完成
????成千上萬的指令集。每個(gè)任務(wù)都會(huì)被系統(tǒng)運(yùn)行一段時(shí)間,然后掛起,系統(tǒng)轉(zhuǎn)而處理其他
????任務(wù);過一段時(shí)間以后再回來處理這個(gè)任務(wù),直到某個(gè)任務(wù)完成,從任務(wù)隊(duì)列中去除。
????Linux系統(tǒng)上所有運(yùn)行的東西都可以稱之為一個(gè)進(jìn)程。每個(gè)用戶任務(wù)、每個(gè)系統(tǒng)管理守護(hù)
????進(jìn)程,都可以稱之為進(jìn)程。Linux用分時(shí)管理方法使所有的任務(wù)共同分享系統(tǒng)資源。我們
????討論進(jìn)程的時(shí)候,不會(huì)去關(guān)心這些進(jìn)程究竟是如何分配的,或者是內(nèi)核如何管理分配時(shí)
????間片的,我們所關(guān)心的是如何去控制這些進(jìn)程,讓它們能夠很好地為用戶服務(wù)。
????進(jìn)程的一個(gè)比較正式的定義是:在自身的虛擬地址空間運(yùn)行的一個(gè)單獨(dú)的程序。進(jìn)程與
????程序是有區(qū)別的,進(jìn)程不是程序,雖然它由程序產(chǎn)生。程序只是一個(gè)靜態(tài)的指令集合,
????不占系統(tǒng)的運(yùn)行資源;而進(jìn)程是一個(gè)隨時(shí)都可能發(fā)生變化的、動(dòng)態(tài)的、使用系統(tǒng)運(yùn)行資
????源的程序。而且一個(gè)程序可以啟動(dòng)多個(gè)進(jìn)程。
????Linux操作系統(tǒng)包括三種不同類型的進(jìn)程,每種進(jìn)程都有自己的特點(diǎn)和屬性。
?
????交互進(jìn)程——由一個(gè)shell啟動(dòng)的進(jìn)程。交互進(jìn)程既可以在前臺(tái)運(yùn)行,也可以在后臺(tái)運(yùn)行
????。
????批處理進(jìn)程——這種進(jìn)程和終端沒有聯(lián)系,是一個(gè)進(jìn)程序列。
????監(jiān)控進(jìn)程(也稱守護(hù)進(jìn)程)——Linux系統(tǒng)啟動(dòng)時(shí)啟動(dòng)的進(jìn)程,并在后臺(tái)運(yùn)行。
????上述三種進(jìn)程各有各的作用,使用場(chǎng)合也有所不同。
????進(jìn)程和作業(yè)的概念也有區(qū)別。一個(gè)正在執(zhí)行的進(jìn)程稱為一個(gè)作業(yè),而且作業(yè)可以包含一
????個(gè)或多個(gè)進(jìn)程,尤其是當(dāng)使用了管道和重定向命令。例如“nroff -man ps.1|grep kil
????l|more”這個(gè)作業(yè)就同時(shí)啟動(dòng)了三個(gè)進(jìn)程。
????作業(yè)控制指的是控制正在運(yùn)行的進(jìn)程的行為。比如,用戶可以掛起一個(gè)進(jìn)程,等一會(huì)兒
????再繼續(xù)執(zhí)行該進(jìn)程。shell將記錄所有啟動(dòng)的進(jìn)程情況,在每個(gè)進(jìn)程過程中,用戶可以任
????意地掛起進(jìn)程或重新啟動(dòng)進(jìn)程。作業(yè)控制是許多shell(包括bash和tcsh)的一個(gè)特性,
????使用戶能在多個(gè)獨(dú)立作業(yè)間進(jìn)行切換。
????一般而言,進(jìn)程與作業(yè)控制相關(guān)聯(lián)時(shí),才被稱為作業(yè)。
????在大多數(shù)情況下,用戶在同一時(shí)間只運(yùn)行一個(gè)作業(yè),即它們最后向shell鍵入的命令。但
????是使用作業(yè)控制,用戶可以同時(shí)運(yùn)行多個(gè)作業(yè),并在需要時(shí)在這些作業(yè)間進(jìn)行切換。這
????會(huì)有什么用途呢?例如,當(dāng)用戶編輯一個(gè)文本文件,并需要中止編輯做其他事情時(shí),利
????用作業(yè)控制,用戶可以讓編輯器暫時(shí)掛起,返回shell提示符開始做其他的事情。其他事
????情做完以后,用戶可以重新啟動(dòng)掛起的編輯器,返回到剛才中止的地方,就象用戶從來
????沒有離開編輯器一樣。這只是一個(gè)例子,作業(yè)控制還有許多其他實(shí)際的用途。
????啟動(dòng)進(jìn)程
????鍵入需要運(yùn)行的程序的程序名,執(zhí)行一個(gè)程序,其實(shí)也就是啟動(dòng)了一個(gè)進(jìn)程。在Linux系
????統(tǒng)中每個(gè)進(jìn)程都具有一個(gè)進(jìn)程號(hào),用于系統(tǒng)識(shí)別和調(diào)度進(jìn)程。啟動(dòng)一個(gè)進(jìn)程有兩個(gè)主要
????途徑:手工啟動(dòng)和調(diào)度啟動(dòng),后者是事先進(jìn)行設(shè)置,根據(jù)用戶要求自行啟動(dòng)。
????手工啟動(dòng)
????由用戶輸入命令,直接啟動(dòng)一個(gè)進(jìn)程便是手工啟動(dòng)進(jìn)程。但手工啟動(dòng)進(jìn)程又可以分為很
????多種,根據(jù)啟動(dòng)的進(jìn)程類型不同、性質(zhì)不同,實(shí)際結(jié)果也不一樣,下面分別介紹。
????1. 前臺(tái)啟動(dòng)
????這或許是手工啟動(dòng)一個(gè)進(jìn)程的最常用的方式。一般地,用戶鍵入一個(gè)命令“l(fā)s –l”,
????這就已經(jīng)啟動(dòng)了一個(gè)進(jìn)程,而且是一個(gè)前臺(tái)的進(jìn)程。這時(shí)候系統(tǒng)其實(shí)已經(jīng)處于一個(gè)多進(jìn)
????程狀態(tài)。或許有些用戶會(huì)疑惑:我只啟動(dòng)了一個(gè)進(jìn)程而已。但實(shí)際上有許多運(yùn)行在后臺(tái)
????的、系統(tǒng)啟動(dòng)時(shí)就已經(jīng)自動(dòng)啟動(dòng)的進(jìn)程正在悄悄運(yùn)行著。還有的用戶在鍵入“l(fā)s –l”
????命令以后趕緊使用“ps –x”查看,卻沒有看到ls進(jìn)程,也覺得很奇怪。其實(shí)這是因?yàn)?
????ls這個(gè)進(jìn)程結(jié)束太快,使用ps查看時(shí)該進(jìn)程已經(jīng)執(zhí)行結(jié)束了。如果啟動(dòng)一個(gè)比較耗時(shí)的
????進(jìn)程:
????find / -name fox.jpg
????然后再把該進(jìn)程掛起,使用ps查看,就會(huì)看到一個(gè)find進(jìn)程在里面。
?
?
????2. 后臺(tái)啟動(dòng)
????直接從后臺(tái)手工啟動(dòng)一個(gè)進(jìn)程用得比較少一些,除非是該進(jìn)程甚為耗時(shí),且用戶也不急
????著需要結(jié)果的時(shí)候。假設(shè)用戶要啟動(dòng)一個(gè)需要長時(shí)間運(yùn)行的格式化文本文件的進(jìn)程。為
????了不使整個(gè)shell在格式化過程中都處于“癱瘓”狀態(tài),從后臺(tái)啟動(dòng)這個(gè)進(jìn)程是明智的選
????擇。
????[例1]
????$ troff –me notes > note_form &
????[1] 4513
????$
????由上例可見,從后臺(tái)啟動(dòng)進(jìn)程其實(shí)就是在命令結(jié)尾加上一個(gè)&號(hào)。鍵入命令以后,出現(xiàn)一
????個(gè)數(shù)字,這個(gè)數(shù)字就是該進(jìn)程的編號(hào),也稱為PID,然后就出現(xiàn)了提示符。用戶可以繼續(xù)
????其他工作。
????上面介紹了前、后臺(tái)啟動(dòng)的兩種情況。實(shí)際上這兩種啟動(dòng)方式有個(gè)共同的特點(diǎn),就是新
????進(jìn)程都是由當(dāng)前shell這個(gè)進(jìn)程產(chǎn)生的。也就是說,是shell創(chuàng)建了新進(jìn)程,于是就稱這
????種關(guān)系為進(jìn)程間的父子關(guān)系。這里shell是父進(jìn)程,而新進(jìn)程是子進(jìn)程。一個(gè)父進(jìn)程可以
????有多個(gè)子進(jìn)程,一般地,子進(jìn)程結(jié)束后才能繼續(xù)父進(jìn)程;當(dāng)然如果是從后臺(tái)啟動(dòng),那就
????不用等待子進(jìn)程結(jié)束了。
????一種比較特殊的情況是在使用管道符的時(shí)候。例如:
????nroff -man ps.1|grep kill|more
????這時(shí)候?qū)嶋H上是同時(shí)啟動(dòng)了三個(gè)進(jìn)程。請(qǐng)注意是同時(shí)啟動(dòng)的,所有放在管道兩邊的進(jìn)程
????都將被同時(shí)啟動(dòng),它們都是當(dāng)前shell的子程序,互相之間可以稱為兄弟進(jìn)程。
????以上介紹的是手工啟動(dòng)進(jìn)程的一些內(nèi)容,作為一名系統(tǒng)管理員,很多時(shí)候都需要把事情
????安排好以后讓其自動(dòng)運(yùn)行。因?yàn)楣芾韱T不是機(jī)器,也有離開的時(shí)候,所以有些必須要做
????的工作而恰好管理員不能親自操作,這時(shí)候就需要使用調(diào)度啟動(dòng)進(jìn)程了。
????調(diào)度啟動(dòng)
????有時(shí)候需要對(duì)系統(tǒng)進(jìn)行一些比較費(fèi)時(shí)而且占用資源的維護(hù)工作,這些工作適合在深夜進(jìn)
????行,這時(shí)候用戶就可以事先進(jìn)行調(diào)度安排,指定任務(wù)運(yùn)行的時(shí)間或者場(chǎng)合,到時(shí)候系統(tǒng)
????會(huì)自動(dòng)完成這一切工作。
????要使用自動(dòng)啟動(dòng)進(jìn)程的功能,就需要掌握以下幾個(gè)啟動(dòng)命令。
????at命令
????用戶使用at命令在指定時(shí)刻執(zhí)行指定的命令序列。也就是說,該命令至少需要指定一個(gè)
????命令、一個(gè)執(zhí)行時(shí)間才可以正常運(yùn)行。at命令可以只指定時(shí)間,也可以時(shí)間和日期一起
????指定。需要注意的是,指定時(shí)間有個(gè)系統(tǒng)判別問題。比如說:用戶現(xiàn)在指定了一個(gè)執(zhí)行
????時(shí)間:凌晨3:20,而發(fā)出at命令的時(shí)間是頭天晚上的20:00,那么究竟是在哪一天執(zhí)行該
????命令呢?如果用戶在3:20以前仍然在工作,那么該命令將在這個(gè)時(shí)候完成;如果用戶3:
????20以前就退出了工作狀態(tài),那么該命令將在第二天凌晨才得到執(zhí)行。下面是at命令的語
????法格式:
????at [-V] [-q 隊(duì)列] [-f 文件名] [-mldbv] 時(shí)間
????at -c 作業(yè) [作業(yè)...]
????at允許使用一套相當(dāng)復(fù)雜的指定時(shí)間的方法,實(shí)際上是將POSIX.2標(biāo)準(zhǔn)擴(kuò)展了。它可以接
????受在當(dāng)天的hh:mm(小時(shí):分鐘)式的時(shí)間指定。如果該時(shí)間已經(jīng)過去,那么就放在第二
????天執(zhí)行。當(dāng)然也可以使用midnight(深夜),noon(中午),teatime(飲茶時(shí)間,一般
????是下午4點(diǎn))等比較模糊的詞語來指定時(shí)間。用戶還可以采用12小時(shí)計(jì)時(shí)制,即在時(shí)間后
????面加上AM(上午)或者PM(下午)來說明是上午還是下午。
????也可以指定命令執(zhí)行的具體日期,指定格式為month day(月 日)或者mm/dd/yy(月/日
????/年)或者dd.mm.yy(日.月.年)。指定的日期必須跟在指定時(shí)間的后面。
????上面介紹的都是絕對(duì)計(jì)時(shí)法,其實(shí)還可以使用相對(duì)計(jì)時(shí)法,這對(duì)于安排不久就要執(zhí)行的
????命令是很有好處的。指定格式為:now + count time-units ,now就是當(dāng)前時(shí)間,time
????-units是時(shí)間單位,這里可以是 minutes(分鐘)、hours(小時(shí))、days(天)、wee
????ks(星期)。count是時(shí)間的數(shù)量,究竟是幾天,還是幾小時(shí),等等。
????還有一種計(jì)時(shí)方法就是直接使用today(今天)、tomorrow(明天)來指定完成命令的時(shí)
????間。下面通過一些例子來說明具體用法。
????[例2] 指定在今天下午5:30執(zhí)行某命令。假設(shè)現(xiàn)在時(shí)間是中午12:30,1999年2月24日
????,其命令格式如下:
????at 5:30pm
????at 17:30
????at 17:30 today
????at now + 5 hours
????at now + 300 minutes
????at 17:30 24.2.99
????at 17:30 2/24/99
????at 17:30 Feb 24
?
????以上這些命令表達(dá)的意義是完全一樣的,所以在安排時(shí)間的時(shí)候完全可以根據(jù)個(gè)人喜好
????和具體情況自由選擇。一般采用絕對(duì)時(shí)間的24小時(shí)計(jì)時(shí)法可以避免由于用戶自己的疏忽
????造成計(jì)時(shí)錯(cuò)誤的情況發(fā)生,例如上例可以寫成:
????at 17:30 2/24/99
????這樣非常清楚,而且別人也看得懂。
????對(duì)于at命令來說,需要定時(shí)執(zhí)行的命令是從標(biāo)準(zhǔn)輸入或者使用-f選項(xiàng)指定的文件中讀取
????并執(zhí)行的。如果at命令是從一個(gè)使用su命令切換到用戶shell中執(zhí)行的,那么當(dāng)前用戶被
????認(rèn)為是執(zhí)行用戶,所有的錯(cuò)誤和輸出結(jié)果都會(huì)送給這個(gè)用戶。但是如果有郵件送出的話
????,收到郵件的將是原來的用戶,也就是登錄時(shí)shell的所有者。
????[例3]
????$ at -f work 4pm + 3 days
????在三天后下午4點(diǎn)執(zhí)行文件work中的作業(yè)。
????$ at -f work 10am Jul 31
????在7月31日上午10點(diǎn)執(zhí)行文件work中的作業(yè)。
????在任何情況下,超級(jí)用戶都可以使用這個(gè)命令。對(duì)于其他用戶來說,是否可以使用就取
????決于兩個(gè)文件:/etc/at.allow和/etc/at.deny。如果/etc/at.allow文件存在的話,那
????么只有在其中列出的用戶才可以使用at命令;如果該文件不存在,那么將檢查/etc/at.
????deny文件是否存在,在這個(gè)文件中列出的用戶均不能使用該命令。如果兩個(gè)文件都不存
????在,那么只有超級(jí)用戶可以使用該命令;空的/etc/at.deny文件意味著所有的用戶都可
????以使用該命令,這也是默認(rèn)狀態(tài)。
????下面對(duì)命令中的參數(shù)進(jìn)行說明。
????-V 將標(biāo)準(zhǔn)版本號(hào)打印到標(biāo)準(zhǔn)錯(cuò)誤中。
????-q queue 使用指定的隊(duì)列。隊(duì)列名稱是由單個(gè)字母組成,合法的隊(duì)列名可以由a-z或者
????A-Z。a隊(duì)列是at命令的默認(rèn)隊(duì)列。
????-m 作業(yè)結(jié)束后發(fā)送郵件給執(zhí)行at命令的用戶。
????-f file 使用該選項(xiàng)將使命令從指定的file讀取,而不是從標(biāo)準(zhǔn)輸入讀取。
????-l atq命令的一個(gè)別名。該命令用于查看安排的作業(yè)序列,它將列出用戶排在隊(duì)列中的
????作業(yè),如果是超級(jí)用戶,則列出隊(duì)列中的所有工作。
????命令的語法格式如下:
????atq [-V] [-q 隊(duì)列] [-v]
????-d atrm 命令的一個(gè)別名。該命令用于刪除指定要執(zhí)行的命令序列,語法格式如下:
????atrm [-V] 作業(yè) [作業(yè)...]
????-c 將命令行上所列的作業(yè)送到標(biāo)準(zhǔn)輸出。
????[例4] 找出系統(tǒng)中所有以txt為后綴名的文件,并且進(jìn)行打印。打印結(jié)束后給用戶fox
????y發(fā)出郵件通知取件。指定時(shí)間為十二月二十五日凌晨?jī)牲c(diǎn)。
????首先鍵入:
????$ at 2:00 12/25/99
????然后系統(tǒng)出現(xiàn)at>提示符,等待用戶輸入進(jìn)一步的信息,也就是需要執(zhí)行的命令序列:
????at> find / -name “*.txt”|lpr
????at> echo “foxy:All texts have been printed.You can take them over.Good day
????!River” |mail -s ”job done” foxy
????輸入完每一行指令然后回車,所有指令序列輸入完畢后,使用組合鍵結(jié)束at命
????令的輸入。這時(shí)候屏幕將出現(xiàn)如下信息:
????warning:command will be executed using /bin/sh.
????job 1 at 1999-12-25 02:00
????提醒用戶將使用哪個(gè)shell來執(zhí)行該命令序列。
????實(shí)際上如果命令序列較長或者經(jīng)常被執(zhí)行的時(shí)候,一般都采用將該序列寫到一個(gè)文件中
????,然后將文件作為at命令的輸入來處理。這樣不容易出錯(cuò)。
?
????[例5] 上面的例子可以修改如下:
????將命令序列寫入到文件/tmp/printjob,語句為:
????$ at -f /tmp/printjob 2:00 12/25/99
????這樣一來,at命令將使用文件中的命令序列,屏幕顯示如下:
????Warning:command will be executed using /bin/sh.
????job 2 at 1999-12-25 02:00
????當(dāng)然也可以采用以下命令:
????$ at find / -name *.txt|lpr
????at> echo “foxy:All texts have been printed.You can take them over.Good day
????!River” |mail -s ”job done” foxy
????現(xiàn)在這個(gè)命令就會(huì)在合適的時(shí)間進(jìn)行了,進(jìn)行完后會(huì)發(fā)回一個(gè)信息。
????仍然使用組合鍵來結(jié)束命令輸入。而且batch和at命令都將自動(dòng)轉(zhuǎn)入后臺(tái),所以
????啟動(dòng)的時(shí)候也不需要加上&符號(hào)。
????cron命令
????前面介紹的兩條命令都會(huì)在一定時(shí)間內(nèi)完成一定任務(wù),但是要注意它們都只能執(zhí)行一次
????。也就是說,當(dāng)指定了運(yùn)行命令后,系統(tǒng)在指定時(shí)間完成任務(wù),一切就結(jié)束了。但是在
????很多時(shí)候需要不斷重復(fù)一些命令,比如:某公司每周一自動(dòng)向員工報(bào)告頭一周公司的活
????動(dòng)情況,這時(shí)候就需要使用cron命令來完成任務(wù)了。
????實(shí)際上,cron命令是不應(yīng)該手工啟動(dòng)的。cron命令在系統(tǒng)啟動(dòng)時(shí)就由一個(gè)shell腳本自動(dòng)
????啟動(dòng),進(jìn)入后臺(tái)(所以不需要使用&符號(hào))。一般的用戶沒有運(yùn)行該命令的權(quán)限,雖然超
????級(jí)用戶可以手工啟動(dòng)cron,不過還是建議將其放到shell腳本中由系統(tǒng)自行啟動(dòng)。
????首先cron命令會(huì)搜索/var/spool/cron目錄,尋找以/etc/passwd文件中的用戶名命名的
????crontab文件,被找到的這種文件將載入內(nèi)存。例如一個(gè)用戶名為foxy的用戶,它所對(duì)應(yīng)
????的crontab文件就應(yīng)該是/var/spool/cron/foxy。也就是說,以該用戶命名的crontab文
????件存放在/var/spool/cron目錄下面。cron命令還將搜索/etc/crontab文件,這個(gè)文件是
????用不同的格式寫成的。
????cron啟動(dòng)以后,它將首先檢查是否有用戶設(shè)置了crontab文件,如果沒有就轉(zhuǎn)入“休眠”
????狀態(tài),釋放系統(tǒng)資源。所以該后臺(tái)進(jìn)程占用資源極少。它每分鐘“醒”過來一次,查看
????當(dāng)前是否有需要運(yùn)行的命令。命令執(zhí)行結(jié)束后,任何輸出都將作為郵件發(fā)送給crontab的
????所有者,或者是/etc/crontab文件中MAILTO環(huán)境變量中指定的用戶。
????上面簡(jiǎn)單介紹了一些cron的工作原理,但是cron命令的執(zhí)行不需要用戶干涉;需要用戶
????修改的是crontab中要執(zhí)行的命令序列,所以下面介紹crontab命令。
????crontab命令
????crontab命令用于安裝、刪除或者列出用于驅(qū)動(dòng)cron后臺(tái)進(jìn)程的表格。也就是說,用戶把
????需要執(zhí)行的命令序列放到crontab文件中以獲得執(zhí)行。每個(gè)用戶都可以有自己的crontab
????文件。下面就來看看如何創(chuàng)建一個(gè)crontab文件。
????在/var/spool/cron下的crontab文件不可以直接創(chuàng)建或者直接修改。crontab文件是通過
????crontab命令得到的?,F(xiàn)在假設(shè)有個(gè)用戶名為foxy,需要?jiǎng)?chuàng)建自己的一個(gè)crontab文件。
????首先可以使用任何文本編輯器建立一個(gè)新文件,然后向其中寫入需要運(yùn)行的命令和要定
????期執(zhí)行的時(shí)間。
????然后存盤退出。假設(shè)該文件為/tmp/test.cron。再后就是使用crontab命令來安裝這個(gè)文
????件,使之成為該用戶的crontab文件。鍵入:
????crontab test.cron
????這樣一個(gè)crontab 文件就建立好了。可以轉(zhuǎn)到/var/spool/cron目錄下面查看,發(fā)現(xiàn)多了
????一個(gè)foxy文件。這個(gè)文件就是所需的crontab 文件。用more命令查看該文件的內(nèi)容可以
????發(fā)現(xiàn)文件頭有三行信息:
????#DO NOT EDIT THIS FILE -edit the master and reinstall.
????#(test.cron installed on Mon Feb 22 14:20:20 1999)
????#(cron version --$Id:crontab.c,v 2.13 1994/01/17 03:20:37 vivie Exp $)
????大概意思是:
????#切勿編輯此文件——如果需要改變請(qǐng)編輯源文件然后重新安裝。
????#test.cron文件安裝時(shí)間:14:20:20 02/22/1999
????如果需要改變其中的命令內(nèi)容時(shí),還是需要重新編輯原來的文件,然后再使用crontab命
????令安裝。
????可以使用crontab命令的用戶是有限制的。如果/etc/cron.allow文件存在,那么只有其
????中列出的用戶才能使用該命令;如果該文件不存在但cron.deny文件存在,那么只有未列
????在該文件中的用戶才能使用crontab命令;如果兩個(gè)文件都不存在,那就取決于一些參數(shù)
????的設(shè)置,可能是只允許超級(jí)用戶使用該命令,也可能是所有用戶都可以使用該命令。
????crontab命令的語法格式如下:
????crontab [-u user] file
????crontab [-u user]{-l|-r|-e}
?
????第一種格式用于安裝一個(gè)新的crontab 文件,安裝來源就是file所指的文件,如果使用
????“-”符號(hào)作為文件名,那就意味著使用標(biāo)準(zhǔn)輸入作為安裝來源。
????-u 如果使用該選項(xiàng),也就是指定了是哪個(gè)具體用戶的crontab 文件將被修改。如果不指
????定該選項(xiàng),crontab 將默認(rèn)是操作者本人的crontab ,也就是執(zhí)行該crontab 命令的用
????戶的crontab 文件將被修改。但是請(qǐng)注意,如果使用了su命令再使用crontab 命令很可
????能就會(huì)出現(xiàn)混亂的情況。所以如果是使用了su命令,最好使用-u選項(xiàng)來指定究竟是哪個(gè)
????用戶的crontab文件。
????-l 在標(biāo)準(zhǔn)輸出上顯示當(dāng)前的crontab。
????-r 刪除當(dāng)前的crontab文件。
????-e 使用VISUAL或者EDITOR環(huán)境變量所指的編輯器編輯當(dāng)前的crontab文件。當(dāng)結(jié)束編輯
????離開時(shí),編輯后的文件將自動(dòng)安裝。
????[例7]
????# crontab -l #列出用戶目前的crontab。
????10 6 * * * date
????0 */2 * * * date
????0 23-7/2,8 * * * date
????#
????在crontab文件中如何輸入需要執(zhí)行的命令和時(shí)間。該文件中每行都包括六個(gè)域,其中前
????五個(gè)域是指定命令被執(zhí)行的時(shí)間,最后一個(gè)域是要被執(zhí)行的命令。每個(gè)域之間使用空格
????或者制表符分隔。格式如下:
????minute hour day-of-month month-of-year day-of-week commands
????第一項(xiàng)是分鐘,第二項(xiàng)是小時(shí),第三項(xiàng)是一個(gè)月的第幾天,第四項(xiàng)是一年的第幾個(gè)月,
????第五項(xiàng)是一周的星期幾,第六項(xiàng)是要執(zhí)行的命令。這些項(xiàng)都不能為空,必須填入。如果
????用戶不需要指定其中的幾項(xiàng),那么可以使用*代替。因?yàn)?是統(tǒng)配符,可以代替任何字符
????,所以就可以認(rèn)為是任何時(shí)間,也就是該項(xiàng)被忽略了。在表4-1中給出了每項(xiàng)的合法范圍
????。
?
????表4-1 指定時(shí)間的合法范圍
????時(shí)間
???? 合法值
????minute
???? 00-59
????hour
???? 00-23,其中00點(diǎn)就是晚上12點(diǎn)
????day-of-month
???? 01-31
????month-of-year
???? 01-12
????day-of-week
???? 0-6,其中周日是0
?
????這樣用戶就可以往crontab 文件中寫入無限多的行以完成無限多的命令。命令域中可以
????寫入所有可以在命令行寫入的命令和符號(hào),其他所有時(shí)間域都支持列舉,也就是域中可
????以寫入很多的時(shí)間值,只要滿足這些時(shí)間值中的任何一個(gè)都執(zhí)行命令,每?jī)蓚€(gè)時(shí)間值中
????間使用逗號(hào)分隔。
????[例8]
????5,15,25,35,45,55 16,17,18 * * * command
????這就是表示任意天任意月,其實(shí)就是每天的下午4點(diǎn)、5點(diǎn)、6點(diǎn)的5 min、15 min、25 m
????in、35 min、45 min、55 min時(shí)執(zhí)行命令。
????[例9] 在每周一,三,五的下午3:00系統(tǒng)進(jìn)入維護(hù)狀態(tài),重新啟動(dòng)系統(tǒng)。那么在cro
????ntab 文件中就應(yīng)該寫入如下字段:
????00 15 * * 1,3,5 shutdown -r +5
????然后將該文件存盤為foxy.cron,再鍵入crontab foxy.cron安裝該文件。
????[例10] 每小時(shí)的10分,40分執(zhí)行用戶目錄下的innd/bbslin這個(gè)指令:
????10,40 * * * * innd/bbslink
????[例11] 每小時(shí)的1分執(zhí)行用戶目錄下的bin/account這個(gè)指令:
????1 * * * * bin/account
????[例12] 每天早晨三點(diǎn)二十分執(zhí)行用戶目錄下如下所示的兩個(gè)指令(每個(gè)指令以;分隔
????):
????20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire>expire.1st)
????[例13] 每年的一月和四月,4號(hào)到9號(hào)的3點(diǎn)12分和3點(diǎn)55分執(zhí)行/bin/rm -f expire.1
????st這個(gè)指令,并把結(jié)果添加在mm.txt這個(gè)文件之后(mm.txt文件位于用戶自己的目錄位
????置)。
????12,55 3 4-9 1,4 * /bin/rm -f expire.1st>>mm.txt
????[例14] 我們來看一個(gè)超級(jí)用戶的crontab文件:
????#Run the ‘a(chǎn)trun’ program every minutes
????#This runs anything that’s due to run from ‘a(chǎn)t’.See man ‘a(chǎn)t’ or ‘a(chǎn)trun
????’.
????0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/atrun
????40 7 * * * updatedb
????8,10,22,30,39,46,54,58 * * * * /bin/sync
????進(jìn)程的掛起及恢復(fù)命令bg、fg
????作業(yè)控制允許將進(jìn)程掛起并可以在需要時(shí)恢復(fù)進(jìn)程的運(yùn)行,被掛起的作業(yè)恢復(fù)后將從中
????止處開始繼續(xù)運(yùn)行。只要在鍵盤上按,即可掛起當(dāng)前的前臺(tái)作業(yè)。
????[例15]
????$ cat > text.file
????[1] + stopped cat > text.file
????$ jobs
????[1]+ stopped cat > text.file
????在鍵盤上按后,將掛起當(dāng)前執(zhí)行的命令cat。使用jobs命令可以顯示shell的作
????業(yè)清單,包括具體的作業(yè)、作業(yè)號(hào)以及作業(yè)當(dāng)前所處的狀態(tài)。
????恢復(fù)進(jìn)程執(zhí)行時(shí),有兩種選擇:用fg命令將掛起的作業(yè)放回到前臺(tái)執(zhí)行;用bg命令將掛
????起的作業(yè)放到后臺(tái)執(zhí)行。
????[例16] 用戶正在使用Emacs,突然需要查看系統(tǒng)進(jìn)程情況。就首先使用組合
????鍵將Emacs進(jìn)程掛起,然后使用bg命令將其在后臺(tái)啟動(dòng),這樣就得到了前臺(tái)的操作控制權(quán)
????,接著鍵入“ps –x”查看進(jìn)程情況。查看完畢后,使用fg命令將Emacs帶回前臺(tái)運(yùn)行即
????可。其命令格式為:
????$ bg emacs
????$ ps –x
????$ fg emacs
????默認(rèn)情況下,fg和bg命令對(duì)最近停止的作業(yè)進(jìn)行操作。如果希望恢復(fù)其他作業(yè)的運(yùn)行,
????可以在命令中指定要恢復(fù)作業(yè)的作業(yè)號(hào)來恢復(fù)該作業(yè)。例如:
????$ fg 1
????cat > text.file
????靈活使用上述命令,將給自己帶來很大的方便。
????進(jìn)程查看
????本節(jié)中要介紹的不只是進(jìn)程查看方面的內(nèi)容,由于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 用戶空閑時(shí)間,即未進(jìn)行操作的時(shí)間
????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è)用戶。第一列是登錄用戶的帳號(hào);第二列是登錄所使用
????的終端;第三列是登錄時(shí)間;第四列是用戶從什么地方登錄的網(wǎng)絡(luò)地址,這里是域名。
????一般來說,這樣就可以了解登錄用戶的大致情況了。但有時(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)行的工作,并且統(tǒng)
????計(jì)數(shù)據(jù)相對(duì)who命令來說更加詳細(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 長格式。
????-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 只列出指定進(jìn)程的情況。各進(jìn)程ID之間使用逗號(hào)分隔。該進(jìn)程列表必須在命令行參
????數(shù)的最后一個(gè)選項(xiàng)后面緊接著給出,中間不能插入空格。比如:ps -f1,4,5。
????以下介紹長命令行選項(xiàng),這些選項(xiàng)都使用“--”開頭:
????--sort X[+|-] key [,[+|-] key [,…]] 從SORT KEYS段中選一個(gè)多字母鍵
?????!?”字符是可選的,因?yàn)槟J(rèn)的方向就是按數(shù)字升序或者詞典順序。比如: ps -ja
????x -sort=uid,-ppid,+pid。
????--help 顯示幫助信息。
????--version 顯示該命令的版本信息。
????在前面的選項(xiàng)說明中提到了排序鍵,接下來對(duì)排序鍵作進(jìn)一步說明。需要注意的是排序
????中使用的值是ps使用的內(nèi)部值,并非僅用于某些輸出格式的偽值。排序鍵列表見表4-3。
????表4-3 排序鍵列表
????短格式 長格式 說 明
????c cmd 可執(zhí)行的簡(jiǎn)單名稱
????C cmdline 完整命令行
????f flags 長模式標(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)程情況。
????[例21] 下面是使用x選項(xiàng)的例子:
????$ 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
????可以發(fā)現(xiàn)突然一下子就多出了那么多的進(jìn)程。這些多出來的進(jìn)程就是沒有控制終端的進(jìn)
????程。
????前面看到的所有進(jìn)程都是test用戶自己的。其實(shí)還有許多其他用戶在使用著系統(tǒng),自然
????也就對(duì)應(yīng)著其他的很多進(jìn)程。如果想對(duì)這些進(jìn)程有所了解,可以使用a選項(xiàng)來查看當(dāng)前系
????統(tǒng)所有用戶的所有進(jìn)程。經(jīng)常使用的是aux組合選項(xiàng),這可以顯示最詳細(xì)的進(jìn)程情況。
?
????[例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
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
