操作系统管理着所有的硬件资源,负责响应各个应用的资源请求。应用还没有运行的时候就只是一堆各种各样的文件(二进制文件、文本文件等等),运行的时候,相对系统而言就是进程。比如你启动apache(linux下知名的web服务端),在系统中就启动了一个(或多个,假如配置了多个的话)进程,这个进程负责等待并处理用户的请求。
正常启动一个应用可能还需要其它支撑(如需要用到网络资源的,就需要网络服务),支撑别的应用的进程又可以叫做服务。
本文讲解的系统管理,无非就是进程管理、服务管理。不过管理一个系统,除了这两个常规工作外,还有防火墙管理、远程管理等,本文将对上面的概念及操作进行演示讲解。
注:windows下的操作请自行搜索了解,本文仍然是使用CentOS7系统(字符界面)作为演示。
前台进程
及后台进程
。yum groups install 'GNOME Desktop'-y &
fg
命令将刚刚放到后台的进程调到前台来看。上面提到的进程分前台进程及后台进程,这是从不同应用来区分的,但同一个应用的进程下又有父进程、子进程之分(一般是大型应用才会这样设计,如nginx等)。子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程。父进程终止子进程自然终止。
vi test.txt &
ps aux | grep vi
Linux中的ps命令是Process Status的缩写,进程状态的意思。Ps命令有很多参数,最常用的参数组合是-aux
(显示的信息较全面),下面是ps –aux
的输出结果,每列输出的意义如下:
参数 | 具体意义 |
---|---|
USER | 用户名 |
PID | 进程ID(Process ID) |
%CPU | 进程的cpu占用率 |
%MEM | 进程的内存占用率 |
VSZ | 进程所使用的虚存的大小(Virtual Size) |
RSS | 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节 |
TTY | 与进程关联的终端(tty) |
STAT | 进程的状态:进程状态使用字符表示的(STAT的状态码) |
START | 进程启动时间和日期 |
TIME | 进程使用的总cpu时间 |
COMMAND | 正在执行的命令行命令 |
上面截图显示的大多是系统进程,因此为快速查看自己指定的进程,经常与grep结合使用,如:
ps –aux | grep vi
显示关于vi进程的信息。
1)ps a
显示现行终端机下的所有程序,包括其他用户的程序。
2)ps -A
显示所有进程。
3)ps c
列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
4)ps -e
此参数的效果和指定"A"参数相同。
5)ps e
列出程序时,显示每个程序所使用的环境变量。
6)ps f
用ASCII字符显示树状结构,表达程序间的相互关系。
7)ps -H
显示树状结构,表示程序间的相互关系。
8)ps -N
显示所有的程序,除了执行ps指令终端机下的程序之外。
9)ps s
采用程序信号的格式显示程序状况。
10)ps S
列出程序时,包括已中断的子程序资料。
11)ps -t
<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
12)ps u
以用户为主的格式来显示程序状况。
13)ps x
显示所有程序,不以终端机来区分。
最常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。
关闭进程有很多方法,最常用的有kill命令及一些快捷键(Ctrl+c或Ctrl+z等)。
前台进程一般有退出指令,如vi,top的退出指令都是q。
前台进程一般使用应用自身的退出指令(多数是q),但像yum这种前台进程,它在运行过程中不提供指令退出,这时可以使用快捷键退出,或使用kill命令。
下面演示一下这两个快捷键及kill命令。
在yum运行的过程,输入了Ctrl+c快捷键来中止yum的运行。
Ctrl+c与Ctrl+z都是中止进程的运行,但两者是有区别的。
Ctrl+c强制退出该进程
Ctrl+z进程中止运行,但在系统中处于挂起状态,后续可以使用fg命令将该进程调出来再继续运行。
温馨提示:
1、这里显示的这个是grep的进程信息,并不是yum的进程信息
2、^ 表示Ctrl。^c就表示是Ctrl+c
3、强制中止对于数据不敏感的程序可以使用,但如果是数据库的进程,请慎用强制中止。
除了使用快捷键,使用kill命令也可以关闭进程。kill命令的格式是:
kill[参数][进程号]
由此可见,除输入正确的参数外,还需要知道进程对应的进程号。如何获得进程号?请参考前面“进程信息的查看”。ps –aux
命令输出结果中的PID(进程ID(Process ID))。
kill -9 8769
便“杀死”了该进程。再次使用ps命令查询关于yum的进程信息,已无输出结果。命令参数:
-l 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户
HUP 1 终端断线
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
温馨提示:强制中止对于数据不敏感的程序可以使用,但如果是数据库的进程,请慎用强制中止。
-9是强制退出指令,init进程是不可杀的
rpm -aq | grep httpd
yum install -y httpd
sudo service httpd start
systemctl status httpd.service
systemctl enable httpd.service
,如要取消开机启动则使用systemctl disenable httpd.service
。systemctl restart network
,同理ssh服务也可使用该命令管理;要管好一个防火墙涉及太多的网络知识,如果还没有网络基础的同学,请留待有一定的网络基础之后再回过头来了解。
CentOS7开始,使用了firewalld
代替之前的iptables
,因此这里说的防火墙管理是针对CentOS7中的firewalld程序。firewall-cmd
是该程序的管理命令,如果没有该命令说明系统还没有安装firewalld,请使用yum install firewalld firewall-config
命令安装。
1.trusted 信任区域 默认允许所有流量传入
2.public 公共区域 (默认区域)默认允许ssh 服务 dhcp
3.external 外部区域 默认允许ssh其余均拒绝
4.home 家庭区域 有ssh, 预定于服务等
5.internal 内部区域 默认允许ssh 服务 dhcp服务等
6.work 工作区域 默认ssh
7.dmz 隔离区
8.block 限制区域 默认拒绝所有流量传入
9.drop 丢弃区域 默认丢弃所有流量传入
管理数据包时:
1、先根据数据包的源IP进行相应区域的防火墙规则匹配; 如果源地址关联到特定的区域,则按特定区域的规则执行; 如果未关联到特定的区域,则按默认区域的规则执行。
2、根据传入的网络接口,进行相应区域的防火墙规则匹配; 如果源地址关联到特定的区域,则按特定区域的规则执行; 如果未关联到特定的区域,则按默认区域的规则执行。
绑定源地址的区域规则> 网卡绑定的区域规则> 默认区域规则
systemctl status firewalld
systemctl start firewalld
systemctl enable firewalld
# 显示所有可用区域
firewall-cmd --get-zones
# 显示当前默认区域
firewall-cmd --get-default-zone
# 设置默认区域
firewall-cmd --set-default-zone=public
# 显示当前使用的区域和对应网卡
firewall-cmd --get-active-zones
# 显示指定接口绑定的区域
firewall-cmd --get-zone-of-interface=ens33
# 为指定接口绑定区域
firewall-cmd --zone=dmz --add-interface=ens37
# 为指定的区域更改绑定的网络接口
firewall-cmd --zone=dmz --change-interface=ens33
# 为指定的区域删除绑定的网络接口
firewall-cmd --zone=dmz --remove-interface=ens37
# 查看默认区域设置
firewall-cmd --list-all
# 查看指定的区域设置
firewall-cmd --zone=dmz --list-all
# 显示指定区域可以访问的服务
firewall-cmd --zone=public --list-services
# 显示系统预定义的服务名
firewall-cmd --get-service
# 为指定区域添加允许访问的服务
firewall-cmd --zone=public --add-service=http
# 为指定区域删除允许访问的服务
firewall-cmd --zone=public --remove-service=http
# 添加多个服务
firewall-cmd --zone=public --add-services={http,https,redis,ssh}
# 永久生效,运行时配置结束后统一执行
firewall-cmd --runtime-to-permanent
# 永久生效,需要在设置时加--permanent选项,但是并不是运行时生效,需要重启启动firewalld或者重
#新reload
firewall-cmd --permanent --zone=public --add-services=http
firewall-cmd --reload 或者 systemctl restart firewalld
# 显示指定域中允许访问的端口
firewall-cmd --zone=public --list-port
# 位指定域中添加允许访问的端口
firewall-cmd --zone=public --add-port=22/tcp --add-port=80-100/tcp
#位指定域中删除允许访问的端口
firewall-cmd --zone=public --remove-port=22/tcp --remove-port=80-100/tcp
#列出已开放的服务(端口)
firewall-cmd --list-services
#添加http服务(80端口)到防火墙中
firewall-cmd --add-service=http
对仅处于学习网络应用(http、mysql等)的同学,最好的办法是直接关闭firewalld,但如果你不想关闭防火墙,那你就得知道如何在防火墙中开启http的端口(80)。本文仅演示http默认端口(80)的开放。
如果你的http服务端已启动,则此时你可以在另外一台机器尝试访问你部署的网页了。同理,
firewall-cmd --add-service=mysql
firewall-cmd --add-service=http --permanent
防火墙默认开放22端口(ssh远程服务的默认端口),但如果你修改了ssh的默认端口,则你需要修改防火墙中的规则。由于你不使用22这个默认端口,则不可以使用上面“添加服务”的方式来开放端口,请自行搜索资料解决。
/etc/ssh/sshd_config
文件中的行,将“#Port 22
”修改“Port 你想的端口
”,如“Portsystemctl restart sshd
本文介绍了OS系统管理的进程管理、服务管理、防火墙管理、远程管理的基本用法,后续运维工程师学习请关注我的更新~