Lin操作基础系统 1_第1页
Lin操作基础系统 1_第2页
Lin操作基础系统 1_第3页
Lin操作基础系统 1_第4页
Lin操作基础系统 1_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章进程、任务与作业管理《Linux操作系统(第5版)》学习目标理解shell的启动与定制;系统的启动过程;掌握自制服务的管理方法;了解程序、任务和进程的概念;传统服务管理方法;掌握进程管理与调度命令;任务的自动调度。能够综合运用所掌握的技术,对系统中的服务进行定制改良,优化系统,培养学生开拓进取的能力。章节概述本章聚焦Linux系统的进程、任务与作业管理。首先介绍程序、进程、作业与任务的概念,区分前台、后台及批处理进程,阐述进程调度策略与优先级(NICE值)。详细讲解进程状态查询、进程树、信号通信与进程控制。登录shell的启动过程与定制。系统启动管理以systemd为核心,介绍unit类型、模板unit实例化及本地服务管理。此外,涵盖可执行文件的suid/sgid/sticky特殊权限,以及进程优先级调整和chroot改变进程根目录。最后介绍任务自动调度工具at/batch和crontab,实现系统自动化运维。目录0102

程序和进程的概念登录shell的启动与定制03Linux系统的启动过程分析0405

本地服务与超级服务管理进程管理与调度命令06任务的自动调度程序和进程的概念6.1程序是一个存储在介质上,既具有可执行属性,又具有执行内容的文件。进程是一个程序的动态执行过程。程序的执行要完成某种特定的功能,过程表现为对某个或某些数据的加工和处理。进程突出了一个程序动态的执行过程,而一个程序是存储在介质上的文件和数据,是一种静态信息。6.1.1程序、进程、作业和任务1.继承的概念1.什么是异常程序与进程

1.什么是异常作业或任务

作业或任务是用户需要计算机完成某项任务时要求计算机所做工作的集合。一个作业可能需要几个程序协作完成。用户向计算机提交了一个在指定时间执行或重复执行的工作,可以认为向计算机提交了作业或任务。前台进程是指用户直接控制的用于完成某个任务的进程,也叫终端交互式进程。从标准输入读数据,向标准输出写数据,将错误信息输出到标准错误,可以是用户直接交互控制的完成某种功能的程序,如文字加工与处理、游戏、浏览器和不同行业的各种应用程序等。6.1.2三类进程1.继承的概念前台进程1.什么是异常后台进程后台进程是指在系统后台运行的进程。在一个系统中可能运行着很多一般用户不知道也不关心的进程,如系统本身用于管理和控制的进程、各种服务器进程等。前台进程也可放在后台运行,但这时要用到I/O重定向。批处理进程是用户按照某种意图将一批作业或任务通过编程的方法提交给系统,让系统在某个合适的时间来调度和执行的进程。批处理进程是通过shell编程等方法,将所要处理的工作规划好后,由系统启动并依次执行的进程。6.1.2三类进程1.继承的概念1.什么是异常批处理进程在UNIX/Linux系统中,每个进程在执行时的优先级是动态变化的,只有优先级最高的进程才能得到运行。当一个进程占有处理机开始执行时,它的优先级会随着执行时间的增加而逐渐降低,以至于失去处理机。优先级计算过程中有一静态参数参与计算,即传统UNIX的NiceLevel优先级,记为NICE。沿用UNIX的传统,NICE的值越大,进程的优先级越低,得到执行的机会就越少。6.1.3调度策略与优先级的计算1.继承的概念1.什么是异常优先级计算Linux系统的启动是在其引导程序(引导块或逻辑引导扇区)被装入后在该引导程序的控制下进行的。首先初始化系统内部数据结构,如构造空闲缓冲区、区表结构、页表项等,然后将根文件系统安装到根“/”下,并创建系统的0#进程、设置它的运行环境,至此系统的内核已经启动完成,但此时系统还不能做太多工作。系统继续引导,创建1#进程,然后由1#进程做进一步初始化工作,直到启动完毕,各种服务开始运行,终端用户可以登录。6.1.4Linux操作系统的启动1.继承的概念1.什么是异常Linux系统启动过程0号进程与1号进程是UNIX/Linux系统中两个最重要的进程。现代Linux系统中,0号进程创建出1号和2号进程后变成空闲进程,当系统中没有其他进程就绪时它才运行,而其原来的功能被分散在多个内核进程中。2号进程名为kthreadd,始终运行在核心态,负责所有内核线程的创建与管理。1号进程(init或systemd)是系统启动时创建的创建进程的进程。它的主要作用是根据启动配置文件的内容初始化系统、创建系统运行所需的其它进程。6.1.50号进程与1号进程1.继承的概念1.什么是异常0号进程与1号进程1.功能及用法功能:显示进程的状态和信息,给出系统当前正在运行进程信息的快照。ps支持多种UNIX系统格式的个性化显示方式,用法:ps[options]2.参数说明6.1.6进程状态及查询(ps)1.继承的概念1.什么是异常ps3.示例#ps-el #长格式显示所有进程的信息6.1.6进程状态及查询(ps)#ps-Af|more #带命令行参数显示系统中的所有进程信息,并分屏显示6.1.6进程状态及查询(ps)6.1.6进程状态及查询(ps)状

