[Linux-操作系统(第3版)][电子课件]-[171页]

PPT
  • 阅读 101 次
  • 下载 0 次
  • 页数 171 页
  • 大小 461.146 KB
  • 2022-11-26 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
[Linux-操作系统(第3版)][电子课件]-[171页]
可在后台配置第一页与第二页中间广告代码
[Linux-操作系统(第3版)][电子课件]-[171页]
可在后台配置第二页与第三页中间广告代码
[Linux-操作系统(第3版)][电子课件]-[171页]
可在后台配置第三页与第四页中间广告代码
[Linux-操作系统(第3版)][电子课件]-[171页]
[Linux-操作系统(第3版)][电子课件]-[171页]
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 171
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
文本内容

【文档说明】[Linux-操作系统(第3版)][电子课件]-[171页].pptx,共(171)页,461.146 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-54853.html

以下为本文档部分文字说明:

第6章进程、任务与作业管理本章内容•6.1程序和进程的概念•6.2登录shell的启动与定制•6.3Linux系统的启动过程分析•6.4服务管理•6.5进程管理与调度命令•6.6任务的自动调度•6.7进程管理图形界面6.1

程序和进程的概念•6.1.1程序、进程、作业和任务•6.1.2调度策略与优先级的计算•6.1.3Linux操作系统的启动•6.1.40#进程与1#进程•6.1.5进程状态及查询(ps)•6.1.6三类进程6.1.1程序、进程、作业和任务•程序是一

个存储在介质上的,既具有可执行的属性,又具有执行的内容文件。进程是一个程序的动态执行过程。程序的执行要完成某种特定的功能,过程表现为对某个或某些数据的加工和处理。进程突出了一个程序动态的执行过程,而一个程序存储在介质上的文件或数据是一种静态信息。6.1.1程序、进程、

作业和任务•在多任务、多用户系统中进程具有并发和并行特征。在一个系统内部,同时可以运行很多进程,甚至可以让同一个程序多次同时运行,但它们对应不同的进程,在系统内有不同的进程标识,也就是说不同的进程可以执行同一

个程序,但可能使该程序所处理的数据集有所不同。6.1.1程序、进程、作业和任务•作业或任务是用户需要计算机完成某项任务时要求计算机所做工作的集合,一个作业可能需要几个程序联合完成。当用户向计算机提交了一个在指定时间执行或重复执行的工作,就可以认为

向计算机提交了作业或任务。6.1.2调度策略与优先级的计算•在UNIX/Linux系统中,每个进程在执行时的优先级是动态变化的,只有优先级最高的进程才能得到运行。当一个进程占有处理机开始执行时,它们的优先级会随着执行时间的增加而逐渐降低,以至于失去处理机。失去处理机的原因可能是多方面的

,比如,时间片用完或资源不到位自动放弃处理机,也可能是被优先级高的进程抢占或执行完毕。若它还没有执行完毕,则其优先级将变为“最低”,然后到调度队列的最后排队。随着等待时间的增加,它的优先级逐步增加,在就绪队列中的位置逐步前移,优先级达到最高时才能再次获得处理机而被执行。6.1.2调度策略

与优先级的计算•在优先级计算过程中有一个静态参数参与计算,这就是传统UNIX的NiceLevel优先级(优先数),按传统做法,把这个参数记为NICE。系统为每个进程设置了一个默认的NICE值(0),通过命令nice或renice命令可以调整进程的N

ICE值,从而达到调整优先级的目的。在Linux系统中,它的调整范围为-20~19(其他UNIX中的NICE取值范围可能与此不同),沿用UNIX的传统,NICE的值越大,进程的优先级越低,得到执行的机会越少。6.1.3Linux操作系统的

启动•Linux系统的启动是在其引导程序(引导块或逻辑引导扇区)被装入后在该引导程序的控制下进行的。首先初始化系统内部数据结构,如构造空闲缓冲区、区表结构、页表项等,然后将根文件系统安装到根“/”下,并创建系统的0#进程、设置

它的运行环境,至此系统的内核已经启动完成,但此时系统还不能做太多工作,至少还缺少与用户的交互部分。为此,系统继续引导,创建1#进程,然后由1#进程做进一步初始化工作,直到启动完毕,各种服务开始运行,终端用户可以登录。6.1.3Linux操作系统的启动•1#进程继续初始化过程是按照初始化配置文

件进行的,这个配置文件在早期时为/etc/inittab,现在在不同系统中已经有了各自的变化。启动配置文件的内容用于规定启动哪些服务或管理进程,为设定终端生成登录子进程,然后等待用户在终端上登录,整个启动过程如图所

示。6.1.40#进程与1#进程•0#进程与1#进程是UNIX/Linux系统中两个最重要的进程。•在UNIX系统中0#进程是唯一只在核心态下执行的进程。它的功能有三点:调度分配处理机;负责进程交换;初始化时创建1#进程。在Lin

ux系统中,0#进程在创建出1#进程后变成了空闲进程(Idler),当系统中没有其他进程就绪时它才运行,而它原来的功能被分散在几个内核进程中。6.1.40#进程与1#进程•1#(init或systemd)进程

是系统启动时创建的创建进程的进程。它的主要作用是根据启动配置文件的内容初始化系统、创建系统运行所需的进程。在Linux中,还要根据运行级别触发运行级别初始化事件,执行相应的脚本程序进行初始化。系统初始化完成后,1#进程变成了回收进程,专门领养没有父进程的孤儿进程或回收状态

为ZOMBIE的僵尸进程。6.1.40#进程与1#进程•从进程创建关系来看,0#进程创建了1#进程,它是1#进程的父进程。1#进程在系统启动过程中创建了系统所需要的其他进程,这些被创建的进程是1#进程的子进程,

而子进程又可创建属于自己的子进程,因此系统中除了0#进程外,1#进程是其他所有进程的祖先进程。•Linux系统的进程之间的家族关系可用命令pstree来查看,下图为某Linux系统的进程树的局部(来自pstree-p的输出)。•init(1)-

