Centos7初始优化脚本

5 篇文章 0 订阅

Centos7初始优化脚本

下载脚本

适用于虚拟机下安装Centos7-mini
https://blog.csdn.net/Memory_7s/article/details/105997879

# 下载已经写好的脚本
wget -c https://raw.githubusercontent.com/omaidb/qiaofei_notes/main/shell_code/os_int.sh && bash os_int.sh

示例代码

#!/usr/bin/env bash

# 判断Linux发行版
check_os() {
    # 如果有yum包管理器,就是rhel系统发行版
    (
        which yum || echo "不是rhel发行版" && exit 1
    ) && os=rhel
    # 获取os的版本号
    os_version=$(grep -shoE '[0-9]+' /etc/redhat-release /etc/almalinux-release /etc/rocky-release /etc/centos-release | head -1)
}

# 判断Linux版本
check_os_ver() {
    if [[ "$os" && "$os_version" -lt 7 ]]; then
        echo "使用此安装程序需要 CentOS 7 或更高版本。
此版本的 CentOS 太旧且不受支持." && exit 1
    fi
}

# 0.安装前OS环境检查
check_os_env() {
    # 先检查系统发行版
    check_os
    # 检查Linux版本号
    check_os_ver

}

# 1. 关闭防火墙和SELinux
disable_firewalld() {
    ## 永久关闭防火墙
    systemctl disable --now firewalld
    ## 注销firewalld服务
    systemctl mask firewalld
    ## 立即临时关闭SELinux
    setenforce 0
    ## 永久关闭SELinux
    sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
    ## 查看SELinux永久策略是否关闭
    eval "grep 'SELINUX=' /etc/selinux/config"
}

# 2.内核参数调整
set_kernel_config() {
    echo "
# 关闭IPV6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

# 开启内核开启数据包转发
# net.ipv4.ip_forward = 1 
# net.ipv4.conf.all.proxy_arp = 1" >>/etc/sysctl.conf && sysctl -p
}

# 3. PS1美化
set_PS1() {
    echo "
# PS1美化
export PS1='\n\e[1;37m[\e[m\e[1;32m\u\e[m\e[1;33m@\e[m\e[1;35m\H\e[m \e[4m\w\e[m\e[1;37m] \[\e[1;33m WORK\e \e[m\e[1;36m\e[m $(echo $?) \n\$'
" >/etc/profile.d/ps1.sh
}

# 3.0开启history的时间记录
config_cmd_history_time() {
    echo "
    # 保存历史命令10条
    HISTSIZE=10
    # 设置history的时间记录格式
    HISTTIMEFORMAT="%F %R "
    # 使变量全局生效
    export HISTSIZE HISTTIMEFORMAT
    # 以空格开头的命令行不记录
    export HISTCONTROL = ignorespace
    " >/etc/profile/history.sh
}

# 3.1 配置vimrc
set_vimrc() {
    echo "
set nocompatible
set cursorline
set cursorcolumn
set term=builtin_ansi
set scrolloff=7
set hlsearch
set incsearch
set autoindent
set cindent
set smartindent
set tabstop=2
set shiftwidth=2 
set softtabstop=2
set expandtab
set showmatch
set wrap
syntax on
set t_Co=256
highlight CursorLine cterm=none ctermbg=DarkMagenta ctermfg=White
highlight CursorColumn cterm=none ctermbg=DarkMagenta ctermfg=White
highlight Search cterm=reverse ctermbg=none ctermfg=none
set backspace=2
set backup 
set autowrite
set confirm
set ruler
set showmode
set showcmd
set paste
set nu
set encoding=utf-8
    " >~/.vimrc
}

# 3.2配置.bashrc
set_bashrc() {
    echo "
# 配置proxy变量
alias proxy='export all_proxy=socks5://admin:Admin123.@127.0.0.1:3389'
alias unproxy='unset all_proxy'

# 防止htop无任何输出
export TERM=xterm
    " >>/root/.bashrc
}

# 4.设置locale
set_locale_config() {
    # 安装语言包,防止出现locate错误
    yum install -y glibc-minimal-langpack glibc-locale-source glibc-langpack-zh glibc-langpack-en
    echo "
LC_ALL=zh_CN.UTF-8
LANG=zh_CN.UTF8
" >/etc/locale.conf
    # 现在生效locate
    source /etc/locale.conf
}