态说

明状

态说

明RRunning/Runable,进程在执行中或在就绪队列排队ZZombie/Defunct,僵尸状态。进程已经终止,但父进程没有对它的结束做适当处理DDelaying,非中断性睡眠,通常是因为等待I/OLLocked,页面被锁进内存(用于实时控制或用户控制的I/O)SSleep,正在睡眠,等待事件发生<高优先级进程T被作业控制信号停止N低优先级进程t被调试跟踪而停止+后台进程组中进程I空闲内核线程l多线程进程s会话头进程W被换出(kernel2.6后不再使用)4.进程的状态登录shell的启动与定制6.26.2.1用户登录过程与登录shell的启动登录过程与控制文件用户登录过程中,在输入用户名和密码后,系统要检查文件/etc/shadow、/etc/passwd和/etc/group等。如果用户名和密码合法,则在为用户设置工作环境后,启动并进入交互shell,否则要求用户重新输入用户名和密码。6.2.1用户登录过程与登录shell的启动登录shell的启动(1)执行系统profile文件/etc/profile,并在它的控制下执行/etc/profile.d/目录下的*.sh脚本文件。(2)执行用户profile文件。在用户目录内依次搜索并执行~/.bash_profile,~/.bash_login或~/.profile,如果存在,则执行首个找到者。(3)如果/etc/bash.bashrc和~/.bashrc存在则执行之。(4)如果/etc/bashrc文件存在则执行之。6.2.2用户登录控制与shell的定制概述根据用户登录和shell的启动过程可以看出,用户可在shell的启动控制文件(~/.bash_profile、~/.profile、/etc/bashrc或~/.bashrc)中加入自己的内容,以影响用户shell的启动过程,比如设置或添加自己所需的环境变量等。如果要在这些文件中加入用户自己的内容,一般放在文件的最后。需要一定的shell编程知识。6.2.2用户登录控制与shell的定制修改用户登录控制文件用户的登录控制文件为~/.bash_profile或~/.profile、~/.bashrc,可以修改其中之一来影响登录shell的启动。一般修改的是~/.bash_profile(红帽)或~/.profile(Ubuntu),至于怎样修改,添加或去除什么内容,要根据实际需要。示例:在/.bash_profile或~/.profile文件的最后添加如下行:exportMYNAME=`whoami`为用户定义一个环境变量MYNAME,其值为用户名。6.2.2用户登录控制与shell的定制修改用户的登录shellshell有多种,已经安装的shell均记录在/etc/shells文件中,用户可以从中选择适合自己需要的。用户也可以安装新的shell。示例:useradd-s/bin/tcshtest #创建test用户,并指定登录shell为tcshusermod-s/bin/kshuser1 #修改user1用户,使其登录shell为ksh6.2.3shell的其它方式启动作为交互式的非登录shell启动用户可以从命令行直接输入bash,然后回车而直接启动bash启动之后,就处于与用户的交互过程中,直到用户输入^D或exit返回。非交互式的启动非交互式的启动是指直接使用bash解释bshell脚本的执行。bash会搜索环境变量BASH_ENV所定义的文件名,若找到则读取并执行它。在本书介绍的系统中都没有定义BASH_ENV这个环境变量。Linux系统的启动过程分析6.36.3.1SysVinit的历史遗迹inittab文件/etc/inittab是早期系统初始化控制表。该文件现在已经不再使用,在红帽系统中其内容全为注释,简单描述了一下init运行级与systemd运行级的对应关系6.3.1SysVinit的历史遗迹/etc/init.d与初始化控制目录目录/etc/init.d为系统初始化脚本的汇总目录。在红帽系统下只剩下README等很少的文件,而在ubuntu系统下,内容仍然不减且各文件的功能如前,仍是某个功能的初始化或启动脚本。目录/etc/rcN.d(0≦N≦6)分别为第0~第6级系统初始化的脚本目录,它们中的每个脚本文件都是init.d内某个脚本文件的符号链接,用于对某个服务或管理程序的启动或关闭。比如rc5.d内容为系统切换到第5级的初始化脚本。在红帽系统下,它们内部已经没有了内容,或干脆没有了/etc/rcN.d(0≦N≦6);而在ubuntu下它们的功能和内容仍然如前,但管理者也不需直接使用它们了。6.3.1SysVinit的历史遗迹/etc/init.d与初始化控制目录rcN.d(0≦N≦6)目录内文件排列是按照该级别初始化顺序排列的。系统启动时,对应级别启动目录内的启动脚本是按脚本文件名排列顺序由低到高依次执行的,因此rcN.d内文件命名的排列顺序是相当重要的,否则可能破坏程序或服务的启动顺序,进而破坏进程间的相互依赖关系。6.3.1SysVinit的历史遗迹本地用户进程启动脚本文件rc.local/etc/rc.local(Ubuntu)或/etc/rc.d/rc.local(红帽和OpenEuler),用于本地用户进程的启动。系统会在启动期间自动检查rc.local是否存在且有执行权限,若是则执行它。若用户需要在系统启动时启动某个自己的程序,则可以将启动命令放在该脚本中。6.3.2systemd概述systemd是本书所用系统的启动管理和服务管理工具。在引入systemd的系统中,init命令被替换成systemd,telinit命令被替换成systemctl。当系统启动时,systemd作为1#进程运行,它的作用是初始化系统,并管理系统和用户空间的各种服务。systemd提供一个被称为“unit(单元)”的实体依赖关系系统。系统初始化需要做的事情非常多,systemd将启动过程中的每一步都抽象为一个配置单元。比如,一个服务是一个配置单元,一个挂载点是一个配置单元,一个交换分区的配置是一个配置单元等,但也有一些unit是系统通过其他配置或系统状态自动创建的。6.3.2systemd常用unit类型一个unit可以是关于service、socket、device、mountpoint、automountpoint、swapfile、partition、start-uptarget、filesystempath或timer等的控制单元。用户常用的unit类型有:(1)serviceunit:服务unit,用于服务控制,形如*.service,如crond.service、vsftpd.service。(2)socketunit:IPC或网络通信unit,形如*.socket,如cups.socket、telnet.socket。(3)targetunit:组合units,用于提供系统在启动过程中的同步,形如*.target,如default.target、poweroff.target。6.3.2systemdunits间的关系(1)正需求关系(Requires=units、Wants=units):若本unit活跃,则它所需求的units也必须活跃,如果units中的一个变得不活跃(deactivated)或失败,则本unit也将变为不活跃状态。(2)负需求(Conflects=units):本unit与units不能共存。若本unit启动,则指定的units必须停止,反之亦然。(3)顺序依赖关系(After=units)要求两者都要启动,且本unit先于units;同样地,顺序依赖关系(Before=units)要求两者都要启动,且本unit后于units。6.3.2systemd服务unit示例vsftpd.service位于/usr/lib/systemd/system/,用户可以通过命令cat/usr/lib/systemd/system/vsftpd.service或systemctlcatvsftpd.service查看其内容。6.3.2systemd模板unit及其实例化在服务unit文件中,有一类名字格式为"unitName@.service"的unit,比如sshd@.service、user@.service、vncserver@.service等,模板文件或模板unit,是定义一系列同类型单元的基础。模板unit需要实被例化才能实施其功能。实例化unit是通过在完整的unit模板文件的类型扩展名与"@"之间插入“实例名称”形成的,格式为“unitName@实例名.service”。比如,模板unitvncserver@.service的实例化示例,vncserver@:N.service(:N为实例名,当N取不同值时,对应不同的实例)。模板unit实例化可采用“unitName-STRING@实例名.service”形式(STRING是具有某种特殊意义的变量,比如用户名等)。概括地说,实例化unit命名可使用形式“unitName-STRING@实例名.service”本地服务与超级服务管理6.46.4.1本地服务rc-local.servicerc-local.serviceLinux系统提供有rc-local.service,用于本地用户自定义服务启动。rc-local.service的文件全名为/usr/lib/systemd/system/rc-local.service,其内容在红帽和Ubuntu中有所不同。可通过命令#cat/lib/systemd/system/rc-local.service #或systemctlcatrc-local.service查看其内容6.4.1本地服务rc-local.servicerc-local.service#Thisunitgetspulledautomaticallyintomulti-user.targetby#systemd-rc-local-generatorif/etc/[rc.d/]rc.localisexecutable.