+-NetworkManager(1004)-+-dhclient(1060)•|`-{NetworkManager}(1062)•|-accounts-daemon(1322)---{accounts-

daemon}(1331)•|-acpid(1134)•|-anacron(1133)---sh(2473)---run-parts(2474)---apt(2480)---sleep(2515)•|-atd(1158)•|-console-kit-dae(1390)-+-{c

onsole-kit-dae}(1391)•|`-{console-kit-dae}(1455)•|-cron(1157)•|-cupsd(928)•|-dbus-daemon(843)•|-dconf-service(2456)-+-{dconf-service}(2457)•|`-{dconf

-service}(2459)•|-geoclue-master(2146)•|-getty(1090)6.1.5进程状态及查询(ps)•1.功能与用法•ps的功能是显示进程的状态和信息,给出系统当前正在运行进程信息的快照,可以配合kill结束系统中失控或不必要的进程。ps支持多种UNIX系统格

式的个性化显示方式,其用法为:•ps[options]•2.参数描述•ps命令的参数繁多,部分参数如下表所示。参数功能说明参数功能说明-A,-e显示系统内的所有进程-a显示所有与终端相关的进程(但不包括会话组长)a显示当前终

端的所有进程-c显示CLS和PRI栏c列出进程名,但不包含路径名-Cpname显示进程名为pname的同名进程信息-d显示所有进程(但不包括会话组长)e在命令名后显示环境变量-f显示带有路径的进程名和进程参数f用AS

CII字符显示树状结构的进程间关系g,-g/-Ggid显示与进程组gid相关的信息h不显示标题-H显示树状结构以表示进程间的关系-j,j以作业控制方式显示进程信息-l,l以长格式显示进程信息L显示标题栏信

息-N显示除执行ps终端以外的所有进程p/-ppids显示指定进程的信息T/r只显示本终端所有/正在执行程序t/-ttty显示tty相关进程信息,t用于显示当前终端进程信息u,U/-Uuid显示与用户uid相关的信息v以虚拟内存方式显示进程状态x显示所有进程信息,不区分终端Z/-Z/-M显示进程与

SELinux相关的信息6.1.5进程状态及查询(ps)•3.使用示例•#ps-el#长格式显示所有进程的信息•#ps-Af|more#带命令及参数显示系统中的所有进程信息,并分屏显示•#ps-t/dev/tty1#查询与终

端tty1相关的进程信息。可简略为ps-t1或ps-ttty1•#ps-f-ugjshao#查询与用户(gjshao)相关的信息•#ps-axj#查询整个系统内的进程信息情况6.1.5进程状态及查询(ps)•4.进程的状态•

在ps输出信息中的状态标志如下表所示。状态说明RRunning/Runable,进程在执行中或在就绪队列排队DDelaying,非中断性睡眠,通常是因为等待I/OSSleep,正在睡眠,等待事件发生TTracedorstopped,被跟踪或停止ZZombie/D

efunction,僵尸状态。进程已经终止,但父进程没有对它的结束做适当处理WWait,无内存页面(被换出)(kernel2.6.xx后不再使用)N低优先级进程LLocked,页面被锁进内存(用于实时控制或用户控制的I/O)<高

优先级进程6.1.6三类进程•1.前台进程•前台进程(foregroundprocess)是指用户直接控制的用于完成某个任务的进程,因此也叫终端交互式进程。它从标准输入读数据,向标准输出写数据,将错误信息输出到标准错误,也可以是用户直接交互控制的完成某种

功能的程序,如文字加工与处理、游戏、浏览器和不同行业的各种应用程序等。6.1.6三类进程•2.后台进程•后台进程(backgroundprocess)是指在系统后台运行的进程。在一个系统中可能运行着很多一般用户不知道、也不关心的进程,如系统本

身用于管理和控制的进程、各种服务器进程等。前台进程也可放在后台运行,但这时要用到I/O重定向。•守候进程(daemonprocess)也叫服务器或精灵进程,它是后台进程的一种,该类进程永久不停地运行着,以等待其他进程提出服务请求而为它们提供服务。6.1.6三类进程•3.批处理进程•批处理

进程(batchprocess)是用户按照某种意图将一批作业和任务通过编程的方法提交给系统,让系统在某个合适的时间来调度和执行的进程。批处理进程是通过shell编程等方法,将所要处理的工作规划好,之后由系统启动并依次执行的进程。事实上,是在某个she

ll的控制下解释执行的。6.2登录shell的启动与定制•6.2.1用户登录过程与登录shell的启动•6.2.2用户登录控制与shell的定制6.2.1用户登录过程与登录shell的启动•1.登录过程与启动控制文件•登录shell的启动流程和工

作过程如图所示。6.2.1用户登录过程与登录shell的启动•用户登录过程中,在输入用户名和密码后,系统要检查以下文件。•(1)/etc/passwd:系统用户数据库。•(2)/etc/shadow:影子

密码和用户登录控制文件。•(3)/etc/group:系统组定义文件。•如果用户名和密码合法,则启动交互shell,否则要求用户重新输入用户名和密码。6.2.1用户登录过程与登录shell的启动•2.登

录shell的启动•在系统启动shell过程中,依次进行以下操作。•(1)执行系统profile文件/etc/profile(并在它的控制下执行/etc/profile.d/目录下的*.sh脚本文件)。•(2)执行用户profile文件~/.bash_pr

ofile(Ubuntu用的是~/.profile)。•(3)如果~/.bashrc存在则执行之。•(4)如果/etc/bashrc文件存在则执行之。•需要说明的是,以上步骤都是在当前shell内执行的(参见shell编程部分),目的是为用户设置环境变量或做相关准备。一切执行完毕

之后出现系统提示符。6.2.2用户登录控制与shell的定制•根据用户登录和shell的启动过程可以看出,用户可在shell的启动控制文件(/etc/profile,~/.bash_profile或~/.p

rofile,/etc/bashrc和~/.bashrc)中加入自己的内容,而影响用户shell的启动过程,如设置或添加自己所需的环境变量等。如果要在这些文件中加入用户自己的内容,一般放在文件的最后,这样可以使用户在登录之后就进入某个特定程序,当其退出时用户也随之注销。因此,可让

用户只在某个规定封闭环境下工作,而不让其真正进入系统,看不到系统的提示符,从而可以提高系统的安全性和操作的方便性。当然,这需要一定的shell编程知识。6.2.2用户登录控制与shell的定制•登录shell定制,除

了以上对shell启动过程的控制之外,还可以直接修改用户的shell程序,这可以在用户创建时完成,也可以在用户创建后处理。6.2.2用户登录控制与shell的定制•1.修改用户登录控制文件•用户的登录控制文件为~/.bas

h_profile或~/.profile、~/.bashrc,可以修改其中之一来影响登录shell的启动。一般修改的是~/.bash_profile(红帽)或~/.profile(Ubuntu),至于怎样修改,添加或去除什么内容,要根据实际需要。例如,可加进一个特定程序~/.ba

sh_profile或~/.profile文件的最后,使得在用户登录时,在一切都准备之后执行之(参见shell编程部分)。6.2.2用户登录控制与shell的定制•2.修改用户的登录shell•shell有多种,用

户可以从中选择适合自己需要的。大家可能已经注意到了,useradd和usermod命令都有一个-s选项,这个选项是用来选择shell的。也就是说,可以使用-sSHELL选项,在创建用户或修改用户时为用户指定一个shell而非使用默认的bash或bsh。例如:•useradd

-s/bin/cshtest#创建test用户,并指定登录shell为csh•usermod-s/bin/cshtest#修改test用户,使其登录shell为csh6.2.2用户登录控制与shell的定制•另外Linux还提供了一个命令chsh,意思是改变用户shell,可以用它

来为用户修改登录shell,方法是:•chsh-sSHELLUSER#将用户USER的登录shell修改为SHELL•USER为用户名;SHELL为带有路径的shell程序名。在执行过程中,若SHELL不在/etc/sh

ells中存在,则chsh会发出警告,但并不影响修改。使用示例如下:•chsh-s/bin/tcshtest#将用户test的登录shell修改为/bin/tcsh6.3Linux系统的启动过程分析•6.3

.1SysVinit•6.3.2upstart•6.3.3systemd6.3.1SysVinit•1./etc/inittab文件•1)/etc/inittab文件结构•/etc/inittab是系统初始化配置文件之一,它描述在系统启动时哪个进程将被启动。在/etc/inittab文件中

以#开始的行为注释行,空行不起作用,其他的为有效行。有效行结构为:•id:runlevels:action:process6.3.1SysVinit•(1)id:1~4个字符长的唯一标识(在有的系统内被限制在1~2个字符),而对于终端线路来讲,其值为对

应的线路号。•(2)runlevels:运行级别(参见init命令)。•(3)action:在runlevels运行级别应该采取的动作。•(4)process:采取action时所执行的程序。•部分有效的action域值及意义如下表所示。值意义respaw

n进程将重新启动,当process死掉时系统将立即重新启动它wait当系统进入某级别时进程将运行一次,且在运行期间,init将等待它结束once当系统进入某级别时进程将运行一次boot在系统启动时执行该命令,此时的运行级别将被忽略b

ootwait在系统启动时执行,init将等待该进程的结束,其中的运行级别将被忽略off什么都不做,对于终端线路来讲,相当于没有被激活ondemond当某个进程设置该标志时,启动指定运行级运行时将被执行s

ysinit系统启动时执行。它将先于boot或bootwait执行,其中的运行级别将被忽略initdefault设置系统启动的默认级别powerwait当UPS关闭时执行,init将等待此进程执行完毕powerfail当UPS掉电时执行,但init将不等待

此进程执行完毕powerokwait当UPS恢复时执行powerfailnow当UPS电池将空时执行此命令ctrlaltdel当系统收到信号SIGINT,即用户同时按下ctrl_alt_del时init执行该行规定的程序,通常是重新启动6.3.1SysVinit•2)/etc/inittab示例•

某Linux系统/etc/inittab内容如下:•#设置默认运行级•id:5:initdefault:•#系统初始化•si::sysinit:/etc/rc.d/rc.sysinit6.3.1SysVinit•#处理不同运行级的脚本•l0:0:wa

it:/etc/rc.d/rc0•l1:1:wait:/etc/rc.d/rc1•...............•l6:6:wait:/etc/rc.d/rc6•#处理ctrl+alt+del•ca::ctrlaltdel:/sbin/shutdown-t3

-rnow6.3.1SysVinit•#处理电源故障•pf::powerfail:/sbin/shutdown-f-h+2"PowerFailure;SystemShuttingDown"•#处理电源恢复•pr:12345:powerokwait:/sbin/shutdown-c"Pow

erRestored;ShutdownCancelled"6.3.1SysVinit•#为多用户级(2345)启动终端进程•1:2345:respawn:/sbin/mingettytty1•...............•6:2345:respaw

n:/sbin/mingettytty6•#为第5级启动X-Windows•x:5:respawn:/etc/X11/prefdm-nodaemon6.3.1SysVinit•2.与启动过程相关的文件和目录•除了/etc/inittab外,与系统初始化相关的还有其他文件和目录。•1)启动脚本文件

汇总目录init.d•所谓启动脚本文件汇总目录,是指存放系统启动所需脚本文件的目录,在红帽系统下为:•/etc/init.d或/etc/rc.d/init.d(前者是后者的一个符号链接)6.3.1SysVinit•在ubuntu下仅有:•/etc/init.d•该目录的每一个文

件负责一个功能或服务的启动与关闭管理,且文件名与服务名密切相关,比如,halt用于系统的关闭、atd和crond分别用于at和crontab的作业调度、vsftpd用于vsftp服务器的启动与停止等。6

.3.1SysVinit•2)不同运行级的启动和停止脚本•Linux系统可以运行在不同的级别,每个运行级都有自己的启动和停止脚本目录。该目录在红帽系统为:•/etc/rcN.d,/etc/rc.d/rcN.d(0≦N≦6,为不同的运行级)•在ubuntu下仅为:•/etc/rcN.

d(0≦N≦6,为不同的运行级)6.3.1SysVinit•不同目录的内容对应该运行级初始化所使用的脚本。其中的每一个脚本文件都是init.d内某个脚本文件的符号链接,用于对某个服务或管理程序的启动或关闭。•rcN.d(

0≦N≦6)目录内文件排列是按照该级别初始化顺序排列的。系统启动时,对应级别启动目录内的启动脚本是按脚本文件名排列顺序由低到高依次执行的,因此rcN.d(0≦N≦6)内文件命名的排列顺序是相当重要的,否则可能破坏系统内进程间的相互依赖关系。因此文件名必须按顺序排

列正确。6.3.1SysVinit•每个rcN.d目录都是由K和S开头的脚本文件组成的,K开头的文件用于停止,S开头的文件用于启动,其他类型的脚本文件将被忽略。•为使目录rcN.d(0≦N≦6)内的文件名按启动顺序排列

正确且具有实际意义,文件名一般采用[KS]MNinitdname的形式,文件的开头字符为K或S用于标明停止或启动,MN为两位整数用于排列顺序,initdname为对应init.d内的脚本文件名。6.3.1SysVinit•例如,在r

c5.d有脚本程序:•lrwxrwxrwx1rootroot15Oct2915:19K35dhcpd->../init.d/dhcpd•lrwxrwxrwx1rootroot18Oct2915:19S99rc.local->../in

it.d/rc.local*•前者用于dhcpd服务的停止,后者用于rc.local的启动。6.3.1SysVinit•在同一个rcN.d(0≦N≦6)目录内可能既有启动脚本又有停止脚本,停止脚本用于对切换前一运行级进程的处理。由于

K排列在S之前,所以在对某一个运行级初始化时总是先完成停止旧运行级的工作或任务,然后再进行新运行级的初始化。•用户启动某个任务的脚本可使用以上办法进行处理,也可以使用直接将脚本放在相应运行级的办法来实现。按启动顺序,脚本程序命名时应将其放在系统启动脚本的后面。用户启动的服务也可在停止目录内进

行相应停止处理。更常用的方法是将用户启动脚本追加在/etc/rc.d/rc.local或/etc/rc.local文件的尾部。6.3.1SysVinit•3)不同运行级脚本执行控制程序•不同运行级脚本执行控制程序为:•/etc/rc,/etc/rc.d/rc(前者

是后者的符号链接),在Ubuntu下为/etc/init.d/rc•由/etc/inittab文件的内容可知,系统在进行运行级切换时,总是通过此脚本控制不同运行级脚本的执行,方法是:•lN:N:wait:/etc/rc.d/rcN(

0≦N≦6)•例如:•l5:5:wait:/etc/rc.d/rc56.3.1SysVinit•4)红帽系统/etc/rc.d•在红帽系列系统中,将存放在/etc下的init.d、rc.local、rc0.d~rc6.d等集中存放在/etc/rc.d之内,然后再通过在/etc

下创建同名符号链接的办法实现与其他系统的兼容。命令•#ls-l-d/etc/rc*•输出将告诉用户结果。6.3.1SysVinit•5)用户进程启动脚本•本地用户进程启动脚本为:•/etc/rc.local,/etc/rc.d/rc.local•用于本地用户定义程序的

启动。若用户需要在系统启动时启动某个自己的程序,则可以将启动命令放在该脚本里。对此文件的修改将会在各真正的(0、1和6外)运行级有效,因为在目录rc2.d~rc5.d中均有一个文件S99local指向该文件。•这里需要提醒的是,加入的部分程序应该是瞬间可以结束的,或让加

入的部分在后台运行,否则系统的初化或启动过程将因加入程序的运行而无法继续。6.3.2upstart•从形式上看,upstart是在sysVinit基础上发展起来的,因为使用了sysVinit几乎所有的目录和配置文件,但是upstart拆分了/etc/inittab文件,将其中每一行的

功能变成一个事件脚本文件,然后集中存放在一个叫事件目录的地方(该目录在红帽系列系统中为/etc/event.d,在ubuntu下为/etc/init,为了描述方便,我们把这个目录称为事件目录,统一记为EVENT_D

)。于是系统初始化时,由原来的扫描/etc/inittab文件变成了扫描事件目录。6.3.2upstart•在upstart负责启动管理的系统中,/etc/inittab的唯一作用是设置默认运行级。其中的关键一行内容是:•id:DEFAULT_LEVEL:initdefault:#DEFAUL

T_LEVEL为默认运行级,可取1~5。比如•id:5:initdefault:#DEFAULT_LEVEL=5。默认启动级别为5•若/etc/inittab不存在,或DEFAULT_LEVEL未定义,则桌面或工作站系统的默认

运行级为5。6.3.2upstart•1.事件目录的内容•事件目录中的每个文件对应一个初始化事件。事件脚本处理文件与原inittab文件内容的对应关系如表所示。事件处理脚本文件功能与原/etc/inittab的对应关系rcS

系统初始化事件处理si::sysinit:/etc/rc.d/rc.sysinitrc0运行级别0初始化事件处理l0:0:wait:/etc/rc.d/rc0………rc6运行级别6初始化事件处理l6:6:wait:/etc/rc.d/rc6tty1终端F1事件

处理1:2345:respawn:/sbin/mingettytty1………tty6终端F6事件处理6:2345:respawn:/sbin/mingettytty6serial串口控制台事件处理prefdmX终端启动事件处理x:5:respawn:/etc/X11/pre

fdm-nodaemoncontrol-alt-deleteCtrl_Alt_Del事件处理ca::ctrlaltdel:/sbin/shutdown-t3-rnow6.3.2upstart•说明:•(1)脚本文件的命名方式在红帽系统与ubu

ntu之间有差异但不大,表现在所有文件名在ubuntu都多了个后缀.conf,如红帽的rcS对应ubuntu的rcS.conf。•(2)在ubuntu中,rcS.conf用于single-user模式初始化。•(3)红帽的rcS用于执行传统的sysv-rc启动脚

本,而在ubuntu中,rc-sysinit.conf用于完成此项工作。•(4)在红帽中,0~6级别的初始化脚本分别为rc0~rc6,但在ubuntu中,统一为rc.conf。6.3.2upstart•2.事件脚本文件结构•(1)节(stanzaz)。•在events脚本文件中

包含以下节:•console{logged|output|owner|none}:定义任务输出的处理方式。logged-定向到日志文件;output-定位到标准输出;owner-进程变为console的所有者,可以从键盘接收信号;none-定位到/dev/null。•ch

root<path>:设置chroot路径,比如:chroot/var/named。6.3.2upstart•chdir<path>:设置目录。比如:chdir/var/named。•exec<command><arguments>:执行命令,比如:exec

/bin/true。•env<name>=<value>:定义环境变量,比如:envLD_LIBRARY_PATH=/opt/app/lib。•daemon:设置daemon标志(包含service),任务将在后台运行。•nice<value>:设置nice

值,比如:nice5。6.3.2upstart•pre-start、pre-stop、post-start和post-stop:处理事件间的依赖关系。事先或事后启动与停止。•respawn:若终止,则重新启动。•respawnlimit[count[timeout]]:设置重启限制。若在tim

eout秒内重启次数超过了count次,则将自动停止不再重启。limit的默认值为5秒重启10次。•script...endscript:定义shell脚本块,参见shell编程部分。6.3.2upstart•starton<event>:事件event到

来时执行,例如•startonstartup:系统启动后立即执行。•tartonstoppedrc3:事件'rc3'停止后开始。•stopon<event>:事件到来时停止。例如•stoponrunlevel0:进

入第0级时停止;•stoponstoppingdbusok:'dbus'停止后停止。•umask<umask>:定义umask,比如:umask0755。6.3.2upstart•(2)事件(EVENTS)。•系统的两个核心事件分别是startup和shutdown。除此之外,还

有由startup和shutdown事件引起的其他事件,也有用户触发的事件。常见事件如下:•control-alt-delete:信号ctrl+alt+del。•kbdrequest:键盘事件发生。•p

ower-status-changed:接收信号SIGPWR,电源状态发生了变化。6.3.2upstart•runlevel<LEVEL>:初始化到指定级别LEVEL。•starting<job>:作业job正在启动。•started<job>:作业job已经成功启动。•st

opping<job>:作业job正在停止。•stopped<job>:作业job已经成功终止。•stalled:作业没有执行也没有未决信号。6.3.2upstart•3.基于事件机制的系统启动过程控制•在事件机制控制下的系统启动过程如下:•(1)加电启动内核;•(2)内核启动init;•(3)确

定运行级别N;•(4)触发runlevel事件,开始运行/etc/event.d/rcN;•(5)/etc/event.d/rcN执行/etc/init.d/rcN;•(6)执行/etc/rcN.d/内的脚本文件;•(7)最后启动成功,给出登

录界面。6.3.2upstart•4.事件目录的使用和系统启动控制处理示例•忽略ctrl+alt+del信号。•用于对ctrl+alt+del信号控制的文件为control-alt-delete[.conf],其内容为:•

#control-alt-delete-emergencykeypresshandling•##ThistaskisrunwhenevertheControl-Alt-Deletekeycombinationis•#pressed.Usuallyusedtoshutdo

wnthemachine.•startoncontrol-alt-delete•task•exec/sbin/shutdown-rnow"Control-Alt-Deletepressed"6.3.2upstart•由此可以看出,信号ctrl+alt+del到

来时的默认行为为执行命令•/sbin/shutdown-rnow"Control-Alt-Deletepressed"•若要改变这个行为,只需要修改此控制文件,将其中的exec所执行的命令改为其他命令即可。若要忽略ctrl+alt+del信号,只需将命令改为任何一个不起实际作用的命令,如/bin

/true或/bin/false等就可以。现在,将事件处理文件的最后一行修改为:•exec/bin/true•然后,运行命令“initq”或重启系统后就生效了。•由于upstart正在被systemd所取代,不再给出更多这方面的示例。6.3.3systemd•systemd是

本书所用系统的启动管理和服务管理工具,可用于本书所涉及的所有系统中。在引入systemd的系统中,init命令被替换成systemd,telinit命令被替换成systemctl。当系统启动时,systemd作为1#进程运行,它的作用是初始化系统,并管理系统和

用户空间的各种服务。为了与Sysvinit兼容,如果systemd作为init调用且PID≠1,则它执行telinit(systemctl),且不加修改地传递所有的命令行参数给telinit。•出于对SysVinit的兼容,对用户来讲,sysvinit的内容及系统启动脚本和各种目录的命名方

式等仍然可以沿用,对于以前的SysV的传统服务仍然可以采用传统方法进行管理。6.3.3systemd•1.systemd的Unit•systemd提供一个被称为“unit(单元)”实体的依赖关系系统。系统初始化需要做的事情非常多,system

d将启动过程中的每一步都抽象为一个配置单元。比如,一个服务是一个配置单元,一个挂载点是一个配置单元,一个交换分区的配置是一个配置单元等,但也有一些Unit是系统通过其他配置或系统状态自动创建的。•一个uni

t可以是关于service、socket、device、mountpoint、automountpoint、swapfile、partition、start-uptarget、filesystempath或timer等的。6.3.3s

ystemd•1)常用unit•(1)serviceunit:服务unit,用于服务控制,形如*.service,如crond.service、xinetd.service。•(2)socketuni

t:IPC或网络通信unit,IPC或网络通信控制,形如*.socket,如cups.socket、rpcbind.socket。•(3)targetunit:组合units,用于提供系统在启动过程中的同步点,形如*.target,如default.target、po

weroff.target。•(4)deviceunit:内核设备发现unit,用于实施基于设备的激活,形如*.device,如dev-cdrom.device、dev-cdrw.device、dev-sda.device。6.3.3systemd•(5)mountunit:文

件系统中的安装点unit,形如*.mount,如boot.mount、proc-fs-nfsd.mount。•(6)automountunit:用于为需要安装者提供自动安装能力,形如*.automount,如proc

-sys-fs-binfmt_misc.automount。•(7)timerunit:定时触发器unit,用于基于定时器的定时触发,启动其他活动(Activities),形如*.timer,如systemd-tmpfiles-clean.timer、systemd-rea

dahead-done.timer。•(8)pathunit:路径unit,用于当文件系统对象变化或被修改时启动其他基于路径的活动(activattion),形如*.path,如systemd-ask-password-wall.path。6.3.3systemd•2)unit的常见状态

•在unit被用于启动或关闭的处理过程中,可以处于“active(活动)”(意为启动、绑定、插入等,取决于unit的类型),或“inactive(不活动)”(意为停止、非绑定、被拔出等)状态,也可处于两者之间的正在进行状态“activ

ating(正在激活)”和“deactivating(正在禁止)”。一个类似于inactive特殊的状态“失败(failed)”也是允许的,这种状态在服务失败(进程结束时返回错误码,崩溃或超时)时进入。如果进入了这种状态,则原因将被记

入日志文件。需要说明的是,各种unit状态还可以划分为一些子状态,它们可以被映射到以上5种常见状态。6.3.3systemd•3)unit间的关系•在systemd处理某个引导或启动事务时,诸多的units间存在

着正需求(Requires=)、负需求(Conflects=)和顺序依赖(After=和Before=)等关系,systemd知道并能处理这些依赖关系。•(1)正需求关系(Requires=units):若本unit活跃,则它所需求的units也必须活跃,如果Units中的一个变得不活跃(de

activated)或失败了,则本unit也将变为不活跃状态(deactivated)。6.3.3systemd•(2)负需求(Conflects=units):本unit和units不能共存。若本unit启动,则units必须停

止,反之亦然。•(3)顺序依赖关系(After=units)要求两者都要启动,且本unit先于units启动;同样地,顺序依赖关系(Before=units)要求两者都要启动,且本unit后于units启动。•除以上的关系

之外,还有Wants=、RequiresOverridable=、Requisite=、RequisiteOverridable=、BindTo=、OnFailure=、PropagateReloadTo=、PropagateReloadFrom=、OnFai

lureIsolate=、IgnoreOnIsolate=和StopWhenUnneeded=等。6.3.3systemd•4)常见systemdunit的功能及作用•常见systemdunit的功能及作用如下表所示。unit说明basic.target一个包含早期启动的targ

etunit。systemd将自动地将它添加到sysV的runlevel1.target~runlevel5.target中的Requires和After依赖关系中。通常,作为基本的初始化需要,也会添加到其他daemon服务的unit配

置文件的Requires和After中ctrl-alt-del.target用于处理Control+Alt+Del信号,通常作为符号链接到reboot.targetdbus.service用于处理D-Bus的unitdefault.targetsystemd的系统启动默认unit。通常通过符号链接

指向某一个启动target,如multi-user.target或graphical.targetdisplay-manager.service显示管理服务。通常作为符号链接指向prefdm.service或其他类似的显示管理服务emergency.target紧急启动策略unit

,对应在控制台(console)上启动应急shell。此多用于启动参数的修改,并以systemd.unit=emergency.target方式添加到内核启动参数中unit说明graphical.target图形界面启动策略,用于启动进入第5级X-windowshalt.target

系统关闭策略unit。当一个应用程序需要关闭系统时启动此策略multi-user.target多用户启动策略(非图形界面,对应runlevel3)poweroff.target系统关闭策略(对应runlevel0.target)reboot.target系统重启策略(对应run

level6.target)rescue.target单用户或系统维护模式启动(runlevel1.target)runlevel0.target关闭系统策略,链接到poweroff.target。对应第0级runleve

l1.target系统维护模式策略,链接到emergency.target。对应第1级runlevel2.target~runlevel5.target对应运行级2~5启动策略shutdown.target服务关闭策略,用于系统关闭时关闭服务。systemd将以Conflicts依赖关

系添加此策略到停止系统的unit中(如运行级0或6)sigpwr.targetUPS电源控制策略,当电源失效时启动此策略sysinit.targetsystemd特殊unit,它覆盖了早期的启动脚本。systemd自动添加W

ants=和After=依赖关系到SysV的0~6级运行策略swap.target交换设备管理策略,用于管理交换区6.3.3systemd•5)配置目录•systemd用到的主要目录如下。•本地配置目录:/etc/syste

md/system。•运行unit目录:/run/systemd/system。•已经安装软件包的unit位置:/lib/systemd/system。尽管红帽的systemd手册页说是在/usr/lib/systemd/system,但由于

/lib是/usr/lib的一个符号链接,故在红帽系统中两者是相同的。6.3.3systemd•2.管理工具(systemctl)•1)功能及用法•systemctl用于控制systemd的系统和服务管理。这里只简单介绍一些选项和主要功能,用于

控制系统的启动和随后介绍的服务管理。systemctl的用法为:•systemctl[options]{COMMAND}[NAME…]•其中,options为选项;COMMAND为子命令;NAME为被操控的对象。•2)选项•systemctl有很多选项,部分常用选项如下表所示。6

.3.3systemd选项功能--help,-h帮助--type=,-t指定类型,如service、target和socket等--all,-a列所有unit--failed只列失败的unit--quiet,-q抑制标准输出--

no-pager不分屏/页显示--no-reload当与enable/disable配合使用时,不重新加载配置文件--force,-f当与enable配合使用时,覆盖已有链接;当与halt、powero

ff、reboot和kexec配合使用时,不关闭所有unit而直接关闭系统--runtime当与enable/disable/is-enabled或其他命令配合使用时,只临时修改配置,而不保存到磁盘,对下次启动无效--full=完整显示unit的信息--root=使用此

指定unit文件搜索路径--kill-who=与kill配合使用时,指定被杀进程。默认为所有--signal=,-s与kill配合使用时,指定信号6.3.3systemd•3.应用示例•1)列所有unit•#systemctllist-units#列出所有unit,并分屏显示•#systemct

l--no-pagerlist-units#列出所有unit,不分屏显示•说明:systemctllist-units功能只能显示systemd-unit,而不能显示SysV服务,而chkcongfig却只能显示SysV服务,而不能显示systemd-unit,不

过两者配合却可以得到全部。•#systemctlsystemctllist-unit-files#列出已经安装的所有unit文件6.3.3systemd•2)关闭系统•#systemctlpoweroff

#使用poweroff.target关闭系统,等价于poweroff或init0•3)重启系统•#systemctlreboot#使用reboot.target重启系统,等价于reboot或init6•4)切换到系统维护模式•#systemctlrescue#切换到系统维护

模式,等价于init16.4服务管理•6.4.1systemctl•6.4.2早期的服务管理•6.4.3超级服务器(xinetd)•6.4.4rc-local.service6.4.1systemctl•系统有很多服务,这里仅以对vsftpd服务管理来

说明使用systemctl管理服务的过程。要管理一个服务,必须要先知道服务的名字。vsftpd服务器的服务名为vsftpd.service。•vsftp服务器软件包为vsftpd,如果系统中还没有安装,则首先安装它,

方法是:•#yum-yinstallvsftpd#红帽系统•#apt-get-yinstallvsftpd#ubuntu系统6.4.1systemctl•1)列出或检查vsftpd.service的状态•#systemctl|grepvsftpd#列

出所有units从中过滤vsftpd服务•#systemctlis-enabledvsftpd.service#检查是否已激活•2)激活vsftpd服务•#systemctlenablevsftpd.service#若成功返回0,否则非0•3)检查vsftpd运行状态(注:此时仍未启

动)•#systemctlstatusvsftpd.service#检查状态6.4.1systemctl•可根据输出判断服务的当前状态。若在输出中有“loaded”、“inactive”和“dead”等内容,说明已被激活,但可能还没运行,也可能会加载失败。•4)立即启动/停止/重启/重载服务•#

systemctlstart/stop/restart/reloadvsftpd.service#成功时返回0,否则为非0•5)禁用vsftpd服务•#systemctldisablevsftpd.service

#成功时返回0,否则为非06.4.2早期的服务管理•1.红帽的早期服务管理•用户还可以直接使用命令chkconfig、service或服务启动脚本在终端上或程序中直接对服务进行简单、快捷的管理。•1)chkconfig•c

hkconfig用来检查和设置系统各种服务的开机自启动,其用法为:6.4.2早期的服务管理•chkconfig[--list][name]•chkconfig[--levellevels]name<on|off|reset>•chkconfig[--levellevel]n

ame•chkconfig--add|--del|--overridename•参数name为服务名;选项--list用于服务列表;--levellevels用于指定运行级别;--add、--del或--overri

de用于添加、删除或覆盖一个已有服务(本书不讨论后三个功能)。6.4.2早期的服务管理•(1)显示系统服务列表,以及这些服务在每个运行级别是否启动。•#chkconfig--list#显示所有服务启动状态•输出结果(的局部)如图6-4所示,前面是独立服务,尾部是基于xinetd的服务。•(2)显示

单个服务的启动状态。•如果用户欲检查某单个服务(如xinetd)的信息可使用以下两种形式:6.4.2早期的服务管理•#chkconfig--listxinetd#显示xinetd的情况•#chkconfig--list|grepxinetd#同上•(3)设置或取消某服务

(如nfs)在指定运行级别的自启动。•chkconfig--level345nfsoff#设置在运行级345中开机不启动nfs服务•chkconfig--level3nfson#设置在运行级3中开机自启动nfs服务6.4.2早期的服务管理•(4

)检查指定服务在指定运行级别的开启状态。•chkconfig--level3nfs#检查nfs服务在第3级是否为开机自启动•chkconfignfs#检查nfs服务在当前级是否为开机自启动•此种方式只能指定一个

级别,若不指定则使用当前级别。检查后并不输出任何信息,而是以返回码告诉使用者:可用echo$?查询返回码,若返回码为0表示为on,否则为off。6.4.2早期的服务管理•2)service•service命令用来改变服务的当前状态,其用法为:•

serviceSCRIPTcmd[options]•service--status-all•service--help|-h|--version•参数SCRIPT为服务名或/etc/init.d/内与服务同名的脚本文件名;cmd一般可取的值有start、stop、restart、stat

us和reload等分别用来启动、停止、重启、服务状态检查和修改配置后重新载入,具体有多少或是什么取决于脚本文件的内容和功能。6.4.2早期的服务管理•3)启动脚本•系统的所有服务启动脚本文件均存放在/e

tc/init.d/或/etc/rc.d/init.d/目录,与服务名相同。比如,httpd服务的启动脚本文件名为httpd,网络服务的启动脚本名为network。若要启动、关闭或重启一个服务,只采用以下形式

就可以了。•#/etc/init.d/SCRIPTcmd[options]#或•#/etc/rd.d/init.d/SCRIPTcmd[options]#此行仅用于红帽系列6.4.2早期的服务管理•4)图形界面•红帽系列系统还提供有服务

图形界面管理工具,它们分别是system-config-services和ntsysv,使用前需要先安装它们。安装方法是:•#yuminstallsystem-config-servicesntsysv•

用户可以在CLI界面下通过命令•#system-config-services•#ntsysv[--level<LEVELS>]•启动它们,然后可根据需要进行操作。6.4.2早期的服务管理•2.ubuntu的早期管理•1)service•ubuntu的service用法与红帽的service相

同。•2)sysv-rc-conf•sysv-rc-conf是ubuntu的sysv服务配置和管理工具,也是对ntsysv的改进,但是默认不被安装,若要使用它,则须事先安装之,方法如下:6.4.2早期的服务管理•#

apt-getinstallsysv-rc-conf•sysv-rc-conf的用法如下:•sysv-rc-conf--list[service]•sysv-rc-conf[--levellevels]service<on|off>•有点类似红

帽的chkconfig,更多示例不再介绍。6.4.2早期的服务管理•3)图形界面•当不带任何参数运行sysv-rc-conf时,可以进入简单的“图形”界面,用户可在此界面下对服务的启动进行管理。•4)启动脚本•可以按照红帽系统办法使用启动脚本进行启动管理

,但要注意脚本文件的命名在不同系统间有差异。比如,网络服务管理脚本在红帽系统下为network,在ubuntu下为networking。6.4.3超级服务器(xinetd)•从原理上讲,服务器进程的工作

就是打开并监听一个端口,并且等待客户连接,如果客户端来访,响应客户请求并为客户提供服务。但是,现在操作系统中,一般都有很多服务,若为每个服务都创建一个进程进行监听,就会浪费系统资源,尤其对于那些不常使用、很少使用,但有可能被使用的小服务,如chargen、daytime、discard、

echo和time等更是如此。于是,引入了“超级服务器”或“委托服务器”的概念。•“超级服务器”可以为多种服务管理连接,当收到连接请求时,它能够确定连接请求受理所需的程序并创建相应的进程来为客户提供服务。•1.软件安装与服务管理•Linux系统的“超级服务器”为xinetd.

service,归属xinetd软件包,使用前需先安装它。安装方法是:•#yuminstallxinetd#红帽系统•#aptinstallxinetd#Ubuntu系统•可通过以下方法管理超级服务器xinetd.service:•#systemctlenable/disa

blexinetd.service#启用/禁用xinetd.service服务•#systemctlstart/stop/restart/reloadxinetd#启动/停止/重启/重载xinetd服务•#systemctlstatusxinetd.service

•#启用/禁用xinetd.service服务6.4.3超级服务器(xinetd)•2.配置文件(xinetd.conf与xinetd.d/*)•xinetd的配置文件为/etc/xinetd.conf和/etc/xinetd.d/*,前者是主配置文件,后者为一

个个由主配置文件包含的被管理服务的子配置文件。主配置文件是配置xinetd服务本身或各子服务的通用部分,而各被管理服务的子配置只是用于配置子服务器自身的。•默认情况下,/etc/xinetd.conf为其所管理的服务提供

默认配置,其中,“#”开头的是注释行,有效内容大致为:•defaults•{•log_type=SYSLOGdaemoninfo•log_on_failure=HOST•log_on_success=PIDHOSTDURATIONEXIT•cps=5010•instances=50•per_

source=10•v6only=no•groups=yes•umask=002•}•includedir/etc/xinetd.d•其中,常用的配置项及意义如下:•(1)defaults{…}:为所有xinetd服务指定默认值。•(2)

instances:指定一个xinetd服务的最大实例数。•(3)log_type:设置log的类型。•(4)log_on_success:定义连接成功时,log记录的内容。•(5)log_on_failu

re:定义连接失败时,log记录的内容。•(6)cps:定义服务率上限,由两个数组成,第一个为每秒处理的服务个数,如果超过此值,则服务会暂时被disabled;第二个数定义下次被重新激活须经过的秒数。•(7)includedir/etc/xinetd.d:定义子服务配置文件所

在目录为/etc/xinetd.d/。6.4.3超级服务器(xinetd)•/etc/xinetd.d/内的每个文件定义了一个子服务,文件名一般与服务名相同,文件内容的格式也相同,大致如下:•service<服务名>•{•<属性><操作符><值>•………•}•其中s

ervice是必需的关键字。子服务的常见属性如下表所示。配置项意义disabled取值范围为yes或no:yes-禁用;no-启用flags定义服务标识,可取值范围为INTERCEPT、NORETRY、NODELY、IPv4、IPv6等socket_typ

e定义socket类型,可取值范围为stream、datagram、raw等protocol定义协议类型。可取值范围为必须在/etc/protocols中定义,常用的有TCP、UDP等wait并发或重复:yes-阻塞(重复)型材;no-并发型user/group定义

服务进程的用户主/组Server/server_args带有完整路径的服务器守护程序名/命令行参数type定义服务类型,可取值范围为RPC、INTERNAL、TCPMUX/TCPMUXPLUS和UNLISTEDonly_from/no_access只能从/不能从那些主机或IP接收请求6.4.

3超级服务器(xinetd)•当一个xinetd服务及相应软件包被安装之后,会在/etc/xinetd.d/内安装其服务器子配置文件,但也有特殊情况,比如,不提供子配置文件,或虽有子配置文件,但不放在/etc/xinetd.d内。•若一个服

务在/etc/xinetd.d/安装有子配置文件,则直接可以使用;若一个服务提供有可供被托管运行的子配置文件,但又不在/etc/xinetd.d/内,则只需要配置文件复制到/etc/xinetd.d/,并让文件名与服务名相同就可以了。•下面为telnet服务配置文件/e

tc/xinetd.d/telnet的内容。•servicetelnet•{•flags=REUSE#表示当中断或重启xinetd时,TCP/IPSocket可重用•socket_type=stream

#表示使用TCP的Socket类型•wait=no#表示该服务提供并发功能•user=root#设置进程的UID•server=/usr/sbin/in.telnetd#设置服务程序•log_on_failure+=USERID#表示当连接失败时,系统还要记录用户

ID•disable=yes#表示不允许xinetd启动本项服务。yes-不启用;no-启用•}6.4.3超级服务器(xinetd)•所有被托管服务的子配置文件内都有一行:•disable=yes/no#no-启用;yes-不启用•用于表示该

服务是否被启用。如果要启用该服务,则需将其中的“yes”改为“no”,然后重启或重载xinetd服务就可以。•对于telnet服务,只需将上述/etc/xinetd.d/telnet代码中的yes改no,然后启动或重启xinetd服务就可以。6.4.4rc-local.service•Linux

系统提供有rc-local.service,用于本地用户自定义服务启动。rc-local.service所在位置为/lib/systemd/system/rc-local.service,其内容在红帽和Ubuntu系统中有所不同,可通过命令•#cat/lib/syst

emd/system/rc-local.service•查看其内容,其中的关键部分是•ExecStart=/etc/rc.d/rc.localstart#红帽系统•ExecStart=/etc/rc.localstart#ubuntu系统6.4.4rc-local.service•

由此可以看出,rc-local.service要用到rc.local文件。•rc.local文件在红帽系统为/etc/rc.d/rc.local,且事先不存在,在ubuntu系统为/etc/rc.local,已经存在。用户若让系统启动时自动启动自己定义服务,只需要将启动脚本添加到rc.lo

cal文件的最后即可。在早期的系统中确实是这样,但在引入systemd之后,除此之外,还要启用rc-local.service,方法是•#systemctlenablerc-local.service#红帽&U

buntu6.4.4rc-local.service•比如,若要让系统启动时删除/tmp/*.tmp文件,则可以编辑rc.local文件,在最后添加如下一行内容:•rm-rf/tmp/*.tmp&2>/dev/null&•说明:命令的后台执行很重要,也就是说命令行最后的“&”很

关键。假如启动的不是一个立即能够结束或永远不会结束的程序,将会导致后面的程序无法继续启动,从而导致系统无法正常启动。6.5进程管理与调度命令•6.5.1可执行文件的setuid、setgid权限和目录的sticky属性•6

.5.2进程管理与调度命令•6.5.3改变进程的家目录(chroot)6.5.1可执行文件的setuid、setgid权限和目录的sticky属性•在UNIX/Linux系统中,用户级别和执行权力是相关的。但是有些工作,如修改/etc/pass

wd和/etc/shadow文件等,对于普通用户也是必需的,因为它要修改自己的密码,但是系统中这些文件对于普通用户是不允许有写操作的,于是出现了让普通用户通过某种机制行使超级用户权限的问题。6.5.1可

执行文件的setuid、setgid权限和目录的sticky属性•1.suid和sgid权限•1)概念•对于可执行文件,有些文件还有另外两个与执行有关的属性。•(1)设置用户ID权限:setuid/suid。•(2)设置组ID权限:setgid/sgid。•当一

个程序具有suid属性时,它执行时的uid(有效uid)将是该程序所有者的uid,记为euid,而执行者原来的uid称为真实uid,记为ruid。此时,程序的执行者具有程序所有者的权限。6.5.1可执行文件的

setuid、setgid权限和目录的sticky属性•当一个程序具有sgid属性时,它执行时的gid(有效gid)将是该程序的gid,记为egid,而执行者原来的gid称为真实gid,记为rgid。此时,程序的执行者具有程序所有者

所在组的权限。•suid/sgid属性只对二进制可执行文件有效,而对可执行的脚本文件无效。6.5.1可执行文件的setuid、setgid权限和目录的sticky属性•当一个属于超级用户的可执行二进制程序具有suid属性时,在一般用户执行它时,也就相当于有了超级用户

的身份和权限。同样,当一个属于超级用户所在组的可执行二进制程序具有sgid属性时,当一般用户执行它时,也就相当于有了该组员的身份和权限。由此可见,suid和sgid权限的存在可能会给某些程序的执行带来方便,因为权限被放大了,但这

也是一种危险,因为过大的权力可能会给系统的安全带来隐患,因此设置这种权限的可执行二进制程序不宜太多。•常用的设置suid的程序有/bin/ping、/usr/bin/passwd、/usr/bin/newgrp、/us

r/sbin/suexec、/usr/bin/sudo和/usr/sbin/traceroute等被公用,但又必须具有较高权限的程序。6.5.1可执行文件的setuid、setgid权限和目录的sticky属性•2)管理•按照文件的权限,若用八进制表示,则它的u、g、o的读、写和执

行权限可分别表示为400、40、4,200、20、2和100、10、1,对应于suid和sgid的权限则为4000和2000。•suid和sgid对应的权限也是用chmod来管理的。设myp1、myp2、

myp3的权限分别为-rwxr-xr-x(755)、-rwxrwxr-x(775)和-rwxrwxrwx(777),则可用以下方法设置suid和sgid的权限。•(1)字符方式。•#chmodu+smyp1#为myp1设置suid。修改后的权限为rwsr-xr-x•

#chmodg+smyp2#为myp2设置sgid。修改后的权限为rwxrwsr-x•#chmodug+smyp3#为myp3同时设置suid和sgid。修改后的权限为rwsrwsrwx•(2)数字方法。•#chmod4755

myp1#为myp1设置suid•#chmod2775myp2#为myp2设置sgid•#chmod6777myp3#为myp3同时设置suid和sgid6.5.1可执行文件的setuid、setgid权限和目录的sticky属性•2.sticky位•1)概念•在4位八进制权限的

最高1位所表示的3位二进制中,已经被suid和sgid占去高2位,还剩下最后1位,它可以用来描述目录或文件的另一个属性。当用于描述目录时,称为限制删除位(restricteddeletionflag),用于描述可执行文件时,称为粘着位(stickybit)。为了描述方便,我们把它统一称为st

icky位或sticky权限。6.5.1可执行文件的setuid、setgid权限和目录的sticky属性•当一个目录具有sticky权限时,它内部的文件只能被它的所有者或超级用户删除、更名或移动。当一个可执行文件具有sticky权限时,

在早期的系统中,程序执行时的正文段映像将被锁在交换区中,可使得程序装入更快速。•设置粘着位的目录有/tmp、/usr/tmp和/var/spool/uucppublic等。6.5.1可执行文件的setuid、setgid权限和目

录的sticky属性•2)管理•sticky位的属性值为1000,可通过chmod命令设置。设有目录mydir和文件myfile的权限为755,则可通过以下方法来设置它的sticky位。•#chmod+tmydirmyfile#字符方式。修改后的权限为1755或rwxr-xr-t•#ch

mod1755mydirmyfile#数字方式•3.查找•用户可以使用find命令查找系统具有suid、sgid和sticky权限的文件,方法如下:•find/-perm/1000-print#仅查找具有sticky的位者•find/-perm/2000-print#仅查找具有sgid

的权限者•find/-perm/4000-print#仅查找具有suid的权限者•find/-perm/6000-print#仅查找具有suid和sgid的权限者•find/-perm/7000-prin

t#查找具有suid、sgid和sticky的权限者6.5.1可执行文件的setuid、setgid权限和目录的sticky属性•4.说明•当对一个在执行位没有权限的文件添加suid、sgid和sticky权限时,相关对应的字符表示不是s和t,

而是S和T。比如,root用户有一个名为x的文件,其他权限为644(rw-r--r--),在执行•#chmod+s,+tx•命令后,其权限为7644,符号表示为rwSr-Sr-T。用户可使用ls-l查看x的权限。6.5.2进程管理与调度命令•1.

按名称向进程发信号或终止进程的执行(killall)•1)功能及用法•kill用于向指定进程或进程组发送指定信号(见表6-9),如果未指定信号,则默认发送TERM(15)。若接收者收到信号,而没有对信号捕获并进行特殊处理,则

它将被终止运行,也就是被杀掉了。6.5.2进程管理与调度命令•killall是另一个用来向指定进程发信号或终止进程的命令,它不像kill使用进程的PID作为操作对象,而是使用进程名。由于在系统中可能有多个同名进程同时运行,

因此使用killall终止进程时可能会有扩大化的问题。其用法为:•killall[-e][-g][-i][-q][-v][-w][-V][-ssig][--]name…•killall-l•killall发送的信号可以是信号名或值。6.5.2进程管理与调度命令•2)参数说明•

killall命令的部分参数如下表所示。参数意义参数意义name进程名。信号接收者-l列出可用信号-i交互式工作,终止进程前需要用户确认-I忽略大小写-g终止指定所属组内的所有进程-uuser指定用户-q安静模式,当不存在指定进程时也不报错-ssig指定信

号(参见-l或表3-38)-e精确匹配进程名(默认15个字符后不再区分)-v报告信号是否发送成功-w等待所有被杀进程结束。若被杀进程忽略发送信号或处于僵尸状态,则会造成killall无限等待6.5.2进程管理与调度命令•3)使用示例•#kil

lall-l#查询可用信号•#killallman#终止所有名为man的进程•#killall-9bash#终止所有名为bash的进程,将造成所有终端用户退出系统6.5.2进程管理与调度命令•2.根据进程名等属性查找进程和发送信号(pgrep/pkill)•1)功能及用

法•pgrep的功能是在系统内部查找满足指定指标的进程,并按格式要求输出搜索到进程的pid等信息。pkill也是要搜索进程,但不是为了显示,而是向它们发送信号。其用法为:•pgrep[options]patte

rn•pkill[options]pattern6.5.2进程管理与调度命令•pgrep和pkill在搜索时要求搜索指标全部满足,比如:•#pgrep-urootsshd•搜索到的将是用户root的sshd,而非其用户的。•#pgrep-uroot,da

emon•搜索到的是用户root和daemon的所有进程。6.5.2进程管理与调度命令•2)参数及说明•pgrep与pkill的常用参数如下表所示。参数意义参数意义pattern指定命令及命令行参数(扩展正则表达式)-signal指定信号(默认信号为SIGTERM)

(仅pkill使用)-a|--list-full列pid与命令行(仅pgrep使用)-l|--list-name列pid与进程名(仅pgrep使用)-c仅显示匹配的进程数量(仅pgrep使用)-ddelim指定输出进程pid的分隔符(默认为换行)-n仅搜索(刚启

动的)最新进程-o与-n相反,仅搜索启动最早的旧进程-x完全匹配进程名(-f时完全匹配命令行)-f搜索整个命令行(默认仅搜索命令名)-gpgrp,…仅在进程组pgrp,„中搜索-Grgid,…仅搜索真实gid在rgid,„中的进程-Pppid,…仅搜索

父进程在ppid,„中的进程-ssid,…仅搜索会话id在sid,„中的进程-ueuid,…仅搜索有效uid在euid,„中的进程-Uruid,…仅搜索真实uid在ruid,„中的进程-tterm,…仅搜索控制终端在term,„中的进程-v反向匹配•3)

示例•#pgrepvsftd#搜索vsftpd进程,并显示其pid•#pgrep-avsftd#搜索vsftpd进程,并显示其pid及命令行参数•#pgrep-urootnamed#搜索root用户的named进程•#pgrep-d,-xhttpd#显示所有httpd进程的信

息,输出分隔符为逗号•#pkill-HUPsyslogd#向syslogd发送信号HUP,让其重新加载配置文件•#pkill-9bash#终止所有名为bash的进程(将造成所有使用bash的终端用户退出)6.5.2进程管理与调度命令•3.确定使用指定文件或文件系统的进程

(fuser)•1)功能和用法•在系统管理和shell编程时经常需要确定使用某个设备或文件系统的进程和用户的情况,fuser可以胜任此工作,其用法为:•fuser[-fuv][-a|-s][-4|-6][-c|-m|-nspace]

[-k[-i][-M][-w][-signal]]name...•fuser-l•fuser-V•2)参数说明•fuser命令的部分参数如下表所示。参数功能说明-k终止所有使用设备或文件系统的进程-i在杀死进程前提示确认,若无-k则忽略此

参数-l列出所使用的信号名-mname指定的是一个安装的文件系统-nnamespace在指定名字空间内搜索,名字空间可是文件、UDP和TCP等-s默默工作,不显示输出信息,但可以使用其返回值-signal指定信号,而非默认的SIGKILL-u显示用户信息-4/-6只搜索

IP4/IP6的sockets信息。默认情况下将同时搜索两者6.5.2进程管理与调度命令•在fuser的默认输出中,进程号的后面可以跟有c、e、f、r、m等字符,意义为:c—当前目录;e—进程正在执行;f—打开文件(默认情况下不输出此标志);r—根目录;m—内存映像文件或共

享库。•3)应用示例•(1)杀死所有使用某设备的进程。•有时需要让使用某设备或文件系统的所有进程终止,例如,要把使用终端/dev/tty5的用户踢出系统,就可采用终止使用该设备所有进程的办法来实现。•#fuser-k/dev/tt

y56.5.2进程管理与调度命令•(2)显示使用本地网络端口的进程。•从网络监控的角度来讲,有时需要了解系统中哪个端口正在被哪些进程或用户使用,有多少个进程在使用。•#fusertelnet/tcpftp/tcp#监视本地telnet和

ftp端口的tcp活动情况•#fuser-u23/tcp21/tcp#监视本地telnet和ftp端口的tcp活动情况,并添加用户•#fuser-ntcp21#监视本地ftp端口的tcp活动情况6.5.2进程管理与调度

命令•4.让进程抗SIGHUP运行(nohup)•在UNIX/Linux环境下进程可在前台运行,也可在后台运行。但不论哪种情况,只要启动进程的用户退出了或终端线路断路了,那么他创建的所有进程都将被终止,这是因为这些进程都将收到HUP信号。按照系统规定,收到HUP信号的进程都将被终止。为了保证用

户退出后所启动的后台进程仍能继续运行,就要求进程对信号HUP具有免疫能力。使用nohup启动的进程对信号HUP就具有免疫力。nohup命令的用法为:•nohupcommand[arguments]6.5.2进程管理与调度命令•后台进程是不能和终端交互的。如果输入没有被重定向,则定向到/dev/nu

ll,如果输出没有被重定向,则它将输出追加到当前目录的nohup.out文件。如果该文件没有写权限,则输出将被重定向到$HOME/nohup.out。如果两者均无写权限,则命令不能被执行。如果有写权限且nohup.out不存在,则将创建。在创建时不对同组和其他人赋予

访问权(权限为600)。若文件已经存在,则不改变原文件的存取权限。程序未重定向的标准错误也将被追加到nohup.out文件。6.5.2进程管理与调度命令•nohup不能直接创建后台进程,创建后台进程应在回车前添加“&”符号。尽管没有输出,但我们仍可以通过其返回值来确定其执行情

况。返回值及意义为:125—nohup自己失败;126—命令找到但不能执行;127—命令找不到;其他—所执行命令的返回值。6.5.2进程管理与调度命令•5.设置进程的优先级(nice)•1)功能与用法•nice的功能是设置进程

的(静态优先数)NICE值,并启动进程,从而改变进程获得调度的机会。对于那些不急迫的任务,可以通过调高它的NICE值来降低其优先级,以保证紧急任务的执行,当然也可以指定一个负的NICE值来提高进程的优先级。nice命令的用法为:•nice[options][cmd[arg…]]6.

5.2进程管理与调度命令•当不带参数或变量运行nice时,将显示默认的NICE值,如果用nice启动某个进程,而没有指定NICE,则将NICE设置为10,从而降低了优先级。如果要设置负的NICE,从而提高进程的优先级,则要求用户必须具有超级用户权限。关于NICE设定可以使用以下形式

:•(1)-n<NICE>:例如:-n5,NICE值为5;-n-5,NICE值为-5•(2)-<NICE>:例如:-5,NICE值为5;--5,NICE值为-5•(3)--adjustment=<NICE>例如:--adjustment=5,NICE值为5•2)使用示例•#设有

程序myp(如cat)可以在前、后台运行•#myp&#以默认优先级运行•#nicemyp&#以默认优先数(10)降低myp的运行级•#nice-15myp&#以15为优先数运行程序myp•#nice-n-15myp&#以-15为优先数运行程序m

yp•#ps-l|grepmyp#查询进程myp的运行级和NICE值•#输出中的S栏为进程状态,PRI栏为优先级,NI为NICE值。6.5.2进程管理与调度命令•6.改变正在运行进程的优先级(renice)•nice的功能是设置将要运行程序的NICE值,renice可以调整一个正在执行进程的NI

CE值,其用法为:•renice[-n]priority[-g|-p|-u]identifier...•选项-n是可选的,priority为新的NICE值,-g、-p、-u分别用于指定进程组、进程和用户(名

或ID)。若指定了进程组或用户,则进程组或用户所有进程的NICE值都被调整。6.5.3改变进程的家目录(chroot)•1)功能、用法及说明•chroot(changeroot)的作用是改变进程的根目录。其用法为:chrootnewroot[

cmd]•参数newroot为chroot改变以后进程使用的新“根目录”,可以使用绝对路径或相对路径。cmd为以newroot为新“根”文件系统内存放的命令,如果不提供cmd,则默认使用环境变量SHELL指定的shell。如果指定了cmd,则cmd不得是一个通过

符号链接指向newroot外部的文件,如果是指向newroot内部的,则应以相对路径方式链接,因为如果此时chroot能够成功,则cmd已经不能再看到newroot以外的整个文件系统了,从而使得符号链接失效,同样cmd

所需要的其他相关文件也必须相对于新的根存在。6.5.3改变进程的家目录(chroot)•若要成功执行chroot,则必须事前有一定的准备。首先,新的根目录newroot必须存在;其次,命令cmd必须事先在newroot目录内的合适位置存在,

且最好是采用静态链接生成的,以备成功改变根目录后以newroot为根目录时能够找到它,并能够独立执行,否则执行时所需要的动态库也必须出现在新根目录内的合适位置。•为了找到cmd所用的共享库,可以使用lddcmd命令查询,然后按照

查询结果创建相应的目录,并将相关的库和命令复制到newroot内对应的目录内。6.5.3改变进程的家目录(chroot)•2)准备•以chrootnewrootcmd为例说明chroot命令的准备和使用过程:•(1)查询newroot目录是否存在,若不

存在则先创建。•(2)查询cmd(如$SHELL)的位置,并记住该位置。•(3)查询cmd所使用共享库,并记住库名和位置。•(4)在newroot下创建命令和共享库所用的每个目录。•(5)将命令、共享库文件和其他必需的文件复制或(硬)链接

到相应位置。6.5.3改变进程的家目录(chroot)•(6)执行命令chrootnewrootcmd。•(7)若成功,则会在cmd结束时退出chroot。对于交互式shell型程序,可输入^D或exit后回车退出。•第(1)~(5

)步是真正的准备过程,而(6)是对准备工作的检验,(7)是chroot的退出或返回。•3)chroot示例•这里仅以在32位Fedora24下,将目录切换到当前目录下的nroot,默认要执行的是环境变量

$SHELL所指定的命令,即chrootnroot$SHELL•为例说明准备过程,大致过程如下。6.5.3改变进程的家目录(chroot)•#chrootnroot#执行chrootnroot,得出以下错误,说明目录不存在•##chroot:cannotchangero

otdirectorytonroot:Nosuchfileordirectory•#mkdir-pnroot#创建目录nroot•#chrootnroot#再次执行chrootnroot,得出以下错误•##chroot:cannotr

uncommand`/bin/bash':Nosuchfileordirectory6.5.3改变进程的家目录(chroot)•##说明/bin/bash不存在。创建目录nroot/bin并复制文件/bin/bash到其中•#mkdir-pnroot

