CentOS7是2014年7月7日发布的,与旧版本的CentOS6相比,在内核版本、系统初始化技术、yum源、服务管理、网络配置、防火墙配置等方面都有很大的不同。
CentOS7的内核版本升级到了3.10,从2.x到3.10的大版本的升级,会有很大的改动。有些在CentOS6中默认可以使用的命令,在CentOS7中可能默认就没有安装,或者被其他的命令所替代。
在CentOS6中,默认是从官方源下载rpm包的,由于是国外的yum源,所以速度比较慢。
在CentOS7中,做了优化,当我们使用yum安装软件的时候,默认不会再从官方下载,而是自动寻找离自己地理位置最近的yum源开始下载。
在CentOS6中,系统的启动采用init进程,init进程是系统启动的第一个进程,PID为1,它是所有其他进程的父进程。进程的启动方式是串行启动,只有前一个进程启动完,才会启动后一个进程,系统启动就比较慢。
而在CentOS7中,系统的启动采用systemd进程,systemd进程是系统启动的第一个进程,PID为1,它是所有其他进程的父进程。进程的启动方式是并行启动,系统启动就比较快。
在CentOS7中,systemd替代了initd,字母d是守护进程(daemon)的首字母,systemd守护进程为系统的启动和管理提供了一套完整的解决方案。
systemctl --version # 查看systemd的版本
systemd包含一组命令,涉及到系统管理的方方面面。
systemctl 是 systemd 的主命令,用于管理系统。
# 重启系统 systemctl reboot # 关闭系统,切断电源 systemctl poweroff # CPU停止工作 systemctl halt # 暂停系统 systemctl suspend # 启动进入救援状态(单用户模式) systemctl rescue
systemd-analyze 命令用于查看启动耗时。
# 查看启动耗时 systemd-analyze # 查看每个服务的启动耗时 systemd-analyze blame # 显示瀑布状的启动过程流 systemd-analyze critical-chain
hostnamectl 命令用于查看当前主机的基本信息。
hostnamectl # 查看当前主机的基本信息
localectl 命令用于查看本地化设置
# 查看本地化设置 localectl
timedatectl 命令用于查看当前的时区、时间。
# 查看当前的时区、时间 timedatectl # 显示所有可用的时区 timedatectl list-timezones
loginctl 命令用于查看当前登录的用户或连接的会话。
loginctl # 查看当前连接的会话 loginctl list-users # 查看当前登录的用户 loginctl show-user root # 查看某个登录用户的信息
CentOS7中新增了unit(单元)的概念,它是所有资源的统称。
unit总共分为12种:
Service:系统服务 Target:多个 Unit 构成的一个组 Device:硬件设备 Mount:文件系统的挂载点 Automount:自动挂载点 Path:文件或路径 Scope:不是由 Systemd 启动的外部进程 Slice:进程组 Snapshot:Systemd 快照,可以切回某个快照 Socket:进程间通信的 socket Swap:swap 文件 Timer:定时器systemctl list-units # 查看当前系统的所有unit systemctl list-units --type=service # 查看所有类型为service的unit
systemctl status # 查看当前系统中的unit状态 systemctl status sshd.service # 查看指定的sshd.service的状态 systemctl is-active sshd.service # 查看某个 Unit 是否正在运行 systemctl is-failed sshd.service # 查看某个 Unit 是否处于关闭状态 systemctl is-enabled sshd.service # 查看某个 Unit 是否开启了自启动状态
unit的管理,主要是对service(服务)的管理,如服务的启动、关闭、重启、自启动等。
在旧版本的CentOS6中,对于RPM包安装的服务的管理,主要是通过service命令和chkconfig命令来管理。如:
service network start|stop|status|restart|reload|force-reload # 网络服务的启动|关闭|状态|重启|重新加载配置文件|强制重新加载配置文件 chkconfig network on|off # 开启|关闭网络服务的自启动
在CentOS7中,对于RPM包安装的服务的管理,可以采用systemctl命令来管理,同时,向下兼容service命令和chkconfig命令。
systemctl start|stop|status|restart|reload|force-reload network # 网络服务的启动|关闭|状态|重启|重新加载配置文件|强制重新加载配置文件 systemctl enable|disable network # 开启|关闭网络服务的自启动 systemctl daemon-reload # 重载所有修改过的配置文件
每一个 unit 都有一个配置文件,告诉 systemd 怎么启动这个 unit 。
systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/中的配置文件,真正的配置文件存放在/usr/lib/systemd/system/目录中。
systemctl enable命令,用于在上面两个目录之间,建立符号链接。
systemctl disable命令,用于在上面两个目录之间,撤销符号链接。
systemctl list-unit-files # 列出所有unit的配置文件 systemctl list-unit-files --type=service # 列出所有服务的配置文件 systemctl cat network.service # 查看network服务的配置文件的内容 # 说明:末尾的.service可以省略,默认就是查看服务类型的unit。
系统启动时,需要启动大量的 unit。如果每一次启动,都要写明本次启动需要哪些 unit,显然非常不方便。于是,在CentOS7中,又引入了target的概念。
target 就是一个 unit 组,包含许多相关的 unit 。启动某个 target 的时候,systemd 就会启动里面所有的 unit。从这个意义上说,target 类似于”状态点”,启动某个 target 就好比启动到某种状态。
传统的init启动模式里面,有 runlevel (系统运行级别)的概念,跟 target 的作用很类似。不同的是,runlevel 是互斥的,不可能多个 runLevel 同时启动,但是多个 target 可以同时启动。
systemctl list-unit-files --type=target # 查看当前系统的所有target systemctl list-dependencies multi-user.target # 查看某个target包含的所有unit systemctl get-default # 查看启动时的默认target systemctl set-default multi-user.target # 设置启动时的默认target systemctl isolate multi-user.target # 切换到另一个target,同时关闭前一个target中所有不属于后一个target的进程
传统的runlevel(系统运行级别)和target的对比:
传统的运行级别 runlevel | target | 符号链接 |
---|---|---|
0 关机 | runlevel0.target | poweroff.target |
1 单用户模式(命令行界面) | runlevel1.target | rescue.target |
2 不完全的多用户模式(命令行界面) | runlevel2.target | multi-user.target |
3 完全的多用户模式(命令行界面) | runlevel3.target | multi-user.target |
4 未分配,系统保留 | runlevel4.target | multi-user.target |
5 标准的图形界面 | runlevel5.target | graphical.target |
6 重启 | runlevel6.target | reboot.target |
传统的init进程与CentOS7中的systemd进程的主要区别有两点:
设置系统默认的运行级别。 以前是在/etc/inittab文件中设置,现在是将/etc/systemd/system/default.target 文件符号链接到/lib/systemd/system/multi-user.target。 启动脚本的位置。 以前是/etc/init.d目录,符号链接到不同的 runlevel 目录 (比如/etc/rc3.d、/etc/rc4.d等),现在则存放在/lib/systemd/system和/etc/systemd/system目录。systemd 统一管理所有的 unit 的启动日志。好处是只用journalctl命令,就可查看所有日志(内核日志和应用日志)。日志的配置文件是/etc/systemd/journald.conf,默认情况下 ,只保存本次启动的日志。
journalctl # 查看所有的启动日志 journalctl -k # 查看内核日志(不显示应用日志) journalctl -b journalctl -b -0 # 只查看系统本次启动的日志 journalctl -b -1 # 查看系统上一次启动的日志(需更改设置) journalctl -n # 显示尾部的最新10行日志 journalctl -n 20 # 显示尾部的最新20行日志 journalctl /usr/lib/systemd/systemd # 查看指定服务的日志 journalctl _PID=1 # 查看指定进程的日志 journalctl /usr/bin/bash # 查看某个路径的脚本的日志 journalctl _UID=0 # 查看指定用户的日志 journalctl -u network.service # 查看指定的unit的日志 journalctl -u network.service -f # 实时滚动查看指定的unit的最新日志