为方便查阅和记忆
执行一个程序或命令时,产生一个进程,PID标识不同进程 不同的用户身份执行程序时,系统给予的权限是不同的,每个进程有三组人的权限,每组人具有r/w/x权限,由这个进程衍生出来的其他进程在一般状态下,也会沿用这个进程的相关权限。程序:二进制程序放置在存储媒介中,以物理文件的形式存在进程:程序被触发后,执行者的权限与属性、程序的程序代码与所需要的数据等都会被加载到内存中,操作系统并给予这个内存内的单元一个标识符PID,进程是一个正在运行中的程序子进程与父进程:PID PPIDfork and exec:过程调用的流程 系统以fork的方式复制一个与父进程相同的暂存进程,新的PID,新增PPID参数是父进程的PID,然后被复制出来的暂存进程以exec的方式来加载实际要执行的程序,最终成为一个子进程的存在
cp file1 file2 & &表示置于后台执行,在终端中仍然可以做其他的工作
工作管理中,每个工作其实是bash的子进程,bash只能管理自己的工作,不能管理其他bash的工作 假设只有一个终端,出现提示符操作的环境称为前台foreground,对应的工作还可以放入后台background去暂停或运行,放入后台的工作必须不能与用户互动,后台工作不能ctrl+c终止前台:可以控制与执行命令的这个环境称为前台工作后台:可以自行运行的工作,无法使用ctrl+c终止,可使用fg/bg调用该工作后台中执行的进程不能等待terminal/shell的输入直接将命令丢到后台执行的&:分配一个job number,利用数据重定向,将命令的stdout和stderr重定向到文件,以免影响前台工作将目前的工作丢到后台中暂停:ctrl+z
例如vim,在一般模式下ctrl+z将vim丢到后台当中并等待即可,+号表示最近一个被丢进后台的工作,且fg命令默认取用这个工作,stopped表示目前工作状态,暂停状态,-号表示最近最后第二个被放置到后台的工作,fg -可以取用,其他没有+-号标识
jobs [lnprs]命令查看目前后台工作状态
将后台工作拿到前台来处理:fg
fg %jobnumber,如fg %2,fg %1
将工作在后台下的状态变成运行中:bg
管理后台当中的工作:kill
kill -l查看能够使用的信号signal,kill -signal $jobnumber
kill -9 %jobnumber or kill -SIGKILL %jobnumber
-9强制删除一个不正常的工作时使用,-15以正常步骤结束一项工作,-1重新读取一次参数配置
kill 默认加PID,用于工作管理时加%jobnumber
脱机管理:此处的后台被并不是放到系统后台去,工作管理的后台与终端机有关,终端退出,后台工作也会结束,使用at和nohub命令可以让你脱机或注销系统后,还能够让工作继续进行
静态ps和动态top,ps将某个时间点的进程运行情况选取下来
仅查看自己bash相关进程:ps -l
F表示进程标志,说明进程权限,常见号码4表示此进程的权限是root
S表示进程状态,S=sleep睡眠状态,可以被唤醒,R=running运行中,T=stop停止状态,Z=zombie僵尸状态,进程已经终止但是无法从内存中删除,D不可被唤醒的睡眠状态,可能在等待I/O
UID/PID/PPID该进程被该UID所拥有/PID号码/PPID号码
C,CPU使用率,百分比
PRI/NI,priority/nice缩写,优先级,越小越快执行
ADDR/SZ/WCHAN,都与内存有关,SZ此进程有调多少内存,WCHAN此进程是否运行中,-表示正在运行
TTY登陆者的终端机位置,pts/n
TIME使用掉的CPU时间,此进程实际花费CPU运行时间
CMD即command,造成此程序触发进程的命令
查看系统所有进程:ps aux
USER该进程属于哪个用户账号,%CPU使用掉的CPU资源百分比,%MEM占用的物理内存百分比,VSZ使用掉的虚拟内存量,RSS占用的固定内存量,TTY该进程在哪个终端机上运行,?表示与终端机无关,STAT该进程目前的状态,与ps -l的S标识相同(R/S/T/Z),START该进程被触发启动的时间,TIME该进程实际使用CPU运行时间,COMMAND该进程的实际命令
以ps -l的格式显示所有的进程:ps -lA
进程树的程序显示:ps axjf
ps aux | grep egrep '(cron|syslog)'
僵尸进程表示该进程已经执行完毕,或因故应该要终止了,但是父进程却无法完整将该进程结束掉,而造成那个进程一直存在内存中,如果某个进程的CMD后有<defunct>字样时,表示是僵尸进程
top动态产看进程的变化:top -d 秒数,默认5s
top主要分为两个界面,上面是整个系统的资源使用情况,按行显示的内容如下:第一行依次是目前的时间,开机所经过的时间,已经登陆的用户数量,系统在1,5,15分钟的平均工作负载,平均运行几个进程(工作),越小越空闲,若高于1需要注意
第二行依次是进程总数,R,S,T,Z的进程数量,注意Z数量;第三行依次是CPU整体负载,其中%wa表示I/O wait,第四行和第五行表示物理内存和虚拟内存使用情况,若swap占用多,表示物理内存不足
top的后半部分是每个进程使用资源情况,PID,USER,PR是priority的缩写,进程的优先执行顺序,NI是nice的缩写,与PR有关,%CPU,%MEM,TIME+是CPU使用时间的累加,top默认使用%cpu排序
在top执行过程中,可以使用的按键命令有
?(shift+?)显示在top当中可以输入的按键命令
P(shift+p大写P)以%CPU排序,M以%MEM排序,N以PID排序,T以TIME+排序
k(小写)给予某个PID一个信号,r给予某个PID重新一个nice值,q离开top
重定向:top -b -n 2 > test.txt
echo $$打印当前bash PID
pstree找出进程间的相关性
所有的进程都是依附在init这个进程下面,PID为1,linux内核主动调用的第一个进程,发生僵尸进程需要重新启动init,启动init的是reboot
给进程一个信号signal去告知该进程你想要它做什么,常用信号:
1 SIGHUP 启动被终止的进程,重新读取配置文件,类似重新启动
2 SIGINT 相当于ctrl-c来中断一个进程的进行
9 SIGKILL 强制中断一个进程的进行,可能有半产品产生
15 SIGTERM 以正常的结束进程来终止该进程,已经有问题的进程无法正常终止
17 SIGSTOP 相当于ctrl-z暂停一个进程的执行
kill -signal PID kill传送信号给PID或jobnumber
killall -signal 命令名称 直接跟启动该进程的命令名称
大部分进程处于休眠状态,进程优先级和CPU调度
Priority和Nice值
Priotity(PRI)值越低表示越优先,但是PRI值是由内核动态调整的,用户无法直接调整,用户可以通过调整nice(NI)值:
PRI(new)= PRI(old) + nice
上面只能说明nice值能够影响PRI,最终的PRI还是由系统分析决定,当nice值为负时,进程会变得较为优先处理:
nice值范围时-20——19
root可随意调整nice,范围时-20_19
一般用户只能调整自己进程的nice,范围是0——19
一般用户只能越调越高nice
也就是说要调整某个进程的优先级,就是调整nice值
nice:新执行的命令给予新的nice值
如nice -n -5 vi & 一般可以将备份工作调大nice值
renice:已存在进程的nice重新调整
renice [number] PID,如renice 10 897
renice可以使nice值在父子进程间传递,令为top也可以调整nice值
free:查看内存使用情况
free [-b|-k|-m|-g] [-t]
buffers,cached表示缓冲/缓存,一般来说,swap最好不要使用,如果swap使用超过20%,物理内存严重不足,Linux系统为了加入系统性能,会将常用的或最近使用的文件数据缓存下来,因此物理内存被用光是正常的。
uname:查看系统与内核相关信息
uptime:查看系统启动时间与工作负载
netstat:跟踪网络
dmesg:分析内核产生的信息
所有内核检测信息,不管时开机还是系统运行中,只要时内核产生的信息都会被记录到内存中的某个保护区段,dmesg负责读取该区段
vmstat:检测系统资源变化
其中s和t,与系统的账号和系统的进程相关
SetUID
SUID仅对二进制程序有效,执行者对该程序需要有X权限,本权限在执行过程中有效,执行者将具有该程序所有者的权限,如/etc/shadow密码只有root可读可写,但是一般用户可以使用passwd修改自己的密码,因为passwd命令的SUID权限,一般用户在执行passwd命令期间会暂时获得root权限,写入新密码,SUID仅可用在二进制程序上,不能用在shell script上,对目录也无效
SetGID
当s标志出现在用户组时,成为SGID,SGIC可以针对文件和目录来设置,SGID对二进制程序有用,执行者需要有x权限,在执行过程中,将会获得该程序用户组的支持
SGID用在目录上时,用户需要对目录有rx权限,并进入此目录,用户在此目录下的有效用户组将会变成该目录的用户组,若在此目录下有w权限,新建的文件的用户组和此目录用户组相同,SGID对项目开发非常重要
Sticky Bit
如上面t权限,SBIT仅对目录有效,当用户对于此目录有wx权限,用户在此目录下创建的文件或目录时,仅有自己与root才有权力删除该文件
SUID SGID SBIT的设置
SUID = 4, SGID=2,SBIT=1
如chmod 4775 filename会改为-rwsrwxr-x
s和t都是替代x这个权限的,如果user, group, others没有x权限,会出现S和T,表示是空的
/proc/*代表的意义
进程在内存中,内存中的数据写入了/proc/目录下,各个进程的PID以目录的类型存在于/proc中,如/proc/1/,如果针对整个Linux系统相关的参数,在/proc目录下,如/proc/cpuinfo等
fuser:通过文件(或文件系统)找出正在使用该文件的程序
如遇到device is busy可以利用fuser跟踪,找到进程有利用到该文件系统
如fuser -uv .
fuser -uv /proc
fuser -muv /proc
lsof:列出被进程所打开的文件名
fuser是由文件或者设备找出使用它的进程,lsof查出某个进程打开或使用的文件设备
如lsof +d /dev找出某个目录下已经被打开的文件
lsof -u root | grep bash显示输入root的bash这个进程打开的文件
pidof:找出某个正在执行进程的PID
如pidof init syslogd
SELinux是Security enhanced Linux缩写,安全强化的Linux,设计之初,避免资源的误用,selinux是进行程序、文件等权限设置依据的一个内核模块,由于启动网络服务的也是程序,刚好也能控制网络服务能否访问系统资源的一道关卡
传统文件权限与账号关系,自主访问控制DAC,依据进程的所有者与文件资源的rwx权限来决定有无访问的能力
以策略规则制定特定程序读取特定文件:委托访问控制,MAC,针对特定的进程和文件资源来进行权限控制,即使你是root,在不同进程时,你所取得的权限不一定是root,根据规则选择是否启用控制
selinux通过MAC来空管进程,控制的主体是进程,目标则是该进程能否读取的文件资源
策略:由于进程和文件数量庞大,因此selinux会依据某些服务来制定基本的访问安全性策略
安全上下文:主体能否访问目标除了策略指定之外,主体与目标的安全上下文必须一致,最后根据rwx权限来最终确定是否能够访问目标
selinux三种模式:
enforcing强制模式,正在运行
permissive宽容模式,调试用
disabled关闭,selinux没有运行
getenforce命令查看模式
