系统优化脚本支持Ubuntu和CentOS

经常会部署各种用途的操作系统,但在这些工作中,我们会发现很多工作其实是重复性的劳动,操作的内容也是大同小异,基于这类情况,我们可以把相同的操作做成统一执行的脚本,不同的东西作为变量手动输入。节约下来的时间不就可以做更多有意义的事情吗。

仓库地址:https://github.com/cby-chen/OS

后续可能会继续更新脚本,当前实现了禁用SELINUX、 关闭firewalld、关闭ufw、修改文件描述符、开始修改YUM源、开始修改APT源、禁用ctrl+alt+del重启、history优化、欢迎界面优化、设置root密码,后续可能会继续增加更多的功能。

可以通过我的一键命令执行

bash -c "$(curl -L https://www.oiox.cn/os.sh)"

shell脚本如下


#!/bin/bash
os=$(cat /etc/os-release 2>/dev/null | grep ^ID= | awk -F= '{print $2}') function selinuxset(){
selinux_status=$(grep -c "SELINUX=disabled" /etc/sysconfig/selinux)
echo "========================禁用SELINUX========================"
if [ "$selinux_status" -eq 0 ];then
sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/sysconfig/selinux
setenforce 0
grep SELINUX=disabled /etc/sysconfig/selinux
getenforce
else
echo 'SELINUX已处于关闭状态'
grep SELINUX=disabled /etc/sysconfig/selinux
getenforce
fi
action "完成禁用SELINUX" /bin/true
echo "==========================================================="
sleep 3
} function firewalldset(){
echo "========================关闭firewalld======================="
echo '关闭防火墙'
systemctl disable --now firewalld
echo '验证如下'
systemctl list-unit-files | grep firewalld
echo '生产环境下建议启用'
echo "==========================================================="
sleep 3
} function ufwset(){
echo "========================关闭ufw============================"
echo '关闭防火墙'
systemctl disable --now ufw
echo '验证如下'
systemctl list-unit-files | grep ufw
echo '生产环境下建议启用'
echo "==========================================================="
sleep 3
} function limitsset(){
echo "======================修改文件描述符========================"
echo '加大系统文件描述符最大值'
{
echo '* soft nofile 65536'
echo '* hard nofile 65536'
echo '* soft nproc 65536'
echo '* hard nproc 65536'
} >> file
echo '查看配置内容'
cat /etc/security/limits.conf
echo '设置软硬资源限制'
ulimit -Sn ; ulimit -Hn
echo "==========================================================="
sleep 3
} function yumset(){
echo "======================开始修改YUM源========================"
echo '开始修改YUM源'
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g' -i.bak /etc/yum.repos.d/CentOS-*.repo
echo '开始安装常规软件'
yum update -y
yum install curl git wget ntpdate lsof net-tools telnet vim lrzsz tree nmap nc sysstat epel* -y
echo "==========================================================="
sleep 3
} function aptset(){
echo "======================开始修改APT源========================"
echo '开始修改APT源'
apt_stat=$(cat /etc/apt/sources.list | grep -v ^\# | awk -F/ '{print $3}' | grep -v ^$ | awk 'NR==1{print}')
sudo sed -i "s/$apt_stat/mirrors.ustc.edu.cn/g" /etc/apt/sources.list
echo '开始安装常规软件'
apt update -y
apt upgrade -y
apt install vim htop net-tools lrzsz nmap telnet ntpdate sysstat curl git wget -y
echo "==========================================================="
sleep 3
} function restartset(){
echo "===================禁用ctrl+alt+del重启===================="
rm -rf /usr/lib/systemd/system/ctrl-alt-del.target
echo "完成禁用ctrl+alt+del重启"
echo "==========================================================="
sleep 3
} function historyset(){
echo "========================history优化========================"
chk_his=$(cat /etc/profile | grep HISTTIMEFORMAT |wc -l)
if [ $chk_his -eq 0 ];then
cat >> /etc/profile <<'EOF'
#设置history格式
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`whoami`] [`who am i|awk '{print $NF}'|sed -r 's#[()]##g'`]: "
#记录shell执行的每一条命令
export PROMPT_COMMAND='\
if [ -z "$OLD_PWD" ];then
export OLD_PWD=$PWD;
fi;
if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then
logger -t `whoami`_shell_dir "[$OLD_PWD]$(history 1)";
fi;
export LAST_CMD="$(history 1)";
export OLD_PWD=$PWD;'
EOF
source /etc/profile
else
echo "优化项已存在。"
fi
echo "完成history优化"
echo "==========================================================="
sleep 3
} function helloset(){
echo "========================欢迎界面优化========================"
cat << EOF > /etc/profile.d/login-info.sh
#!/bin/sh
#
# @Time : 2022-04-21
# @Author : chenby
# @Desc : ssh login banner
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
shopt -q login_shell && : || return 0
echo -e "\033[0;32m # # ###### # # ####
# # # # # # #
###### ##### # # # #
# # # # # # #
# # # # # # #
# # ###### ###### ###### #### by chenby\033[0m"
# os
upSeconds="\$(cut -d. -f1 /proc/uptime)"
secs=\$((\${upSeconds}%60))
mins=\$((\${upSeconds}/60%60))
hours=\$((\${upSeconds}/3600%24))
days=\$((\${upSeconds}/86400))
UPTIME_INFO=\$(printf "%d days, %02dh %02dm %02ds" "\$days" "\$hours" "\$mins" "\$secs")
if [ -f /etc/redhat-release ] ; then
PRETTY_NAME=\$(< /etc/redhat-release)
elif [ -f /etc/debian_version ]; then
DIST_VER=\$(</etc/debian_version)
PRETTY_NAME="\$(grep PRETTY_NAME /etc/os-release | sed -e 's/PRETTY_NAME=//g' -e 's/"//g') (\$DIST_VER)"
else
PRETTY_NAME=\$(cat /etc/*-release | grep "PRETTY_NAME" | sed -e 's/PRETTY_NAME=//g' -e 's/"//g')
fi
if [[ -d "/system/app/" && -d "/system/priv-app" ]]; then
model="\$(getprop ro.product.brand) \$(getprop ro.product.model)"
elif [[ -f /sys/devices/virtual/dmi/id/product_name ||
-f /sys/devices/virtual/dmi/id/product_version ]]; then
model="\$(< /sys/devices/virtual/dmi/id/product_name)"
model+=" \$(< /sys/devices/virtual/dmi/id/product_version)"
elif [[ -f /sys/firmware/devicetree/base/model ]]; then
model="\$(< /sys/firmware/devicetree/base/model)"
elif [[ -f /tmp/sysinfo/model ]]; then
model="\$(< /tmp/sysinfo/model)"
fi
MODEL_INFO=\${model}
KERNEL=\$(uname -srmo)
USER_NUM=\$(who -u | wc -l)
RUNNING=\$(ps ax | wc -l | tr -d " ")
# disk
totaldisk=\$(df -h -x devtmpfs -x tmpfs -x debugfs -x aufs -x overlay --total 2>/dev/null | tail -1)
disktotal=\$(awk '{print \$2}' <<< "\${totaldisk}")
diskused=\$(awk '{print \$3}' <<< "\${totaldisk}")
diskusedper=\$(awk '{print \$5}' <<< "\${totaldisk}")
DISK_INFO="\033[0;33m\${diskused}\033[0m of \033[1;34m\${disktotal}\033[0m disk space used (\033[0;33m\${diskusedper}\033[0m)"
# cpu
cpu=\$(awk -F':' '/^model name/ {print \$2}' /proc/cpuinfo | uniq | sed -e 's/^[ \t]*//')
cpun=\$(grep -c '^processor' /proc/cpuinfo)
cpuc=\$(grep '^cpu cores' /proc/cpuinfo | tail -1 | awk '{print \$4}')
cpup=\$(grep '^physical id' /proc/cpuinfo | wc -l)
CPU_INFO="\${cpu} \${cpup}P \${cpuc}C \${cpun}L"
# get the load averages
read one five fifteen rest < /proc/loadavg
LOADAVG_INFO="\033[0;33m\${one}\033[0m / \${five} / \${fifteen} with \033[1;34m\$(( cpun*cpuc ))\033[0m core(s) at \033[1;34m\$(grep '^cpu MHz' /proc/cpuinfo | tail -1 | awk '{print \$4}')\033 MHz"
# mem
MEM_INFO="\$(cat /proc/meminfo | awk '/MemTotal:/{total=\$2/1024/1024;next} /MemAvailable:/{use=total-\$2/1024/1024; printf("\033[0;33m%.2fGiB\033[0m of \033[1;34m%.2fGiB\033[0m RAM used (\033[0;33m%.2f%%\033[0m)",use,total,(use/total)*100);}')"
# network
# extranet_ip=" and \$(curl -s ip.cip.cc)"
IP_INFO="\$(ip a | grep glo | awk '{print \$2}' | head -1 | cut -f1 -d/)\${extranet_ip:-}"
# Container info
CONTAINER_INFO="\$(sudo /usr/bin/crictl ps -a -o yaml 2> /dev/null | awk '/^ state: /{gsub("CONTAINER_", "", \$NF) ++S[\$NF]}END{for(m in S) printf "%s%s:%s ",substr(m,1,1),tolower(substr(m,2)),S[m]}')Images:\$(sudo /usr/bin/crictl images -q 2> /dev/null | wc -l)"
# info
echo -e "
Information as of: \033[1;34m\$(date +"%Y-%m-%d %T")\033[0m \033[0;1;31mProduct\033[0m............: \${MODEL_INFO}
\033[0;1;31mOS\033[0m.................: \${PRETTY_NAME}
\033[0;1;31mKernel\033[0m.............: \${KERNEL}
\033[0;1;31mCPU\033[0m................: \${CPU_INFO}
\033[0;1;31mHostname\033[0m...........: \033[1;34m\$(hostname)\033[0m
\033[0;1;31mIP Addresses\033[0m.......: \033[1;34m\${IP_INFO}\033[0m
\033[0;1;31mUptime\033[0m.............: \033[0;33m\${UPTIME_INFO}\033[0m
\033[0;1;31mMemory\033[0m.............: \${MEM_INFO}
\033[0;1;31mLoad Averages\033[0m......: \${LOADAVG_INFO}
\033[0;1;31mDisk Usage\033[0m.........: \${DISK_INFO}
\033[0;1;31mUsers online\033[0m.......: \033[1;34m\${USER_NUM}\033[0m
\033[0;1;31mRunning Processes\033[0m..: \033[1;34m\${RUNNING}\033[0m
\033[0;1;31mContainer Info\033[0m.....: \${CONTAINER_INFO}
"
EOF
echo "==========================================================="
sleep 3
} function sshset(){
echo "========================root登录优化========================"
echo "生产环境不建议开启 设置root密码"
read -p "输入root密码" rootpw
echo "root:$rootpw" |chpasswd
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
systemctl restart sshd
echo "root密码修改为$rootpw"
echo "==========================================================="
sleep 3
} function allin() {
if [ "$os" = "\"centos\"" ]; then
selinuxset
firewalldset
limitsset
yumset
restartset
historyset
helloset
fi
if [ "$os" = "ubuntu" ]; then
sshset
ufwset
limitsset
aptset
restartset
historyset
helloset
fi
} function menu() {
clear
echo "#####################################################################"
echo -e "# ${RED}一键基础优化脚本${PLAIN} #"
echo -e "# ${GREEN}作者${PLAIN}: chenby #"
echo -e "# ${GREEN}网址${PLAIN}: https://www.oiox.cn #"
echo -e "# ${GREEN}版本${PLAIN}: V1.0 #"
echo -e "# ${GREEN}说明${PLAIN}: #"
echo -e "# #"
echo "####################################################################"
echo " -------------"
echo -e " ${GREEN}1.${PLAIN} 一键优化"
echo " -------------"
echo -e " ${GREEN}2.${PLAIN} 自定义优化"
echo " -------------"
echo -e " ${GREEN}0.${PLAIN} 退出"
echo " -------------" read -p " 请选择操作[0-2]:" chenby
case $chenby in
0)
exit 0
;;
1)
allin
;;
2)
setun
;;
*)
colorEcho $RED " 请选择正确的操作!"
exit 1
;;
esac
} function setun() {
echo " -------------"
echo -e " ${GREEN}1.${PLAIN} 禁用SELINUX"
echo " -------------"
echo -e " ${GREEN}2.${PLAIN} 关闭firewalld"
echo " -------------"
echo -e " ${GREEN}3.${PLAIN} 关闭ufw"
echo " -------------"
echo -e " ${GREEN}4.${PLAIN} 修改文件描述符"
echo " -------------"
echo -e " ${GREEN}5.${PLAIN} 开始修改YUM源"
echo " -------------"
echo -e " ${GREEN}6.${PLAIN} 开始修改APT源"
echo " -------------"
echo -e " ${GREEN}7.${PLAIN} 禁用ctrl+alt+del重启"
echo " -------------"
echo -e " ${GREEN}8.${PLAIN} history优化"
echo " -------------"
echo -e " ${GREEN}9.${PLAIN} 欢迎界面优化"
echo " -------------"
echo -e " ${GREEN}10.${PLAIN} 设置root密码"
echo " -------------"
echo -e " ${GREEN}0.${PLAIN} 退出"
echo " -------------" read -p " 请选择操作[0-2]:" cby
case $cby in
0)
exit 0
;;
1)
if [ "$os" = "\"centos\"" ]; then
selinuxset
fi
if [ "$os" = "ubuntu" ]; then
echo 'Ubuntu无需设置'
fi
;;
2)
if [ "$os" = "\"centos\"" ]; then
firewalldset
fi
if [ "$os" = "ubuntu" ]; then
echo 'Ubuntu无需设置'
fi
;;
3)
if [ "$os" = "\"centos\"" ]; then
echo 'CentOS无需设置'
fi
if [ "$os" = "ubuntu" ]; then
ufwset
fi
;;
4)
limitsset
;;
5)
if [ "$os" = "\"centos\"" ]; then
yumset
fi
if [ "$os" = "ubuntu" ]; then
echo 'Ubuntu无需设置'
fi
;;
6)
if [ "$os" = "\"centos\"" ]; then
echo 'CentOS无需设置'
fi
if [ "$os" = "ubuntu" ]; then
aptset
fi
;;
7)
restartset
;;
8)
historyset
;;
9)
helloset
;;
10)
if [ "$os" = "\"centos\"" ]; then
echo 'CentOS无需设置'
fi
if [ "$os" = "ubuntu" ]; then
sshset
fi
;;
*)
colorEcho $RED " 请选择正确的操作!"
exit 1
;;
esac
} if [ $(id -u) -eq 0 ];then
menu
else
echo "非root用户!请使用root用户!!!"
exit 1
fi

技术交流

可以在群里提出建议,相互交流学习



关于

https://www.oiox.cn/

https://www.oiox.cn/index.php/start-page.html

CSDN、GitHub、知乎、开源中国、思否、掘金、简书、华为云、阿里云、腾讯云、哔哩哔哩、今日头条、新浪微博、个人博客

全网可搜《小陈运维》

文章主要发布于微信公众号

系统优化脚本支持Ubuntu和CentOS的更多相关文章

  1. 如何在 Ubuntu 和 CentOS 上启用 Nginx 的 HTTP/2 协议支持

    HTTP/2 是 HTTP 网络协议的主要修订版本,其专注于 HTTP 协议的性能改进.HTTP/2 协议的目标是减少延迟,并且允许在 Web 浏览器和服务器之间的一个连接上并行发起多个请求,因此 W ...

  2. 服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS?

    来自 http://www.zhihu.com/question/19599986 服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS? 想选择一个 Linux 发行版作为服务器. ...

  3. linux centos6 系统优化脚本-经典

    转载一篇Ricky的系统优化脚本,这个脚本只能针对centos6x 其他还没有测试,但centos7肯定不行的 #!/bin/bash # ID 201510192126 # Author Ricky ...

  4. 用 runcloud.io 免费部署、优化管理你的多个VPS( 目前支持 Ubuntu 16.04 )

    使用RunCloud.io轻松实现Web部署 使用VPS.云服务器,通常会安装基本的操作系统,之后必须自己安装Apache,MySQL,PHP,尤其是服务器的性能优化,这对大多数人来说可能是非常具有挑 ...

  5. [转]Ubuntu Tweak 0.8.7 发布:支持 Ubuntu 14.04

    原文网址:http://www.oschina.net/news/51054/ubuntu-tweak-0-8-7 这是我开发 Ubuntu Tweak 七年以来第一次没在 Ubuntu 正式发布之前 ...

  6. Win7+ubuntu kylin+CentOS 6.5三系统安装图文教程

    Win7+ubuntu kylin+CentOS 6.5三系统安装图文教程 引言:原本机子上已经装好了win7+Ubuntu Kylin 由win7引导,而不是Ubuntu的grub引导的双系统(安装 ...

  7. 【实战】Docker 入门实战一:ubuntu 和 centos 安装Docker

    Docker是什么 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布 ...

  8. 硬盘安装Linux(ubuntu,centos)

    硬盘安装Linux 使用硬盘安装Linux最大的好处不只是方便,是快速.之前使用U盘安装,很慢,没有记录具体时间.Ubuntu区别不大,本身比较小,安装介质只有2G(ubuntu18.10):Cent ...

  9. ubuntu和centos安装docker

    一. UBUNTU系统上 1. 卸载旧版本(新系统不用执行) sudo apt-get remove docker docker-engine docker.io     2. 安装docker st ...

  10. ubuntu与centos系统对比

    CentOS与Ubuntu该如何选择,哪个更好用.笔者在自媒体平台收集了一些网友的观点,较为经典,分享给大家.至于应该选择哪个,希望看完本文章后,读者心中有数. 观点1:CentOS适用于服务器,Ub ...

随机推荐

  1. sscms自己从数据库筛选内容

    where条件除了SiteId和ChannelId之外, 还需要加上IsChecked='True',而不是CheckedLevel

  2. 运行不出来真的QAQ

    学C的时候最大的苦恼是编译不通过和运行不正确 学了C++之后就开始有编译过了但运行不出来的情况了TAT

  3. web.xml文件报错'org.springframework.web.filter.CharacterEncodingFilter' is not assignable to 'javax.servlet.Servlet,jakarta.servlet.Servlet'

    在web.xml文件中出现下列错误:'org.springframework.web.filter.CharacterEncodingFilter' is not assignable to 'jav ...

  4. webstrom破解

    1.下载webstrom补丁 链接:https://pan.baidu.com/s/1I93J_JOlbZzkoqV4EsJlpQ       提取码:kopn       (永久有效) 2.将补丁复 ...

  5. 《Linux就该这么学》这本书写得真好,我很喜欢。

    本书是由全国多名红帽架构师(RHCA)基于最新Linux系统共同编写的高质量Linux技术自学教程,极其适合用于Linux技术入门教程或讲课辅助教材,目前是国内最值得去读的Linux教材,也是最有价值 ...

  6. centos6放行防火墙8080端口操作

    1. 进入防火墙文件: [ vi /etc/sysconfig/iptables ] 2. 放行8080端口: [ -A RH-Firewall-1-INPUT -m state --state NE ...

  7. 基于Dijkstra算法的郑州地铁路径规划

    需要引入geopy库 pip install geopy 安装即可 import requests from bs4 import BeautifulSoup import pandas as pd ...

  8. c/s winForm框架 tabpage标签切换窗体

    /// <summary> /// 根据窗体Name打开窗体 /// </summary> /// <param name="name">< ...

  9. FFT及NTT

    FFT--快速傅里叶变换(附NTT--快速数论变换) FFT是一种能在O(nlogn)时空复杂度内求解两个函数卷积的优秀算法. 算法思想(DFT): 对于函数 \(f(x)=\Sigma_{i=0}^ ...

  10. npm & cnpm 淘宝源

    前提:如果确实需要多版本的情况可以使用nvm 可以方便的安装和切换多版本! --nvm ls --nvm use 12.4.0 永久npm 设置淘宝源npm config set registry h ...