博客作者:联系请 ,搬运不易,希望请作者喝咖啡,可以点击
前言
CentOS 7与CentOS 6之间最大的差别就是初始化技术不同,CentOS 7采用的初始化技术是Systemd,并行的运行方式,除了这一点之外,服务启动、开机启动文件、网络命令方面等等,我们一起通过这篇文章来了解一下系统初始化技术的演变过程。
Sysvinit技术
特点:
1.系统第1个进程为init;
2.init进程是所有进程的父进程,不可kill;
3.大多数Linux发行版的init系统是和SystemV相兼容的,被称为sysvinti
4.代表系统:CentOS5 CentOS6
优点:
sysvinit运行非常良好,概念简单清晰,它主要依赖于shell脚本。
缺点:
1.按照一定顺序执行---->启动太慢。
2.很容易hang住,fstab与nfs挂载问题
Upstart技术
CentOS6采用了upstart技术代替sysVinit进行引导,Upstart对rc.sysinit脚本做了大量的优化,缩短了系统初始化的启动时间,但是CentOS6为了简便管理员的操作,upstart的很多特性并没有凸显或直接不支持。
代表系统:CentOS6, Ubuntu14, 从CentOS7, Ubuntu15开始使用systemd
Systemd技术
新系统都会采用的技术(RedHat7,CentOS7,Ubuntu15等);
设计目标是克服sysvinit固有的缺点,提高系统的启动速度;
和Sysvinit兼容,降低迁移成本;
最主要优点:并行启动
pid为1的进程
三种启动技术对比:
并行启动三大原理:
1、解决socket 依赖/端口依赖 socket 网络套接字文件
2、解决D-Bus 依赖:采用了D-Bus 为程序之间的通讯工具,类似消息队列,可以缓存信息
3、解决文件系统依赖、类似autofs机制 先加载boot、swap、/ 分区,后直接启动系统,延迟启动其他guaz
下载CentOS
安装CentOS 7系统
这里为了性能考虑,采用最小化安装,虚拟机选择,磁盘空间尽量大一些
修改网卡名为eth
把光标移动到Install CentOS7,按下TAB键
空格 输入 net.ifnames=0 biosdevname=0
然后回车
选择语言
设置网络连接和主机名
选择安装的环境,选择最小化安装。
选择磁盘分区。
开始安装,安装的过程中设置root的密码。
优化CentOS 7系统
nmtui
nmtui 可提供一个文本界面配置由 NetworkManager 控制的网络, 该工具包含在 NetworkManager-tui
子软件包中,写入时,不会默认随 NetworkManager 安装该子软件包。要安装 NetworkManager-tui
,请作为 root
运行以下命令:
复制 [root@CentOS7 ~]# yum -y install NetworkManager-tui
root 用户运行下面的命令在当前会话中启动该服务:
复制 [root@CentOS7 ~]# systemctl start NetworkManager
运行 systemctl enable
命令确定每次系统引导时都启动 NetworkManager :
复制 [root@CentOS7 ~]# systemctl enable NetworkManager
启动 nmtui ,请按如下方式运行命令:
复制 [root@CentOS7 ~]# nmtui
编写时,nmtui 不支持所有连接类型,特别是无法编辑使用 WPA Enterprise 的 VPN、Wi-Fi 连接,或无法编辑使用 802.1X
的以太网连接。
修改主机名
临时 hostname
永久vim /etc/hostname
修改主机名永久和临时一步到位:hostnamectl set-hostname hezhiqiang
查看系统版本
复制 [root@hezhiqiang ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
Yum源上的优化
在CentOS6的时候,默认是从官方源下载rpm包的,由于是国外的yum源很慢不能用,CentOS7在这里做了优化,当我们使用yum安装软件的时候,默认不会再从官方下载,而是自动寻找离自己地理位置最近的yum源开始下载。
配置Yum源
复制 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
#官方epel源
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
安装常用命令
如果在安装系统的时候选择minimal,会比之前CentOS 6的时候以更小的包来安装,比如:vim、ifconfig、route、setup、netstat
等等很多命令都没有了。。在安装系统后可加入以下软件包:
复制 yum install lrzsz tree net-tools nmap vim bash-completion lsof dos2unix nc telnet ntp wget rng-tools psmisc screen -y
复制 lrzsz #支持windowns平台的上传下载linux。在windowns远程连接工具上可以使用。
net-tools #CentOS 7.2.11 默认没有ifconfig命令。net-tools提供一些网络命令。
bash-completion #自动命令补全的工具。
rng-tools #生成随机数嫡池的一个工具,有了这个工具tomcat启动会变得非常快。
psmisc #这个包含有killall命令。
screen #可以新建一个窗口,把任务放在后台运行。
字符集修改
复制 临时修改
[root@CentOS7 ~]# echo $LANGzh_CN.UTF-8
永久修改
[root@CentOS7 ~]# localectl set-locale LANG=zh_CN.UTF-8
[root@CentOS7 ~]# localectl status
System Locale: LANG=zh_CN.UTF-8
VC Keymap: us
X11 Layout: us
开机启动管理
复制 systemctl status cron.service #查看定时任务状态
systemctl stop cron.service #关闭定时任务
systemctl status cron.service #查看操作情况
systemctl list-unit-files|grep enable #查看当前开启自启的服务
systemctl disable postfix.service #关闭邮件服务
systemctl list-unit-files|grep postfix #查看邮件服务是否开启
systemctl stop firewalld.service #关闭防火墙
注意:CentOS 7中继续使用/etc/rc.d/rc.local
需要执行如下命令赋予可执行权限
复制 chmod +x /etc/rc.d/rc.local
优化Linux运行级别
企业场景面试题 :Linux的7种运行级别,及对应作用。(要牢记)
企业场景面试题 :要把Linux的运营级别从3改成5,要修改哪个文件?
答案:/etc/inittab
Linux系统7个运行级别(0:关机,停机模式、1:单用户模式、2:多用户模式、3:完整的多用户文本模式、4:系统未使用,保留一般不用、5:图形化模式、6:重启模式),运行级就是操作系统当前正在运行的功能级别。这个级别从0到6 ,具有不同的功能。
启动原理说明:
在目录/etc/rc.d/init.d下有许多服务器脚本程序,一般称为服务(service)。
在/etc/rc.d下有7个名为rcN.d的目录,对应系统的7个运行级别即(0-6)。
复制 [root@hezhiqiang ~]# cd /etc/rc.d/
[root@hezhiqiang rc.d]# ll
总用量 4
drwxr-xr-x. 2 root root 70 5月 24 22:28 init.d
drwxr-xr-x. 2 root root 45 5月 24 22:28 rc0.d
drwxr-xr-x. 2 root root 45 5月 24 22:28 rc1.d
drwxr-xr-x. 2 root root 45 5月 24 22:28 rc2.d
drwxr-xr-x. 2 root root 45 5月 24 22:28 rc3.d
drwxr-xr-x. 2 root root 45 5月 24 22:28 rc4.d
drwxr-xr-x. 2 root root 45 5月 24 22:28 rc5.d
drwxr-xr-x. 2 root root 45 5月 24 22:28 rc6.d
-rw-r--r--. 1 root root 473 10月 2 2020 rc.local
rcN.d目录下都是一些符号链接(即软链接)文件,这些链接文件都指向/etc/rc.d/init.d目录下的service脚本文件,命名规则为K+nn+服务名或S+nn+服务名,其中nn为两拉伯数字,系统启动时,会根据指定的运行级别进入对应的rcN.d目录,并按照文件名顺序检索目录下的链接文件:对于以K开头的文件,系统将终止对应的服务,对于以S开头的文件,系统将启动对应的服务。
级别具体说明:
0: 系统停机(关机)模式,系统默认运行级别不能设置为0,否则不能正常启动,一开机就自动关机。
1:单用户模式,root权限,用于系统维护,禁止远程登陆,就像Windows下的安全模式登录。
3:完整的多用户文本模式,有NFS,登陆后进入控制台命令行模式。
4:系统未使用,保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。
5:图形化模式,登陆后进入图形GUI模式或GNOME、KDE图形化界面,如X Window系统。 6:重启模式,默认运行级别不能设为
查看当前Linux运行模式:
复制 [root@hezhiqiang ~]# runlevel
N 3
注意 :输入init 0,系统会关机;输入init 6,系统会自动重启,这两个命令要非常小心! 标准的Linux运行级别为3或5,如果是3的话,系统就在多用户状态;如果是5的话,则是运行着图形化模式,不同的运行级别有不同的用处,根据自己的不同情形来设置。
设置当前运行级别:
复制 [root@hezhiqiang ~]# init 输入数字0-6,就切换到你要的模式。
init
:切换运行级别,后面接对应级别的数字,例如init 6就是重启linux服务器。
临时生效,只有五种运行级别
复制 [root@hezhiqiang ~]# ls -lh /usr/lib/systemd/system/runlevel*.target
lrwxrwxrwx. 1 root root 15 5月 24 22:28 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 5月 24 22:28 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 5月 24 22:28 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 5月 24 22:28 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 5月 24 22:28 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 5月 24 22:28 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 5月 24 22:28 /usr/lib/systemd/system/runlevel6.target -> reboot.target
Systemd 系统启动文件的目录
复制 ls /usr/lib/systemd/system
systemctl
:融合service和chkconfig的功能于一体,兼容SysV和LSB的启动脚本,而且够在进程启动过程中更有效地引导加载服务。
Sysvinit命令与Systemd命令对比
设置默认运行级别:
注意:
默认运行级别不能设置为0,否则不能正常启动,一开机就自动关机。
默认运行级别不能设为6,否则不能正常启动,就会一直开机重启开机重启。
复制 systemctl get-default # 查看当前运行级别
systemctl get-default graphical.target # 切换到5
systemctl get-default multi-user.target # 切换到3
systemctl isolate graphical.target # 在不重启的情况下,切换到图形界面下
systemctl isolate multi-user.target # 在不重启的情况下,切换到运行级别mulit-user下
CentOS 7 修改网卡名为eth0
方法一:
在进入安装界面的时候把光标移动到Install CentOS7,按下tab键,在后面输入“net.ifnames=0 biosdevname=0
”回车即可。
方法二:
进入网卡配置文件目录
复制 [root@hezhiqiang ~]# cd /etc/sysconfig/network-scripts/
重命名网卡
复制 [root@hezhiqiang network-scripts]# mv ifcfg-eno16777736 ifcfg-eth0
修改配置文件NAME、DEVICE
复制 [root@hezhiqiang network-scripts]# vim ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=eth0
UUID=552c01f7-fd9d-4f19-913e-379a2bf5a467
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.111
"ifcfg-eth0" 14L, 239C written
修改grub
GRUB是大多数Linux系统默认使用的引导程序, 可以通过启动菜单的方式选择进入不同的操作系统
复制 sed -i.bak 's#crashkernel=auto rhgb quiet#crashkernel=auto rhgb net.ifnames=0 biosdevname=0 quiet#g' /etc/sysconfig/grub
复制 [root@centos7 network-scripts]# vim /etc/sysconfig/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb net.ifnames=0 biosdevname=0 quiet"
"/etc/sysconfig/grub" 7L, 263C written
生成启动菜单
复制 [root@centos7 network-scripts]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-327.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-327.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-7ed5d4eebe4c43e3aadbda68cd0ef311
Found initrd image: /boot/initramfs-0-rescue-7ed5d4eebe4c43e3aadbda68cd0ef311.img
done
重启系统生效
复制 [root@centos7 network-scripts]# reboot
查看是否成功
centos7默认没有ifconfig
命令,需yum install net-tools -y
安装
复制 [root@centos7 ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.111 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::20c:29ff:fe57:875c prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:57:87:5c txqueuelen 1000 (Ethernet)
RX packets 39 bytes 4887 (4.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 43 bytes 7502 (7.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
SELinux 的工作模式
SELinux 提供了 3 种工作模式:Disabled、Permissive 和 Enforcing,而每种模式都为 Linux 系统安全提供了不同的好处。
Disable工作模式(关闭模式)
在 Disable 模式中,SELinux 被关闭,默认的 DAC 访问控制方式被使用。对于那些不需要增强安全性的环境来说,该模式是非常有用的。
例如,若从你的角度看正在运行的应用程序工作正常,但是却产生了大量的 SELinux AVC 拒绝消息,最终可能会填满日志文件,从而导致系统无法使用。在这种情况下,最直接的解决方法就是禁用 SELinux,当然,你也可以在应用程序所访问的文件上设置正确的安全上下文。
需要注意的是,在禁用 SELinux 之前,需要考虑一下是否可能会在系统上再次使用 SELinux,如果决定以后将其设置为 Enforcing 或 Permissive,那么当下次重启系统时,系统将会通过一个自动 SELinux 文件重新进程标记。
关闭 SELinux 的方式也很简单,只需编辑配置文件 /etc/selinux/config,并将文本中 SELINUX= 更改为 SELINUX=disabled 即可,重启系统后,SELinux 就被禁用了。
Permissive工作模式(宽容模式)
在 Permissive 模式中,SELinux 被启用,但安全策略规则并没有被强制执行。当安全策略规则应该拒绝访问时,访问仍然被允许。然而,此时会向日志文件发送一条消息,表示该访问应该被拒绝。
SELinux Permissive 模式主要用于以下几种情况:
审核当前的 SELinux 策略规则;
测试新应用程序,看看将 SELinux 策略规则应用到这些程序时会有什么效果;
解决某一特定服务或应用程序在 SELinux 下不再正常工作的故障。
某些情况下,可使用 audit2allow 命令来读取 SELinux 审核日志并生成新的 SELinux 规则,从而有选择性地允许被拒绝的行为,而这也是一种在不禁用 SELinux 的情况下,让应用程序在 Linux 系统上工作的快速方法。
Enforcing工作模式(强制模式)
Enforcing 模式, SELinux 被启动,并强制执行所有的安全策略规则。
禁用SELinux
查看SElinux状态
复制 [root@hezhiqiang ~]# getenforce
Enforcing
临时修改selinux模式为Permissive工作模式(宽容模式)
复制 [root@hezhiqiang ~]# setenforce 0
[root@hezhiqiang ~]# getenforce
Permissive
永久修改selinux模式为Disable工作模式(关闭模式)
复制 [root@hezhiqiang ~]# grep -i ^selinux /etc/selinux/config
SELINUX=enforcing
[root@hezhiqiang ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
[root@hezhiqiang ~]# grep "SELINUX=disabled" /etc/selinux/config
SELINUX=disabled
关闭防火墙
复制 systemctl stop firewalld.service
systemctl disable firewalld.service
开机时间优化
systemd-analyze time #查看系统的启动时间
systemd-analyze blame #查看系统每个服务的启动时间
systemd-analyze plot >bootime.avg #生成图形化效果,然后sz bootime.avg下载
开机启动时间
复制 [root@hezhiqiang ~]# systemd-analyze time
Startup finished in 483ms (kernel) + 1.405s (initrd) + 27.000s (userspace) = 28.889s
查看具体的使用时间
生产图表
复制 systemd-analyze plot >bootime.svg #保存到指定文件
sz bootime.svg #上传到windown查看
开机启动项优化
复制 systemctl list-unit-files|egrep "^ab|^aud|^kdump|vm|^md|^mic|^post|lvm" |awk '{print $1}'|sed -r 's#(.*)#systemctl disable &#g'|bash