热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linuxat命令定时发送邮件具体用法

Linuxat命令定时发送邮件具体用法-51CTO.COM2010-06-2212:58佚名Linux公社我要评论(T有时候需要在某个时候通知别人或自己做某件事情,对于一些天天读邮

Linux at命令定时发送邮件具体用法 - 51CTO.COM

2010-06-22 12:58 佚名 Linux公社 我要评论(T
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

    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命令定时发送邮件具体用法
    2010-06-22 12:58 佚名 Linux公社 我要评论(T
    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

      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,nohup
      2006年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 文件就建立好了。可以转到/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


      推荐阅读
      author-avatar
      瘧59999
      这个家伙很懒,什么也没留下!
      PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
      Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有