# 5. 优化ssh
optimization_ssh_config() {
    echo "
# ssh_config常用的参数

## 忽略第一次密钥检查
StrictHostKeyChecking no
## GSSAPI认证能优化ssh连接速度
GSSAPIAuthentication no
## 检查IP
CheckHostIP no
## 启用压缩
Compression yes
## 指定变量
SendEnv LANG zh_CN.UTF-8

# 配置1天(60秒*1440次)内ssh客户端不超时
## 服务器存活最大数值超过次1440次服务器无响应客户端会断掉
ServerAliveCountMax 1440
## 服务器存活时间间隔,60秒发送一次KeepAlive
ServerAliveInterval 60
## 发送TCP保活报文
TCPKeepAlive yes

# 重用相同的连接
ControlMaster auto
## 连接状态文件
ControlPath ~/.ssh/ssh_mux_%h_%p_%r
## 72小时内保持连接(只需要第一次输入密码)
ControlPersist 72h
" >/root/.ssh/config
}

# 6. 配置tuned自动调优
set_tunded_optimization() {
    sed -ri 's#(^dynamic_tuning).*#\1 = 1#' /etc/tuned/tuned-main.conf
    ## 查看是否修改成功
    eval "grep dynamic_tuning /etc/tuned/tuned-main.conf"
    ## 重启tuned服务
    systemctl restart tuned
    ## 使用虚拟机和低时延方案
    tuned-adm profile virtual-guest network-latency
    ## 查看当前生效的方案
    eval "tuned-adm active"
}

# 7. 禁用非必需的服务开机自启
disable_nonecessary_service() {
    # ## 创建一个不间断会话
    # screen -R NetworkManager;
    # ## 禁用network服务,启用NetworkManager服务
    # systemctl disable --now network && systemctl enable --now NetworkManager
    ## 禁用postfix服务
    systemctl disable --now postfix
    ## 注销postfix服务
    systemctl mask postfix

    # 精简开机自启动服务
    # https://blog.51cto.com/u_9625010/2385687
    ## 必须的服务启动列表
    # systemctl list-unit-files|grep enable 过滤查看启动项如下
    # abrt-ccpp.service                                enabled abrt为auto bug report的缩写 用于bug报告 关闭
    # abrt-oops.service                                enabled ----------------------
    # abrt-vmcore.service                              enabled ----------------------
    # abrt-xorg.service                                enabled ----------------------
    # abrtd.service                                      enabled   ----------------------
    # auditd.service                                   enabled 安全审计 保留
    # autovt@.service                               enabled 登陆相关 保留
    # crond.service                                          enabled 定时任务 保留
    # dbus-org.freedesktop.NetworkManager.service    enabled 桌面网卡管理 关闭
    # dbus-org.freedesktop.nm-dispatcher.service         enabled ----------------------
    # getty@.service                                enabled tty控制台相关 保留
    # irqbalance.service                          enabled 优化系统中断分配 保留
    # kdump.service                                enabled 内核崩溃信息捕获 自定
    # microcode.service                        enabled 处理器稳定性增强 保留
    # NetworkManager-dispatcher.service              enabled 网卡守护进程 关闭
    # NetworkManager.service                        enabled ----------------------
    # postfix.service                            enabled 邮件服务 关闭
    # rsyslog.service                              enabled 日志服务 保留
    # snmpd.service                                enabled snmp监控 数据抓取 保留
    # sshd.service                                  enabled ssh登陆 保留
    # systemd-readahead-collect.service             enabled 内核调用--预读取 保留
    # systemd-readahead-drop.service                enabled ----------------------
    # systemd-readahead-replay.service              enabled ----------------------
    # tuned.service                                     enabled
    # default.target                                 enabled 默认启动项 multi-user.target的软连接 保留
    # multi-user.target                             enabled 启动用户命令环境 保留
    # remote-fs.target                               enabled 集合远程文件挂载点 自定
    # runlevel2.target                              enabled 运行级别 用于兼容6的SysV 保留
    # runlevel3.target                              enabled ----------------------
    # runlevel4.target                              enabled ----------------------
    ## 除必须启动的服务外,禁用并现在停止其他服务。
    systemctl list-unit-files --state=enabled | grep -Ev "auditd.service|autovt@.service|crond.service|chronyd.service|getty@.service|irqbalance.service|microcode.service|rsyslog.service|NetworkManager.service|sshd.service|sysstat.service|systemd-readahead-collect.service|systemd-readahead-drop.service|systemd-readahead-replay.service|tuned.service|default.target|multi-user.target|runlevel2.target|runlevel3.target|runlevel4.target|wg-quick@wg0|edge|supernode.service|ocserv.service" | awk '{print "systemctl disable --now",$1}' | bash
    # 禁用后查看自启服务列表还剩哪些
    systemctl list-unit-files --state=enabled | grep enabled
}

