首先确定几个概念:程序通常是放置在存储媒介中,以物理文件形式存在;进程可以说是正在进行的程序。每个进程都有个独一无二的由UID/GID衍生出来的PID作为进程的标志。常驻的进程会被叫做服务(daemon)。
父子进程的调用流程是fork and exec,先复制一个和父进程一模一样的子进程(PID不同)然后再由exec方式加载执行。
1 任务管理
前台:可以出现提示字符让人操作的环境
后台:自动执行的任务,无法通过ctrl+c来终止,后台执行的任务不能等待终端和shell输入
1.1 &:将命令丢到后台执行
只要在命令最后加上&,就会把该命令丢到后台执行,执行完后会输出结果。例如【cat ~/.bashrc &】就会在后台执行,然后第一行会输出“[1] 8166”第一个是代表该任务的序号是1,第二个代表该进程的PID。
1.2 ctrl+z:将任务丢到后台暂停
按下ctrl+z,目前正在进行的任务就会在后台暂停,这时候会出现“[1]+ stopped”的字样,+表示最近被丢入的任务,-代表最近第二个被丢入的任务。用此方法可以打断目前的任务去做别的任务,等做完之后在回来接着做任务。
1.3 jobs:查看后台任务状态
jobs []
-l:列出job number 与 PID
-r:列出run的任务
-s:列出stop的任务
1.4 fg:将后台任务拿到前台处理
【fg %number】就可以将任务序号是number的任务拿到前台,而且%可有可无,但是最最好有,防止和后面所介绍的东西搞混。并且还可以用【fg +】【fg -】拿出最近一个和最近第二个。
1.5 bg:将后台的任务变成运行中
【bg %number】类似fg。
1.5 kill:杀死后台任务
kill -signal %jobnumber
kill -signal PID
kill -l
-l:列出能够使用的信号
这里的信号见下图,
其中最重要的是:1:启动 ;9:强制中断;15:以正常的方式结束。
需要注意:如果有%则代表后面是jobnumber,如果没有则代表PID。
1.6 nohup:脱机后还能继续执行任务
【nohup [ ]】【nohup [ ] &】可以分别将任务放在前台或者后台,在注销后也能继续工作。但是它不支持bash内部的指令,只能是一个外部指令(脚本)。
2 进程
说到进程就要提执行顺序,进程的执行顺序是由优先级PRI决定的,越低越优先,但是呢这个PRI是由内核来决定的用户无法修改,但是用户可以通过修改nice(NI)值,来影响PRI。当nice(范围-20~19)为负的时候就会降低PRI的值,让进程被优先处理。但是,只有root可以随意调整自己或者他人的进程,一般用户只能往高里调自己的进程。而且子进程会继承父进程的nice。
2.1 查看进程
2.1.1 ps:将某一点的进程运行情况打印出来
ps可以记两个命令,一个是【ps -l】查看自己的进程;一个是【ps aux】查看所有的运行系统的进程。
- F:进程标识,4是权限为root;1代表子进程只fork还没有exec。
- S:进程状态,R:运行、S:睡眠、D:不可唤醒的睡眠、T:停止、Z:僵尸状态,已终止但不能被删除,如果出现最好做溯源将其改善。
- PPID:父进程的PID
- ADDR/SZ/WCHAN:与内存有关,正在run的会显示-
2.1.2 top:动态查看进程的变化
top的功能非常多,可以用来持续的检测程序运行的状态。
top [-d 数字]
每多少秒更新一次
top []
-b: 以批量的形式执行,会结束top 一般用于数据流重定向
-n: 与b搭配,执行几次输出结果
-p: 检测某个PID
在top执行过程中也有很多的按键命令,P:以CPU排序、M:以内存使用排列、r:修改nice值。
2.1.3 pstree:进程树
所有程序都是依附在systemd下,所以其PID是1。加上参数-p显示PID,-u显示账号属性,-A用ASCII字符链接,-U用unicode字符链接。出现乱码可以在A和U中选一个。
2.1.4 killall:删除服务
【killall [ ] [命令名称]】可以删除命令名称所启动的所有进程,加上-i可以在删除前询问。所有killall用来删除一个服务很简单。
2.2 调整执行顺序
2.2.1 nice:行执行的命令给予新的nice
【nice [-n 数字] 命令 】
2.2.2 renice:调整已存在的命令的nice
【renice [number] PID】
2.3 查看系统资源
一般来说系统会尽可能压榨物理内存,使其效率提高,但是swap使用率不应该超过20%。
2.3.1 free:查看内存使用情况
2.3.2 uname:查看系统与内核相关信息
2.3.3 uptime:查看系统启动时间与任务负载
2.3.4 netstat:追踪网络和socket文件
2.3.5 dmesg:分析内核产生信息
2.3.6 vmstat:检测系统资源变化
3 SElinux
SElinux和仅仅用rwx这种权限来限制【用户】访问的自主访问控制(DAC)是不同的,selinux是直接管理【进程】能否访问某些文件的强制访问控制(MAC)。一个是管理用户能否访问,一个是管理进程能否访问,是很不同的。
三个主要的安全策略,每个策略会有很多规则:
- targeted:针对网络服务较多,是默认策略
- minimum:由target自定义而来,仅针对选择的进程来保护
- mls:完整的SELinux限制,较为严格
三种模式:
- enforcing:强制模式,会正确限制域和类型(见下面)的关系。
- permissive:宽容模式,会警告单不会实际限制
- disabled:关闭
★3.1 安全上下文
★安全上下文: 是selinux非常重要的一部分。这个是放置在文件inode内的,有点像DAC的rwx,只有通过安全比对才可以进行访问,而且就算通过了检测 ,还需要最后参考rwx的权限设置。安全上下文就是相当于一个在rwx之前的安全检测。会检测进程和目标资源的安全上下文是否一样,一样才能通过。
有三个字段:
- 身份识别:unconfined_u不受限的用户;system_u系统用户。
- 角色:object_r目录或者文件;system_r进程
- ★SElinux类型:在文件资源上的叫类型(type),在进程上的叫域(domain)。只有域和类型匹配了才可以通过安全上下文检查。
3.2 一些常用命令汇总
这部分命令过于繁多和零碎就将其汇总。
类型 | 命令 | 模板 | 参数 | |
模式查看 | getenforce | |||
策略查看 | sestatus | sestatus [-vb] | -b:以bool列出策略有没有启动 | |
切换模式 | setenforce | setenforce[0|1] | 0:强制转成宽容 1:反之 | 不能由关闭转换,且转换完需要重新启动 |
规则查看 | getsebool | getsebool [ ] [ 规则名称] | -a:全部规则列出 | |
SElinux类型查看 | seinfo、sesearch | |||
修改规则布尔值 | setsebool | setsebool [-P] [规则名称] [0|1] | -P:直接写到配置文件里,未来会生效 | |
手动修改SELinux类型 | chcon | chcon [-R] [-T 类型] [-u 身份识别] [-r 角色] 文件 chcon [-R] --reference=范例文件 文件 按照范例文件来修改文件的类型 | -R:连同子目录一起修改 | |
让文件恢复正确的类型 | restorecon | restorecon [-RV] 文件或者目录 | -R:连同子目录 -v:显示到屏幕 | 这个会根据设置的默认类型来自动进行更改,还可以直接改一个目录里所有文件,很方便 |
修改和查询默认类型 | semanage | semanage fcontext -l 显示所有默认类型 semanage fcontext -{a|b|c] [-frst] file_spec | 这个命令的参数非常多,这里只写了一部分 |
3.3 网络服务案例
这里只是按照鸟叔的思路复现了文中的代码,但是并没有很深刻的体会,在学完服务器后会回来完善。