目录
什么是进程
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体;简单地说进程就是程序在运行的时候,在内存当中的一种体现;系统中有很多的进程,每一个进程都有一个ID,我们称之为PID;
进程与程序(process&program)
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位;
而程序只是一组指令的有序集合。进程是动态的,而程序是静态的;
Linux的多用户、多任务环境
多用户的意思是linux系统可以同时多个人进行登录,多任务就是表示系统可以多个任务同时运行;
工作管理
很多时候我们在Linux终端里面需要通过命令打开一个图形化界面,而这个时候由于打开的图形化界面占用了系统的前台,所以就会导致用户此时在终端里面无法使用命令;如果想要使用终端就需要将系统前台运行的程序关闭;
关闭前台程序:Ctrl + c
例:firefox
注:Ctrl + c 关闭前台程序
如果说,我们不想关闭前台的程序,也想要使用控制台;这时候就可以将前台程序停止,放在后台;
将程序放于后台:Ctrl + z
例:firefox
注:Ctrl + z 将前台程序终止,放于后台
查看并激活后台运行的程序:jobs,bg
注:jobs查看后台程序;bg激活后台程序
将后台程序重新调到前台:fg
注:将程序重新调到前台时,控制台同样会无法使用
将程序直接放在后台运行:firefox & 以火狐浏览器举例
注:如果一个程序有输出,即使是在后台运行的,在前台也会显示输出
结束后台运行的程序:kill -9 %1 -9表示强制,%表示后台,1表示程序的序号
kill -9 1 表示杀死系统当中pid为1的进程
killall -9 ping 直接加上程序的名字,不需要输入pid(推荐使用)
脱机管理问题
很多时候我们在管理Linux系统时,都是通过远程连接来实现的,常用的远程连接管理Linux的工具有SecCRT、Putty等;在使用远程连接管理系统时,如果系统需要长时间运行一个程序那么这个终端不能关闭;因为当终端一旦关闭,该终端中运行的程序也会随之关闭;这就面临一个脱机管理的问题,如果说我们硬性地需要实现即使关闭客户端,后台程序依然可以运行该怎么做?
可以通过nohup命令;nohup 命令运行由 Command参数和任何相关的Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示"and"的符号)到命令的尾部
脱机管理ping命令:nohup ping localhost &
注:这时候即使将远程连接的客户端关闭了,该程序还是会在系统中运行
进程管理
进程的查看
进程的查看:ps
注:不带参数,默认查看的是当前shell下的进程;-l 以长字符的方式显示
查看系统中所有进程:ps aux
注:a显示所有的进程,u显示进程的所有者,x显示进程的详细信息
显示进程树:pstree -u
只查看进程的名字:ps -ex -o comm -o表示后面要指明的参数
查看进程对应的CPU使用量:ps -ex -o comm,%cpu
查看pid:ps -ex -o comm,pid
查找指定进程的pid:pidof bash
查看所有root的pid:pgrep -U root
查看进程占用的内存:ps -ex -o comm,%mem
查看进程运行的状态:ps -ex -o comm,state S表示睡眠状态,R表示正在运行,Z表示僵尸状态(停止了却无法清除),T表示停止状态
进程的管理
top
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定
top:可以使用top命令实时查看进程的变化,默认3秒钟跳一次;Z键改变显示颜色
注:可以通过d参数手动设置每秒钟动态查看进程变化:top -d 1
kill
kill用于发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。如果想要管理进程,需要给进程发送一个信号:kill -选项 pid
查看系统有哪些信号:kill -l
注:-l参数会列出kill命令所有向进程发送的信号信息;例如:-1表示重启,-9表示强制等等
关于进程的执行顺序
当我们运行一个程序的时候,必须要消耗一定的cpu和内存;在Linux中默认情况下对进程的管理都是先进先出,即当系统的进程在使用cpu时,后面加入的进程只能排队等候系统分配资源;
进程的优先级是由NI值决定的:优先级=优先系数+nice值,一般优先系数是由内核决定的,是固定的;nice值是可以改变的;nice值的范围是-20~19; 优先级的数字越大,进程的优先级就越低,越往后执行;优先级数字越小,进程的优先级就越高,越先执行;
所以当我们要使一个进程优先执行时,可以将nice值设置为-20;要使一个进程最后执行,可以将nice值设置为19;
改变进程的优先级:(前提进程已经运行)
方法一:top中修改
top命令
按r键
输入需要改变优先级的PID
输入-20~19的nice值
方法二:renice
更改pid为16247的进程nice值:renice -20 16247
如何设置进程一运行就以某种优先级:nice -n -19 cat /dev/zero > /dev/null 注:设置cat命令nice值以-19运行
系统资源的查看
free
free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
注:-m表示以M的形式显示,-g表示以G的形式显示
uptime
uptime命令够打印系统总共运行了多长时间和系统的平均负载
vmstat
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况
netstat
Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等
注:n做反向解析,t 代表tcp协议,u 代表udp协议
uname
uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)
SELinux初探
SELinux,全称为增强安全性Linux,目的是为了提高系统的安全性.是由美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。
SELinux不是针对用户来设置权限,而是针对进程来设置权限;即指定的进程才能访问指定的资源。比如:用户只能使用锤子来钉钉子,而不能使用锤子砸电脑;我们把每一个进程称为一个主体,把每个资源称为一个对象;
在SELinux中,一个文件除了具有基本的文件属性外,还具有默认用户、角色和上下文的概念;user-identify即SELinux的用户身份标识,跟文件系统的user不一样;role表示的是角色;SELinux为每个文件提供了安全标签,也同样为进程提供了安全标签;这些称为SELinux的安全上下文
查看文件的SELinux属性:ls -Z install.log
注:Z参数表示查看文件的SELinux属性
查看系统中存在其它身份用户:seinfo -u
查看系统中存在其它角色:seinfo -r
查看SELinux基本信息:seinfo
查看SELinux状态:sestatus
SELinux的运行模式(重点)
SELinux工作的时候一共有三种模式,分别是强制模式、允许模式、禁用模式;其中强制模式和允许模式可以在线更改,而不能切换到禁用模式;
三种模式的区别:
强制模式:当一些服务运行的时候,如果不满足SELinux的要求就会被阻止该服务的运行
允许模式:当一些服务运行的时候,如果不满足SELinux的要求只会被警告,并不会阻止该服务运行
禁用模式:关闭SELinux功能
查看当前SELinux处于的模式:getenforce
切换SELinux的工作模式:setenforce
注:所做的修改重启之后就会失效,如果需要可以修改/etc/selinux/config配置文件;
SELinux上下文(重点)
SELinux安全上下文是一个访问控制属性。在SELinux中,类型标识符是安全上下文中决定访问的主要的部分。当我们在运行一些服务的时候,必须要有与之对应的SELinux上下文;如果上下文匹配不上,该服务在运行过程中就会出现问题;
举例:安装Apache服务,该服务的配置文件中设置了发布网站的默认文件夹;我们通过修改该配置文件 /etc/httpd/conf/httpd.conf 重新指定一个发布网站的文件夹,然后修改该文件夹的SELinux上下文,验证服务能否启动;
当我们给发布网站的文件夹修改了SELinux上下文时,发现该服务就无法启动了;
更改SELinux上下文:
chcon -R -t httpd_sys_content_t /www/
注:将/www/目录的SELinux上下文改为httpd_sys_content_t ; R表示递归
chcon -R --reference=/var/www/html /www/
注:将 /www/ 目录的SELinux上下文参照成 /var/www/html
恢复默认的SELinux上下文:restorecon -R /www/
查看SELinux的排错信息
当我们通过SELinux使用一些服务时,如果发生了一些错误或者SELinux阻止了一些服务的运行,我们可以通过排错工具来检查SELinux所记录的日志信息
1、安装setroubleshoot排错包: yum list setroubleshoot \*
yum install setroubleshoot \* -y
2、启动服务:service setroubleshoot restart
3、查看配错日志:cat /var/log/messages | grep setroubleshoot
或者通过audit2why命令来分析/var/log/audit/audit.log文件:audit2why < /var/log/audit/audit.log 尽量不要直接读取audit.log,因为里面的内容太多
SELinux策略与规则管理
SELinux有两种工作级别:
strict:对于每个文件都要严格规定其类型,对于每个进程都有特定的域,进程的域和文件的类型必须要严格匹配,才能使进程访问此文件;
targeted:仅有限个进程受到SELinux的管控;在RHEL系系统中为默认级别;只监控那些容易被入侵并且会对系统造成安全隐患的进程;
布尔值(重点)
SELinux中的布尔值可以设置系统中的服务开启和关闭,当我们在搭建一些服务的时候除了该服务本身可以开启和关闭一些功能之外,布尔值也可以开启和关闭服务的一些功能
查看所有的布尔值:getsebool -a 或 seinfo -b
查看指定程序的bool值:getsebool -a | grep ftp
开启bool值:
setsebool allow_ftpd_anon_write on 等同于setsebool allow_ftpd_anon_write=1
关闭bool值:
setsebool allow_ftpd_anon_write off 等同于setsebool allow_ftpd_anon_write=0
注:如果需要系统重启之后还能生效,需要写入配置文件中去;需要加上-P参数
即setsebool -P allow_ftpd_anon_write on
原创文章,转载请注明出处