#Ubuntu无[rc.d]/ExecStart=/etc/rc.d/rc.localstart#红帽和OpenEulerExecStart=/etc/rc.localstart#Ubuntu6.4.1本地服务rc-local.servicerc-local.service用户若让在系统启动时自动启动自定义服务或程序时,只需要将启动命令添加到rc.local脚本文件的最后即可。若是rc.local不存在,则通过文本编辑器创建一个,并为其添加执行权。rc-local.service在系统启动期间会自动检查rc.local是否存在且有执行权,若是则执行它。比如,若要让系统在启动时将启动时间追加到/tmp/sysstart.time文件中,则可以编辑rc.local文件,在其最后添加如下一行:/usr/bin/date>>/tmp/sysstart.time&6.4.2自定义的本地服务在manrc-local.service中,强烈建议尽量不要使用rc-local机制启动本地服务,而是要使用自定义的服务。现在,参照vsftpd.service与rc-local.service的格式和内容,创建一个用于本地服务启动的服务unit文件/usr/lib/systemd/system/myservice.service,使其使用脚本文件/etc/myservice6.4.3超级服务器超级服务器从原理上讲,服务器进程的工作就是打开并监听一个端口,等待客户连接,若客户来访,就响应客户请求并为之提供服务。但是,在现在操作系统中,一般有很多服务,若为每个服务都创建一个进程进行监听,就会浪费系统资源,尤其对于那些不常使用、很少使用,但有可能被使用的小服务,如discard、chargen、daytime、discard、echo和time等。于是,系统引入了“超级服务器”或“委托服务器”的概念。“超级服务器”可以为多种服务管理连接,当收到连接请求时,它能够确定连接请求受理所需的程序并创建相应的进程来为客户提供服务。超级服务器有xinetd和inetd等版本,目前Ubuntu还同时支持,但从红帽自RHEL9之后,这两个版本在红帽系列系统中已找不到,有弃用的可能。由于这种服务控制方式较小众或将被淘汰,因此不再做进一步介绍。进程管理与调度命令6.56.5.1可执行文件或目录的setuid、setgid和sticky属性suid和sgid权限对于可执行文件,有些还有另外两个与执行有关的属性:(1)设置用户ID权限:setuid或suid。(2)设置组ID权限:setgid或sgid。当一个程序具有suid属性时,它执行时的uid(有效uid)将是该程序所有者的uid,记为euid,而执行者的uid称为真实uid,记为ruid。此时,程序的执行者具有程序所有者的权限。6.5.1可执行文件或目录的setuid、setgid和sticky属性suid和sgid权限当一个程序具有sgid属性时,它执行时的gid(有效gid)将是该程序的gid,记为egid,而执行者的gid称为真实gid,记为rgid。此时,程序的执行者具有程序所有者同组人的权限。suid和sgid属性只对二进制可执行文件有效,而对可执行的脚本文件无效。常用的具有suid属性的程序有/usr/bin/passwd、/usr/bin/newgrp、/usr/bin/su和/usr/bin/sudo等被公用,但又必须具有较高权限的程序。6.5.1可执行文件或目录的setuid、setgid和sticky属性suid和sgid权限根据stat或umask命令的输出可以看出,表示文件权限的是4位八进制数,截止到现在,这个八进制数的最高位还没有用到。按照文件的权限,若用八进制表示时,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的权限。6.5.1可执行文件或目录的setuid、setgid和sticky属性suid和sgid权限(1)字符方式#chmodu+smyp1 #为myp1设置suid。修改后的权限为rwsr-xr-x,4755#chmodg+smyp2 #为myp2设置sgid。修改后的权限为rwxrwsr-x,2775#chmodug+smyp3 #为myp3同时设置suid和sgid。修改后的权限为rwsrwsrwx,6777(2)数字方法#chmod4755myp1 #为myp1设置suid#chmod2775myp2 #为myp2设置sgid#chmod6777myp3 #为myp3同时设置suid和sgid6.5.1可执行文件或目录的setuid、setgid和sticky属性sticky属性在4位八进制权限的最高1位所表示的3位二进制中,已经被suid和sgid占去高2位,还剩下最后1位,这1位可以用来描述目录或文件的sticky属性。当用于描述目录时,称为限制删除位(restricteddeletionflag);用于描述可执行文件时,称为粘着位(stickybit)。当一个目录具有sticky权限时,它内部的文件只能被它的所有者或超级用户删除、更名或移动。当一个可执行文件具有sticky权限时,在早期的系统中,程序执行时的正文段映像将被锁在交换区中,可使得程序装入更快速。设置sticky位的目录有/tmp、/var/tmp和/usr/tmp等。6.5.1可执行文件或目录的setuid、setgid和sticky属性sticky属性sticky位的属性值为1000,可通过chmod命令设置。示例:设有目录mydir和文件myfile的权限为755,则可通过以下方法来设置它的sticky位。#chmod+tmydirmyfile #字符方式。修改后的权限为1755或rwxr-xr-t#chmod1755mydirmyfile #数字方式6.5.1可执行文件或目录的setuid、setgid和sticky属性具有setuid、setgid和sticky属性文的查找用户可使用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-print #查找具有suid、sgid和sticky权限者6.5.1可执行文件或目录的setuid、setgid和sticky属性具有setuid、setgid和sticky属性文的查找6.5.2进程管理与调度按名称向进程发信号或终止进程的执行(killall)killall是另一个用来向指定进程发信号或终止进程的命令,它不像kill那样使用进程的PID作为操作对象,而是使用进程名。由于在系统中可能有多个同名进程同时运行,因此使用killall终止进程时可能会有扩大化的问题。其用法为:killall[-e][options][-ssig][--]name…killall-lkillall发送的信号可以是信号名或值。6.5.2进程管理与调度按名称向进程发信号或终止进程的执行(killall)killall是另一个用来向指定进程发信号或终止进程的命令,它不像kill那样使用进程的PID作为操作对象,而是使用进程名。由于在系统中可能有多个同名进程同时运行,因此使用killall终止进程时可能会有扩大化的问题。其用法为:killall[-e][options][-ssig][--]name…killall-lkillall发送的信号可以是信号名或值。6.5.2进程管理与调度按名称向进程发信号或终止进程的执行(killall)6.5.2进程管理与调度按名称向进程发信号或终止进程的执行(killall)示例#killall-l #查询可用信号#killallman #终止所有名为man的进程#killall-9bash #终止所有名为bash的进程,将造成所有终端用户退出系统6.5.2进程管理与调度根据进程名等属性查找进程和发送信号(pgrep/pkill)pgrep的功能是在系统内部查找满足指定指标的进程,并按格式要求输出搜索到进程的pid等信息。pkill也是要搜索进程,但不是为了显示,而是向它们发送信号。它们的用法为:pgrep[options]patternpkill[options]patternpgrep和pkill在搜索时要求搜索指标全部满足,比如:#pgrep-urootsshd搜索到的将是用户root的sshd,而非其用户的。#pgrep-uroot,daemon6.5.2进程管理与调度根据进程名等属性查找进程和发送信号(pgrep/pkill)6.5.2进程管理与调度根据进程名等属性查找进程和发送信号(pgrep/pkill)示例#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进程管理与调度确定使用指定文件或文件系统的进程(fuser)在系统管理和shell编程时,经常需要确定使用某个设备或文件系统的进程和用户的情况,fuser可以胜任此工作,用法:fuser[-fuv][-a|-s][-4|-6][-c|-m|-nspace][-k[-i][-M][-w][-signal]]name...fuser-l6.5.2进程管理与调度确定使用指定文件或文件系统的进程(fuser)6.5.2进程管理与调度确定使用指定文件或文件系统的进程(fuser)(1)杀死所有使用某设备的进程有时需要让使用某设备或文件系统的所有进程终止。要把使用终端/dev/tty5的用户踢出系统,采用终止使用该设备所有进程的办法来实现。#fuser-k/dev/tty5(2)显示使用本地网络端口的进程从网络监控的角度来讲,有时需要了解系统中哪个端口正在被哪些进程或用户使用,有多少个进程在使用。#fusertelnet/tcpftp/tcp #显示本地telnet和ftp端口的tcp活动情况#fuser-u23/tcp21/tcp #显示本地telnet和ftp端口的tcp活动情况,并添加用户名#fuser-ntcp21 #显示本地ftp端口的tcp活动情况6.5.2进程管理与调度设置进程的优先级(nice)nice的功能是设置进程的(静态优先数)NICE值,并启动进程,从而改变进程获得调度的机会。对于那些不急迫的任务,可以通过调高它的NICE值来降低其优先级,以保证紧迫任务的执行,当然也可以指定一个负的NICE值来提高进程的优先级。nice的用法为:nice[options][cmd[arg…]]6.5.2进程管理与调度设置进程的优先级(nice)当不带参数或变量运行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值为56.5.2进程管理与调度设置进程的优先级(nice)示例:#设有程序myp(如cat)可以在前、后台运行#myp& #以默认优先级运行#nicemyp& #以默认优先数(10)降低myp的运行级#nice-15myp& #以15为优先数运行程序myp#nice-n-15myp& #以-15为优先数运行程序myp#ps-l|grepmyp #查询进程myp的运行级和NICE值#输出中的S栏为进程状态,PRI栏为优先级,NI为NICE值。6.5.2进程管理与调度改变正在运行进程的优先级(renice)nice的功能是设置将要运行程序的NICE值,而renice的功能是调整一个正在执行进程的NICE值,其用法为:renice[-n]priority[-g|-p|-u]identifier...选项-n是可选的,priority为新的NICE值,-g、-p、-u分别用于指定进程组、进程和用户(名或ID)。若指定了进程组或用户,则进程组或用户所有进程的NICE值都被调整。6.5.3改变进程的家目录(chroot)功能、用法及说明chroot(changeroot)的作用是改变进程的根目录,其用法为:chroot[options]newroot[cmd[args]]chroot的可用选项有:--groups=G_LIST指定附加组;--userspec=USER:GROUP指定用户和组;--skip-chdir限制chroot不能改变到系统根目录/。6.5.3改变进程的家目录(chroot)功能、用法及说明参数newroot为chroot改变以后进程使用的新“根目录”,可以使用绝对路径或相对路径。cmd为以newroot为新“根”文件系统内存放的命令,如果不提供cmd,则默认使用环境变量SHELL指定的shell。如果指定了cmd,则cmd不得是一个通过符号链接指向newroot外部的文件,如果是指向newroot内部的,则应以相对路径方式链接,因为如果此时chroot能够成功,则cmd已经不能再看到newroot以外的整个文件系统了,从而使得符号链接失效,同样cmd所需要的其他相关文件也必须相对于新的根存在。6.5.3改变进程的家目录(chroot)功能、用法及说明若要成功执行chroot,就必须事前有一定的准备。首先,新的根目录newroot必须存在;其次,命令cmd必须事先在newroot目录内的合适位置存在,且最好是采用静态链接生成的,以备成功改变根目录后以newroot为根目录时能够找到它,并能够独立执行,否则执行时所需要的动态库也必须出现在新根目录内的合适位置。6.5.3改变进程的家目录(chroot)准备过程(1)查询newroot目录是否存在,若不存在则先创建之。(2)查询cmd(如$SHELL)的位置,并记住该位置。(3)查询cmd所使用共享库,并记住库名和位置。(4)在newroot下创建cmd和共享库所用的每个目录。(5)将cmd、共享库文件和其他必需的文件复制或(硬)链接到相应位置。(6)执行chrootnewrootcmd。(7)若成功,在cmd结束时退出chroot。对于交互式shell型程序,可输入^D或执行exit退出。第(1)~(5)步是真正的准备过程,而(6)是对准备工作的检验,(7)是chroot的退出或返回。6.5.3改变进程的家目录(chroot)chroot示例在64位CentOSStream10下,将目录切换到当前目录下的nroot,默认要执行的是环境变量$SHELL所指定的命令,即chrootnroot$SHELL#chrootnroot$SHELL #执行chrootnroot,得出以下错误,说明目录不存在##chroot:cannotchangerootdirectorytonroot:Nosuchfileordirectory6.5.3改变进程的家目录(chroot)chroot示例##说明/bin/bash不存在。创建目录nroot/bin并复制文件/bin/bash到其中#mkdir-pnroot/bin #创建目录nroot/bin#cp$SHELLnroot/bin #将/bin/bash复制到/nroot/bin#chrootnroot$SHELL #再次执行chrootnroot,仍得出以下错误##chroot:cannotruncommand`/bin/bash':Nosuchfileordirectory##nroot/bin/bash确实已经存在,但仍说不存在,主要是因为bash所需的动态库不存在##检查/bin/bash的支持库6.5.3改变进程的家目录(chroot)chroot示例#ldd$SHELL #检查/bin/bash依赖库文件,得出以下输出 linux-vdso.so.1(0x00007f6b468eb000) libtinfo.so.6=>/lib64/libtinfo.so.6(0x00007f6b4674f000) libc.so.6=>/lib64/libc.so.6(0x00007f6b46578000) /lib64/ld-linux-x86-64.so.2(0x00007f6b468ed000)##以上的输出是bash所需的库文件应该将它们准备到位##创建目录nroot/lib64并将以上依赖文件复制到其中6.5.3改变进程的家目录(chroot)chroot示例#mkdir-pnroot/lib64 #创建所需目录#cp/lib64/libtinfo.so.6nroot/lib64 #依次复制相关文件#cp/lib64/libc.so.6nroot/lib64#cp/lib64/ld-linux-x86-64.so.2nroot/lib64到此为止,准备工作完毕,下边执行几个命令以观察效果6.5.3改变进程的家目录(chroot)chroot示例到此为止,准备工作完毕,下边执行几个命令以观察效果。#chrootnroot$SHELL #执行chrootnroot成功,输出以下提示符bash-5.2# #chroot成功后的提示符bash-5.2#pwd #执行内部命令pwd,成功,得到输出为/bash-5.2#echo$SHELL #执行内部命令echo,成功。输出为/bin/bashbash-5.2#ls #执行外部命令ls,失败,得出以下错误提示bash:ls:commandnotfound #bash:ls:命令找不到

