【运维工程师学习二】OS系统管理
- 1、操作系统管理
- 2、进程管理
- 3、进程的启动
- 4、进程信息的查看
- 4.1、STAT 进程的状态:进程状态使用字符表示的(STAT的状态码),其状态码对应的含义:
- 4.2、ps命令常用用法(方便查看系统进程)
- 5、进程的关闭
- 5.1、Kill命令
- 5.2、常用的进程信号:
- 5.3、systemctl命令的常用命令。(httpd.service是apache的服务名称)
- 5.4、查看是否已安装httpd
- 5.5、安装httpd
- 5.6、查看httpd状态
- 5.7、开启httpd
- 总结
- 6、防火墙管理
- 7、firewalld区域概念
- 7.1、工作原理:
- 8、firewalld服务
- 8.1、关闭80端口
- 9、远程管理
- 总结
1、操作系统管理
操作系统管理着所有的硬件资源,负责响应各个应用的资源请求。应用还没有运行的时候就只是一堆各种各样的文件(二进制文件、文本文件等等),运行的时候,相对系统而言就是进程。比如你启动apache(linux下知名的web服务端),在系统中就启动了一个(或多个,假如配置了多个的话)进程,这个进程负责等待并处理用户的请求。
正常启动一个应用可能还需要其它支撑(如需要用到网络资源的,就需要网络服务),支撑别的应用的进程又可以叫做服务。
本文讲解的系统管理,无非就是进程管理、服务管理。不过管理一个系统,除了这两个常规工作外,还有防火墙管理、远程管理等,本文将对上面的概念及操作进行演示讲解。
注:windows下的操作请自行搜索了解,本文仍然是使用CentOS7系统(字符界面)作为演示。
2、进程管理
- 进程就是程序运行时的状态,因此是动态的,程序关闭了,进程也就退出了。
- 在演示进程管理之前,先说明一下,进程分两种:
前台进程
及后台进程
。 - 两者最大的区别就是:前台进程是在当前屏幕上看得见的,后台进程是在屏幕上看不见的,在后台默默地运行着的。
- 比如yum、find、vi等等这些是前台进程,apache、nginx、mysql等这些属于后台进程。可在运行程序的命令后面加&符号把前台进程放到后台运行。例如,使用yum安装GNOME图形界面需要安装很多软件,需要等待的时间十分长,则使用
yum groups install 'GNOME Desktop'-y &
- 通过在命令的最后增加&符号将yum放到后台运行,然后你可以继续做其它事情。如果你做完了其它事情,想看看yum安装得怎么样了,可以使用
fg
命令将刚刚放到后台的进程调到前台来看。 - 进程管理是管理什么东东呢?无非就是管理进程的启动、关闭及查看该进程的运行情况(对系统资源的使用情况)。其实刚刚的&符号及fg命令都属于进程管理的范畴。
3、进程的启动
上面提到的进程分前台进程及后台进程,这是从不同应用来区分的,但同一个应用的进程下又有父进程、子进程之分(一般是大型应用才会这样设计,如nginx等)。子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程。父进程终止子进程自然终止。
- 启动一个应用就相应启动了对应的进程,因此进程的启动没有什么好说的。
- 启动了一个vi进程,不过加了&符号,意思是放在后台运行
vi test.txt &
- vi进程的信息,包括用户,启动时间等等。
- ps是查看进程信息的工具,下面会继续演示ps的常用方法
ps aux | grep vi
4、进程信息的查看
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进程的信息。
4.1、STAT 进程的状态:进程状态使用字符表示的(STAT的状态码),其状态码对应的含义:
- R 运行 Runnable (on run queue) 正在运行或在运行队列中等待。
- S 睡眠 Sleeping 休眠中, 受阻, 在等待某个条件的形成或接受到信号。
- I 空闲 Idle
- Z 僵死 Zombie(a defunct process) 进程已终止, 但进程描述符存在,
直到父进程调用wait4()系统调用后释放。 - D 不可中断 Uninterruptible sleep (ususally IO) 收到信号不唤醒和不可运行,
进程必须等待直到有中断发生。 - T 终止 Terminate 进程收到SIGSTOP, SIGSTP, SIGTIN,
SIGTOU信号后停止运行运行。 - P 等待交换页
- W 无驻留页 has no resident pages 没有足够的记忆体分页可分配。
- X 死掉的进程
- < 高优先级进程 高优先序的进程
- N 低优先 级进程 低优先序的进程
- L 内存锁页 Lock 有记忆体分页分配并缩在记忆体内
- s 进程的领导者(在它之下有子进程);
- l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
- +位于后台的进程组
4.2、ps命令常用用法(方便查看系统进程)
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去查找特定的进程,然后再对特定的进程进行操作。
5、进程的关闭
关闭进程有很多方法,最常用的有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命令将该进程调出来再继续运行。
- 第一次使用Ctrl+c,使用ps –aux来看,没有再看到yum进程的信息了。
- 第二次使用Ctrl+z,使用ps –aux来看,能看到yum进程的信息了。
温馨提示:
1、这里显示的这个是grep的进程信息,并不是yum的进程信息
2、^ 表示Ctrl。^c就表示是Ctrl+c
3、强制中止对于数据不敏感的程序可以使用,但如果是数据库的进程,请慎用强制中止。
5.1、Kill命令
除了使用快捷键,使用kill命令也可以关闭进程。kill命令的格式是:
kill[参数][进程号]
由此可见,除输入正确的参数外,还需要知道进程对应的进程号。如何获得进程号?请参考前面“进程信息的查看”。ps –aux
命令输出结果中的PID(进程ID(Process ID))。
- 前面演示时使用Ctrl+z将yum进程放到了后台,通过ps命令查到其进程ID为8769,因此使用
kill -9 8769
便“杀死”了该进程。再次使用ps命令查询关于yum的进程信息,已无输出结果。
命令参数:
-l 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户
5.2、常用的进程信号:
HUP 1 终端断线
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
温馨提示:强制中止对于数据不敏感的程序可以使用,但如果是数据库的进程,请慎用强制中止。
-9是强制退出指令,init进程是不可杀的
5.3、systemctl命令的常用命令。(httpd.service是apache的服务名称)
要成功执行如上命令,请确保你安装了httpd,如下图示:
5.4、查看是否已安装httpd
rpm -aq | grep httpd
5.5、安装httpd
yum install -y httpd
5.6、查看httpd状态
sudo service httpd start
5.7、开启httpd
systemctl status httpd.service
总结
- 新手不要乱关闭系统服务(不清楚该服务的真正用途)已免系统出现某些功能不可用或崩溃;
对于新手可以将systemctl理解为只是管理开机启动的命令,如前面演示的,我想要httpd服务开机启动,则使用systemctl enable httpd.service
,如要取消开机启动则使用systemctl disenable httpd.service
。 - 注意:该举例只适用于使用yum安装的httpd,编译安装的话需要自行建立适当文件才能实现这样管理httpd服务的启动与关闭;
- 前面介绍系统的安装时,讲解网络服务的重启也是使用了
systemctl restart network
,同理ssh服务也可使用该命令管理;
6、防火墙管理
要管好一个防火墙涉及太多的网络知识,如果还没有网络基础的同学,请留待有一定的网络基础之后再回过头来了解。
CentOS7开始,使用了firewalld
代替之前的iptables
,因此这里说的防火墙管理是针对CentOS7中的firewalld程序。firewall-cmd
是该程序的管理命令,如果没有该命令说明系统还没有安装firewalld,请使用yum install firewalld firewall-config
命令安装。
7、firewalld区域概念
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 丢弃区域 默认丢弃所有流量传入
7.1、工作原理:
管理数据包时:
1、先根据数据包的源IP进行相应区域的防火墙规则匹配; 如果源地址关联到特定的区域,则按特定区域的规则执行; 如果未关联到特定的区域,则按默认区域的规则执行。
2、根据传入的网络接口,进行相应区域的防火墙规则匹配; 如果源地址关联到特定的区域,则按特定区域的规则执行; 如果未关联到特定的区域,则按默认区域的规则执行。
绑定源地址的区域规则> 网卡绑定的区域规则> 默认区域规则
8、firewalld服务
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
8.1、关闭80端口
#列出已开放的服务(端口)
firewall-cmd --list-services
#添加http服务(80端口)到防火墙中
firewall-cmd --add-service=http
对仅处于学习网络应用(http、mysql等)的同学,最好的办法是直接关闭firewalld,但如果你不想关闭防火墙,那你就得知道如何在防火墙中开启http的端口(80)。本文仅演示http默认端口(80)的开放。
如果你的http服务端已启动,则此时你可以在另外一台机器尝试访问你部署的网页了。同理,
firewall-cmd --add-service=mysql
- 在防火墙中允许别人访问你的3306端口(mysql数据库默认端口)。
如要防火墙永久开放端口,需要命令后面加—permanent参数,如:
firewall-cmd --add-service=http --permanent
防火墙默认开放22端口(ssh远程服务的默认端口),但如果你修改了ssh的默认端口,则你需要修改防火墙中的规则。由于你不使用22这个默认端口,则不可以使用上面“添加服务”的方式来开放端口,请自行搜索资料解决。
9、远程管理
- Linux字符界面的远程使用ssh协议,图形界面的远程使用vnc。
- CentOS最小安装会自动安装ssh服务端并自动开启(需要注意:ubuntu最小化安装则不会安装ssh服务端),ssh协议默认端口是22,如果你想系统安全一些,不那么轻易被人扫描到,则修改ssh远程端口的方法是:
修改/etc/ssh/sshd_config
文件中的行,将“#Port 22
”修改“Port 你想的端口
”,如“Port
65222”,然后重启sshd服务,命令是systemctl restart sshd
总结
本文介绍了OS系统管理的进程管理、服务管理、防火墙管理、远程管理的基本用法,后续运维工程师学习请关注我的更新~