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

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