# 8. 安装常用repo源
install_repo() {
    # 如果epel.repo文件不存在就安装epel源
    if [ -f /etc/yum.repos.d/epel.repo ] || [ -f /etc/yum.repos.d/oracle-epel-ol8.repo ]; then
        echo "本地已有epel.repo"
    else
        dnf install -y epel-release
    fi
    # 安装elrepo源
    ls /etc/yum.repo.d/elrepo.repo ||
        dnf install -y elrepo-release

    # 如果系统版本号==7,就安装SCL源和IUS源
    if $os_version -eq 7; then
        ## centos-release-scl centos-release-scl-rh是SCL源
        ## scl-utils scl-utils-build是SCL-utils工具
        yum install -y centos-release-scl centos-release-scl-rh scl-utils scl-utils-build
        # 安装IUS源(依赖依赖epel源)
        ## 导入IUS源gpg key
        rpm --import https://repo.ius.io/RPM-GPG-KEY-IUS-7

        ## 安装IUS源
        yum install -y https://repo.ius.io/ius-release-el7.rpm
    fi

    # 安装REMi源
    yum install -y http://rpms.famillecollet.com/enterprise/remi-release-"$os_version".rpm

    # 查看repolist
    yum repolist
}
# 9. 安装常用必装软件 例如:bash-completion-extras vim
install_necessary_pkg() {
    # 安装终端自动补全 pip3 dnf 虚拟机增强插件 linux核心标准
    yum install -y bash-completion bash-completion-extras python3-pip dnf open-vm-tools redhat-lsb
    ## 9.1 安装wireguard内核模块
    # yum install -y kmod-wireguard
    ### 在启动时自动加载wireguard模块
    # echo wireguard >/etc/modules-load.d/wireguard.conf
    # 安装wg-quick
    yum install -y wireguard-tools

    ## 9.2 安装常用软件
    yum install -y pv net-tools vim lrzsz curl wget tree screen socat lsof telnet tcpdump iperf3 qrencode proxychains-ng traceroute bind-utils
    yum install -y conntrack jq sysstat libseccomp git chrony

    ## 9.3 卸载不常用软件nano
    yum autoremove -y nano
}