任务的自动调度6.66.6.1at和batch功能与用法at和batch的功能是在某指定时刻调度任务的执行,其用法为:at[-V][-qqueue][-ffile][-mMlv]<timespec...|-ttime>at-cjob[...]atq[-V][-qqueue][job...]at[-rd]job[...]atrm[-V]job[...]batchat-bat和batch为作业提交的客户端程序,由at和batch提交的作业由atd调度执行。6.6.1at和batch参数说明6.6.1at和batch作业使用示例1)作业创建#at1200 #交互方式。从标准输入读取作业,并在12:00执行 at>ls-l>/tmp/`whoami`.a #“at>”为提示符,在其后输入相关命令 at>date>>/tmp/`whoami`.a #继续输入命令 at>Ctrl_D #按Ctrl_D结束作业输入 at><EOF> #at显示此行内容,并覆盖Ctrl_D所在的行6.6.1at和batch作业使用示例##设有作业文件myjob,其内容为上述输入的2行内容#at12:10-fmyjob #从myjob中读取作业,并规定在12:10执行#at12:20<myjob #通过输入改道从myjob中读取作业,并规定在12:20执行2)列出已提交的作业#at-l3)删除已提交的作业#at-d2325 #删除23和25号作业。23,25为at-l输出中的作业编号6.6.2crontab功能与用法crontab的功能是规划程序周期性地定时启动、定时执行。crontab是一个客户端程序,用于编辑用户crontab文件。crontab提交的任务由服务器程序crond调度。at和batch提交的作业是一次性的,而crontab提交的作业是重复性的、永久性的,当crontab被制定好之后,在下一次被修改之前crond将一直按其内容的规定调度程序的执行。crontab的用法为:crontab[-uuser]<file|->crontab[-uuser]<-l|-r|-e>[-i][-s]6.6.2crontab参数说明6.6.2crontabcrontab文件的内容系统将为每个可以使用此功能的用户,在/var/spool/cron(红帽)或/var/spool/cron/crontabs(ubuntu)下创建与用户名相同的crontab文件,如root、test等。crontab文件是由crontab命令来修改的,当使用-e修改用户的crontab文件时,crontab命令自动调用vim或nano对文件进行编辑,当从编辑器退出时,将修改后的内容回

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论