🙊
🙊
🙊
🙊
关于作者
搜索文档…
⌃K

CentOS 7 安装与优化

CentOS(Community Enterprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux(RHEL)依照开放源代码规定发布的源代码所编译而成,由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用,两者的不同,在于CentOS并不包含封闭源

博客作者:联系请点击,搬运不易,希望请作者喝咖啡,可以点击联系博客作者

前言

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之前,必须下载安装ISO映像,可从CentOS网站https://www.centos.org/download/获得镜像。

安装CentOS 7系统

这里为了性能考虑,采用最小化安装,虚拟机选择,磁盘空间尽量大一些

修改网卡名为eth

  1. 1.
    开机进入安装
  2. 2.
    把光标移动到Install CentOS7,按下TAB键
  3. 3.
    添加内核参数 让网卡名称变为eth
  4. 4.
    空格 输入 net.ifnames=0 biosdevname=0 然后回车

选择语言

  1. 1.
    滑动鼠标,点击中文,选择简体中文
  2. 2.
    点击继续

设置网络连接和主机名

  1. 1.
    勾选开机自启动
  2. 2.
    设置IP地址
  3. 3.
    修改主机名,点击应用
  4. 4.
    点击完成

选择安装的环境,选择最小化安装。

  1. 1.
    注意勾选依赖包
  2. 2.
    点击完成

选择磁盘分区。

  1. 1.
    选择磁盘分区
  2. 2.
    点击完成
开始安装,安装的过程中设置root的密码。

优化CentOS 7系统

nmtui

nmtui 可提供一个文本界面配置由 NetworkManager 控制的网络, 该工具包含在 NetworkManager-tui 子软件包中,写入时,不会默认随 NetworkManager 安装该子软件包。要安装 NetworkManager-tui,请作为 root 运行以下命令:
[[email protected] ~]# yum -y install NetworkManager-tui
root 用户运行下面的命令在当前会话中启动该服务:
[[email protected] ~]# systemctl start NetworkManager
运行 systemctl enable 命令确定每次系统引导时都启动 NetworkManager
[[email protected] ~]# systemctl enable NetworkManager
启动 nmtui,请按如下方式运行命令:
编写时,nmtui 不支持所有连接类型,特别是无法编辑使用 WPA Enterprise 的 VPN、Wi-Fi 连接,或无法编辑使用 802.1X 的以太网连接。

修改主机名

临时 hostname 永久vim /etc/hostname 修改主机名永久和临时一步到位:hostnamectl set-hostname hezhiqiang

查看系统版本

[[email protected] ~]# 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 #可以新建一个窗口,把任务放在后台运行。

字符集修改

vim /etc/locale.conf #字符集配置文件
localectl set-locale LANG=zh_CN.UTF-8 #命令行一步到位
临时修改
[[email protected] ~]# echo $LANGzh_CN.UTF-8
永久修改
[[email protected] ~]# localectl set-locale LANG=zh_CN.UTF-8
[[email protected] ~]# 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 ,具有不同的功能。

启动原理说明:

  1. 1.
    在目录/etc/rc.d/init.d下有许多服务器脚本程序,一般称为服务(service)。
  2. 2.
    在/etc/rc.d下有7个名为rcN.d的目录,对应系统的7个运行级别即(0-6)。
[[email protected] ~]# cd /etc/rc.d/
总用量 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下的安全模式登录。
  • 2:多用户模式,没有NFS网络支持。
  • 3:完整的多用户文本模式,有NFS,登陆后进入控制台命令行模式。
  • 4:系统未使用,保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。
  • 5:图形化模式,登陆后进入图形GUI模式或GNOME、KDE图形化界面,如X Window系统。 6:重启模式,默认运行级别不能设为
  • 6,否则不能正常启动,就会一直开机重启开机重启。

查看当前Linux运行模式:

[[email protected] ~]# runlevel
N 3
注意:输入init 0,系统会关机;输入init 6,系统会自动重启,这两个命令要非常小心! 标准的Linux运行级别为3或5,如果是3的话,系统就在多用户状态;如果是5的话,则是运行着图形化模式,不同的运行级别有不同的用处,根据自己的不同情形来设置。

设置当前运行级别:

[[email protected] ~]# init 输入数字0-6,就切换到你要的模式。
  • runlevel:查看当前系统运行级别。
  • init:切换运行级别,后面接对应级别的数字,例如init 6就是重启linux服务器。

临时生效,只有五种运行级别

[[email protected] ~]# 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

解决更换网卡后名称变更的问题,更改名称的方法,修改CentOS7网卡名称为传统名称eth0格式

方法一:

在进入安装界面的时候把光标移动到Install CentOS7,按下tab键,在后面输入“net.ifnames=0 biosdevname=0”回车即可。

方法二:

进入网卡配置文件目录

[[email protected] ~]# cd /etc/sysconfig/network-scripts/

重命名网卡

[[email protected] network-scripts]# mv ifcfg-eno16777736 ifcfg-eth0

修改配置文件NAME、DEVICE

[[email protected] 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
[[email protected] 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

生成启动菜单

[[email protected] 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

重启系统生效

[[email protected] network-scripts]# reboot

查看是否成功

centos7默认没有ifconfig命令,需yum install net-tools -y安装
[[email protected] ~]# 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状态
[[email protected] ~]# getenforce
Enforcing
临时修改selinux模式为Permissive工作模式(宽容模式)
[[email protected] ~]# setenforce 0
[[email protected] ~]# getenforce
Permissive
永久修改selinux模式为Disable工作模式(关闭模式)
[[email protected] ~]# grep -i ^selinux /etc/selinux/config
SELINUX=enforcing
[[email protected] ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
[[email protected] ~]# grep "SELINUX=disabled" /etc/selinux/config
SELINUX=disabled

关闭防火墙

CentOS 7默认使用的是firewall作为防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service

开机时间优化

  • systemd-analyze time #查看系统的启动时间
  • systemd-analyze blame #查看系统每个服务的启动时间
  • systemd-analyze plot >bootime.avg #生成图形化效果,然后sz bootime.avg下载

开机启动时间

[[email protected] ~]# systemd-analyze time
Startup finished in 483ms (kernel) + 1.405s (initrd) + 27.000s (userspace) = 28.889s

查看具体的使用时间

systemd-analyze blame

生产图表

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