# 10.配置xsync工具
create_xsync() {
    # 检查目录是否存在
    ls ~/bin &>/dev/null || mkdir -p ~/bin
    echo '
#!/usr/bin/env bash

# 0.依赖包检查
which rsync &>/dev/null || yum install -y rsync || apt install -y rsync
ls ~/xsync.txt &>/dev/null || touch ~/xsync.txt
# 1.判断参数个数,没有参数就会退出
## $#:获取参数个数,-lt 1:减1
if [ $# -lt 1 ]; then
    # 打印使用示例
    echo "必需有一个参数"
    echo "使用示例: xsync 目录"
    echo "意思是将指定目录同步到远程目录"
    exit
fi

# 2. 遍历所有服务器
# ******************注意:for循环这里,需要根据情况将机器列表改成相应的主机名******************

for host in $(cat ~/xsync.txt); do
    echo =======当前主机: "$host"=================
    # 3. 遍历所有目录并发送
    # $@: 获取所有参数
    echo ****************** 以列表形式显示所有的输入参数: "$@" ******************
    for file in "$@"; do
        # 4. 判断文件是否存在
        if [ -e "$file" ]; then
            # 5. 获取父目录
            pdir=$(
        cd -P $(dirname "$file") || exit
        pwd
    )
            echo ------父亲目录是: "$pdir"------
            # 6. 获取当前文件名
            fname=$(basename "$file")
            echo ----------------当前文件:"$fname"-----------
            # 在目标主机上创建父目录
            ssh "$host" "mkdir -p $pdir"
            ## -a 表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
            ## -S 将空序列变成稀疏块
            ## -H 保留硬链结
            ## -P 断点续传并打印过程,
            rsync -aSHP "$pdir"/"$fname" "$host":"$pdir" # rsync同步文件到远程目录
        else
            echo "$file" 文件不存在!
        fi
    done
done' >~/bin/xsync

    # 赋予~/bin/xsync可执行权限
    chmod +x ~/bin/xsync
}

# 11. 阻止内核更新
prevent_kernel_upgrade() {
    # 安装versionlock工具
    yum install -y 'dnf-command(versionlock)'
    yum install -y yum-plugin-versionlock
    # 备份原配置
    cp /etc/yum.conf /etc/yum.conf.bak

    # 禁止yum升级内核-可能会造成软件包的依赖问题
    yum versionlock kernel* centos-release* initscripts*

    # 添加排除的包前缀,如果过滤规则存在就不添加
    if ! grep "exclude=kernel*" /etc/yum.conf &>/dev/null; then
        # 添加禁止升级的包
        sed -i '$a exclude=kernel* centos-release* initscripts*' /etc/yum.conf
    fi
}

main() {
    # 0.安装前OS环境检查
    check_os_env
    # 1. 关闭防火墙和SELinux
    disable_firewalld
    # 2.内核参数调整
    set_kernel_config
    # 3. PS1美化
    set_PS1
    # 3.0开启history的时间记录
    config_cmd_history_time
    # 3.1 美化vim
    set_vimrc
    # 3.2 设置bashrc
    set_bashrc
    # 4.设置locale
    set_locale_config
    # 5. 优化ssh
    optimization_ssh_config
    # 6. 配置tuned自动调优
    set_tunded_optimization
    # 7. 禁用非必需的postfix服务,启用NetworkManager服务
    disable_nonecessary_service
    # 8. 安装常用repo源
    install_repo
    # 9. 安装常用必装软件
    install_necessary_pkg
    # 10 创建同步工具xsync
    create_xsync
    # 11. 阻止内核升级
    #prevent_kernel_upgrade
}

# 启动主方法
main
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CentOS是一种流行的Linux发行版,用于服务器和个人计算机。初始化通用脚本旨在自动化CentOS服务器的初始配置和设置。以下是一个示例: ```bash #!/bin/bash # 更新系统 yum update -y # 安装常用软件 yum install -y git wget unzip # 配置防火墙 systemctl enable firewalld systemctl start firewalld firewall-cmd --zone=public --add-port=80/tcp --permanent # 添加HTTP端口 firewall-cmd --reload # 设置时区 timedatectl set-timezone Asia/Shanghai # 安装和配置NTP服务 yum install -y ntp systemctl enable ntpd systemctl start ntpd # 配置SSH服务 sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config systemctl restart sshd # 配置SELinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 配置Swap空间 dd if=/dev/zero of=/swapfile bs=1M count=2048 chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo '/swapfile swap swap defaults 0 0' >> /etc/fstab # 安装常用工具 yum install -y vim htop # 完成初始化 echo "CentOS初始化完成!" ``` 这个脚本首先通过`yum update -y`命令更新系统。然后使用`yum install -y`命令安装常用软件,如git、wget和unzip。接下来,配置防火墙以允许HTTP流量通过端口80。然后设置时区并安装、启用NTP服务以同步系统时间。之后,通过修改SSH配置文件启用密码身份验证,并重启SSH服务。接着,禁用SELinux以简化安全设置。最后,分配并启用Swap空间以增加系统的内存容量。最后一步安装vim和htop等常用工具。脚本结束时会显示一条提示信息,确认CentOS初始化已完成。 使用这个通用脚本可以快速为CentOS服务器进行初始配置,节省时间和工作量,并确保系统按照一致的标准进行设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值