1. 介绍
服务(service)本质就是进程,运行在后台,通常会监听某个端口,等待其他程序的请求,比如mysql、sshd、防火墙等,因此又称为守护进程。
2. service管理指令
service 服务名 [start | stop | restart | reload | status]
例如 service sshd status
2.1 从centos7之后,很多服务不再使用service,而是systemctl
2.2 用service指令管理的服务,可以在/etc/init.d这个文件中查看
2.3 示例
service network stop 停止network服务,这时ssh也没法使用了(建议直接在虚拟机上试,因为会断掉网络连接)
service network start 启动network服务。
3. 查看服务名
用setup指令查看所有服务
用空格键可以开启/关闭某服务自动启动。
值得注意的是setup页面最上面的三个服务就是init.d/中的三个服务,可以用service指令进行管理。其余服务只能用systemctl管理了。
4. 服务的运行级别
开机的流程说明:
开机 -> BIOS -> /boot -> systemd 进程1 -> 运行级别 -> 运行与级别相对应的服务
/etc/inittab中可以查看相关信息和指令,但这个文件已经不再被系统所使用了。
5. chkconfig 指令
通过chkconfig指令,可以给服务的各个运行级别设置自启动/关闭。
比如network服务,通过chkconfig指令指定其在0级别是自启动还是关闭,在1级别是自启动还是关闭。。。以此类推。
chkconfig指令管理的服务在/etc/init.d查看
同service指令的情况类似,从CentOS7之后,很多服务使用systemctl管理。
5.1 chkconfig查看服务
chkconfig --list
5.2 chkconfig控制某个服务在指定运行级别是自启动还是关闭
chkconfig --level 5 服务名 on/off
例如,chkconfig --level 3 network off,这条指令就是让服务network在运行级别3关闭自启动。
需要重启机器生效。
6. systemctl管理指令
systemctl [start | stop | restart | status] 服务名
由systemctl管理的服务可以在/usr/lib/systemd/system中查看
6.1 systemctl list-unit-files [grep 服务名]
这条指令可以查看服务开机启动状态,用grep可进行过滤以查看自己感兴趣的服务
6.2 systemctl enable 服务名
设置服务开机自启动,包括3和5两个运行级别
现在已经进行了简化,不需要指定服务开机自启动的运行级别,直接就是默认在3和5两个级别下。
6.3 systemctl disable 服务名
关闭服务开机自启动
6.4 systemctl is-enabled 服务名
查询某个服务是否是自启动的。
6.5 示例
ll /usr/lib/systemd/system | grep fire 查询防火墙服务的名称
systemctl list-unit-files | grep firewall 查询防火墙服务是否开机自启动
systemctl is-enabled firewalld 查询防火墙服务是否enable了开机自启动,注意服务名可以写firewalld也可以写全firewalld.service,但是不能写firew这样的。
systemctl status firewalld 查询当前防火墙服务的运行情况
注意,systemctl stop firewalld只是临时关闭了防火墙服务,重启系统后,firewalld会再次随开机自启动。如果你想让防火墙服务不再随开机自启动,需要systemctl disable firewalld。
7. 打开或关闭指定端口
如果你想开启防火墙,又想通过网络访问某个端口呢(正确的想法),那么就用防火墙服务开启这个你希望访问的端口。
打开端口:firewall-cmd --permanent --add-port=端口号/协议
关闭端口:firewall-cmd --permanent --remove-port=端口号/协议
注:协议可以使用netstat -anp | more查询
不论打开还是关闭端口,必须重新载入防火墙才可以生效设置,firewall-cmd --reload
查询端口是否开放:firewall-cmd --query-port=协议/端口号
示例:
启动防火墙,测试111端口能否telnet访问,发现不行。telnet 192.168.xxx.x 111
打开111端口
firewall-cmd --query-port=111/tcp 返回no,说明这个端口目前是关闭状态
firewall-cmd --permanent --add-port=111/tcp
firewall-cmd --reload
再次查询,返回yes,说明这个端口已经被打开,这样就可以访问111端口了
关闭111端口
firewall-cmd --permanent -remove-port=111/tcp
firewall-cmd --reload
再次查询,发现这个端口已经关闭了。