/bin;#创建目录nroot/bin•#cp$SHELLnroot/bin#将/bin/bash复制到/nroot/bin•#chrootnroot#再次执行chrootnroot,仍得出以下错误•##chroot:c

annotruncommand`/bin/bash':Nosuchfileordirectory6.5.3改变进程的家目录(chroot)•##检查/bin/bash的支持库•#ldd$SHELL#检查/bin/bash依赖库文件,得出以下输出•linux

-gate.so.1(0xb77c8000)•libtinfo.so.6=>/lib/libtinfo.so.6(0xb7679000)•libdl.so.2=>/lib/libdl.so.2(0xb7674000)•li

bc.so.6=>/lib/libc.so.6(0xb74a6000)•/lib/ld-linux.so.2(0x8002a000)6.5.3改变进程的家目录(chroot)•##创建目录nroot/lib并将以上依赖文

件复制到其中•#mkdir-pnroot/lib#创建所需目录•#cp/lib/libtinfo.so.6nroot/lib#依次复制相关文件•#cp/lib/libdl.so.2nroot/lib•#cp/lib/libc.so.6nroot/

lib•#cp/lib/ld-linux.so.2nroot/lib6.5.3改变进程的家目录(chroot)•#chrootnroot#执行chrootnroot成功,输出以下提示符•##bash-3.2#到此为止,准备工作完毕,下边执行几个命令以观察效果。•#pwd#执行内部命令pwd,成功

,得到输出为/•#echo$SHELL#执行内部命令echo,成功•#ls#执行外部命令ls,失败,得出以下错误提示•##bash:ls:commandnotfound6.5.3改变进程的家目录(chroot)•因为ls为外部命令,没有为它准备,故在以nroot为根目录

的新位置文件找不到它,因此不能执行。为了让/bin/ls能够执行,还需要继续准备,过程同前。•由上可见,为chroot做准备工作并不太容易,不过就一般的应用来讲,所需文件并不太多。•对其他命令的准备,或在其他系统下对命令的准备与此过程大致相同,只需参照处理就可以。我

们将在第11章的shell编程中给出一个用于chroot准备的通用shell脚本程序。6.6任务的自动调度•6.6.1at和batch•6.6.2crontab•6.6.3系统crontab6.6.1at和batch

•1.功能与用法•at和batch的功能是在某指定时刻调度任务的执行,其用法为:•at[-V][-qqueue][-ffile][-mMlv]<timespec...|-ttime>•at-cjob[job...]•atq[-V][-qqueue]•at[-rd]job[job...]•at

rm[-V]job[job...]•batch•at和batch为作业提交的客户端程序,由at和batch提交的作业由atd调度执行。6.6.1at和batch•2.参数说明•at的部分参数如下表所示。选项功能描述-cjob将指定作业信息显示到标准输出-d|-rjob删除指定作业-l列出队列中的作

业-ffile从文件file中读取作业,而非从标准输入,也可以用输入重定向的办法实现-m作业完成后向用户发送邮件,在作业没有输出和错误时也是这样-qqueue指定作业队列queue。用单字符表示作业队列,可使用的有a~z,A~Z。a:at队列

;b:batch队列-ttime用于指定[[CC]YY]MMDDhhmm[.ss]格式的时间6.6.1at和batch•at从标准输入或-f指定的文件读取任务,也可以用输入重定向的办法实现。•at可以接收的timespec时间格式为HH:MM或HHMM形式的时间,默认日期为当天,

若当天时间已过,则为下一天,时间还可以跟后缀AM和PM,否则将视为24小时制。用户也可设定today、tomorrow、midnight、noon、teatime(4pm)。还可以同时指定命令执行的时间和日期,日期必须跟在时间的后面,其格式可以是:(1)英文月名数字日期[数字

年];(2)MMDDYY;(3)MM/DD/YY;(4)DD.MM.YY。6.6.1at和batch•用户也可以“当前时间+偏移量”的办法来指定执行时间,这里的偏移量可以是分钟、小时、天或周等。例如,now+2minutes,10:22+3days等。

•如果在作业操作中未使用I/O重定向,则at在作业执行过程中产生的标准错误和标准输出将以邮件的形式发送给用户。•atq用于查询-q指定的作业队列,atrm用于删除作业。6.6.1at和batch•batch是一个shell编写的程序,它通过at提交批处理作业。batch不接收命令行参数,但可

通过输入重定向从脚本文件向它提交任务。batch最终执行的命令为:•at-qbnow•由此可见,batch所使用的队列为b(at所使用的队列为a)。如果系统的平均负载不超过atd规定的上限(默认为0.8),bat

ch将立即调度作业执行,否则另择时执行。•超级用户可以无条件使用at,对于一般用户能否使用at要根据文件/etc/at.allow和/etc/at.deny来确定。6.6.1at和batch•/etc/at.allow、/etc/at.deny文件

的结构为每行一个用户列表,其中不允许出现空格。如果/etc/at.allow存在,则其中的用户将被允许使用at。若/etc/at.allow不存在,则检查/etc/at.deny,其中的用户将不允许使用at。空的/etc/at.deny意为每个用户均可使

用at。如果/etc/at.allow和/etc/at.deny均不存在,则只有超级用户能使用at命令。与at相关的文件还有/var/spool/at和/var/spool/at/spool。6.6.1at和batch•3.作业

使用示例•1)作业创建•#at1200<myjob#通过输入改道从myjob中读取作业,并规定在12:00执行•#at12:10-fmyjob#从myjob中读取作业,并规定在12:10执行•#at1230#标准输入读取作业,并在12:30执行6.6.1at和batc

h•at>ls-l>/tmp/`whoami`.a#进入at界面,输入相关命令。“at>”为提示符•at>date>>/tmp/`whoami`.a#继续输入命令•at>Ctrl_D#按Ctrl_D结束作业输入•at><EOF>#at显示此行内容,并覆盖Ct

rl_D所在的行•2)列出已提交的作业#at-l•3)删除已提交的作业#at-d2325•#23,25为at-l输出中的作业编号6.6.2crontab•1.功能与用法•crontab的功能是规划程序周期性地定时启动、定时执行。crontab是一个客户端程序,用于编

辑用户crontab文件。crontab提交的任务由服务器程序crond调度。•at和batch提交的作业是一次性的,而crontab提交的作业是重复性的、永久性的,当crontab被制定好之后,在下一次被修改之前crond将一直按其内容的规定调度程序

的执行。crontab的用法为:•crontab[-uuser]file•crontab[-uuser][-l|-r|-e][-i][-s]6.6.2crontab•crontab受文件/etc/cron.allow和/etc/cron.deny的控制。如果/etc/cron

.allow存在,则只有列在其中的用户才能使用crontab。如果/etc/cron.allow不存在,而/etc/cron.deny存在,则只有不在/etc/cron.deny中的用户才能使用之。若两者

均不存在,则根据系统配置,可能只有超级用户可使用crontab或所有用户均可使用crontab。在Linux中,默认允许所有用户使用crontab。6.6.2crontab•2.参数说明•crontab命令的参数如下表所示。选项功能描述选项功能描

述-e编辑用户的crontab文件-uuser指定用户的crontab文件-l列出用户crontab文件内容file指定crontab文件。默认用户自己-r删除用户crontab文件-i与-r配合使用,删除用户crontab文件进行提示6.6.2crontab•3.c

rontab文件的内容•系统将为每个可以使用此功能的用户,以用户名在/var/spool/cron下创建与用户名相同的crontab文件,如root、test等。•用户的crontab文件是由crontab命令来修改的,当使用-e修改用户的crontab文件时,crontab命令自动调用v

i对文件进行编辑,当从vi中退出时,将修改后的内容回写,任务自动提交(说明:ubuntu允许在首次使用crontab-e时从已经安装的编辑器ed、nano或vi中选择一个编辑器,不妨选择vi)。6.6.2crontab•crontab文件中,#开始的行为注释行、空行无效,其他为有效行

。除了用于变量定义的一些特殊行外,每一个有效行由6个用空格分隔的域组成,格式如下:•minutehourdaymonthday_of_weekcommand•分时月月周日期命令•前面5个是数字,分别是分钟(0-5

9)、时(0-23)、日期(1-31)、月(1-12)和星期几(0-6,0表示星期天),月份和星期几也可以用英文表示。它们可以是以下形式:6.6.2crontab•(1)数字。•(2)由减号连接的两个数字,表示范围,如1-5表示从1到5。•(3)

一组由逗号分隔的数字(枚举),如1,3,5。•(4)*表示所有或任何允许的值。•(5)*/s表示步长,比如,0-23/2表示从0到23每隔2个单位发生一次,即0,2,4,…6.6.2crontab•若在文件中同时指定了两个日期,即日期和星期,则

两者都有效;如果只想指定一个日期,则只需指定其中一个,而另一个用*表示。•第6个域是将要在指定时间执行的命令字符串。命令串中的%(\%除外)将被解释为换行符,%后的内容将作为命令的标准输入。•在crontab文件中也可定义供crond使用的环境变量。一些变量是由crond自动设置

的,如SHELL、HMOE和LOGNAME等。它们中的一些是可以被重新定义的,但LOGNAME不能。用户也可定义或修改变量,比如,MAILTO变量定义在crond执行时发送给邮件的用户。定义方法与shell编程

相同,比如:MAILTO=gjshao6.6.2crontab•4.crontab示例•1)crontab文件示例•##定义环境变量SHELL•SHELL=/bin/sh•##定义邮件接收者•MAILTO=gjshao•##每天的00:05执行$HOME/bin/daily.job(假设的任务和

程序)6.6.2crontab•50***$HOME/bin/daily.job>>/tmp/out2>&1•##每周日3:30重启系统•303**0/sbin/init6•##从周一~周五每天22:00向gjshao发邮件•022**1-5mail-s"It's

10pm"gjshao%Hi,%%Whereareyour?%•##在偶数点的半点向系统中的用户广播信息•300-23/2***wall"run30minutesaftermidnight,evry2hours,eve

ryday"6.6.2crontab•2)编辑自己的crontab文件•#crontab-e•##进入编辑界面,输入以下内容##每周五3:30重启系统•303**5/sbin/init6•##每周日的0:30清除/tmp/gjshao*文件•3

00**0rm-f/tmp/gjshao*&>/dev/null•3)查看crontab文件的内容•#crontab-l6.6.3系统crontab•使用crontab-e编辑提交的crontab任务是用户级的,存储在/var/spool/cron/[

crontabs/]user内。相对应的,还有系统级的crontab,可存储在/etc/crontab和/etc/cron.d/*中。/etc/cron.d/内是一个个文件可以用来按用户、属性或用途分类存储任务。

系统级crontab文件结构如下:•minutehourdaymonthday_of_weekusernamecommand•分时日月周日期用户名命令6.6.3系统crontab•比用户级的crontab文件多了一个username项以区别任务所有者。•系统级的crontab文件只有r

oot才能编辑修改。若要向系统级的crontab文件中添加任务,只需要按照格式要求输入正确的内容并保存就可以了,不需要重启cron服务。6.7进程管理图形界面•用户可通过Applications→Utilities→SystemMonitor或在CLI下

执行gnome-system-monitor命令打开资源管理器,选择进程资源状态图后右击所需进程,在弹出的菜单中选择功能对进程进行操作。可进行的操作有Stop(暂停)、Continue(继续)、End(结束)

、Kill(终止)、ChangePriority(改变优先级)、MemoryMaps(查看内存映像)、OpenFiles(查看进程打开的文件)和Properties(查看进程属性)。习题6•1.思考题•(1)UNIX/Linux系统有几类进程?

试说明后台进程的作用或执行过程。•(2)试述0#和1#进程的作用及UNIX/Linux进程树的形成过程。•(3)试述UNIX/Linux系统的运行级和init、telinit、systemctl的作用

。•(4)Linux系统中,进程常见状态标志有哪些?各是什么意义?•(5)系统启动管理软件包的发展经历了哪几个阶段?在不同阶段的包名是什么?•(6)登录shell是如何启动的?如何定制用户自己的shell启动?•2.单项选择题

•(1)在Linux系统中用于进程状态查询的常用命令是()和()。•A.psB.killC.killallD.pstree•(2)若使pid进程无条件终止,使用的命令是()。•A.kill-9B.kill-15C.killall-

1D.kill-3•(3)当一个进程正在执行时用户按下了Ctrl_C键,该进程接收到的信号是()。•A.KILLB.2C.1D.TERM•(4)设置用户作业被定义在文件/tmp/myj内,要求该作业在3小时以后执行,正确的命令是()和()。•A.atnow+3h

ours</tmp/myjB.atnow+3hours/tmp/myjC.at3:00hours</tmp/myjD.atnow+3hours-f/tmp/myj•(5)在Linux系统中,让命令myp以

优先数10运行的命令为()和()。•A.nice-10mypB.nice-n10myp•C.nice10mypD.nice+n10myp•3.综合题•(1)试述kill与killall的相同与不同点。•(2)试述fuser的功能与作用,如何终止在终端tty2运行的所有进程?如何监视

网络服务端口的活动情况?•(3)简述UNIX/Linux的作业和任务调度功能,如何让作业myjob在两小时后执行?如何让系统在每周一1:00重新启动?•(4)试描述suid、sgid和sticky机制,回答如何避免它们带来的安全隐患?分别查找系统中具有suid、sgid和sticky属性的

文件。实验6•1.进程状态查询与终止指定进程。•2.同时在多个终端登录后,终止所有的同名进程bash,并观察系统的反映。•3.通过作业和任务管理让系统在今后某个时刻关机或重新启动。•4.使用rc.local文件,让系统启动时,将启动的大致时间记录到/tmp/time.start。

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?