CentOS系统简易优化脚本20 min read

  • A+
所属分类:Shell

  

  1. #!/bin/bash  
  2.   
  3. [ -f /etc/profile ] && source /etc/profile  
  4. [ -f /etc/init.d/functions ] && source /etc/init.d/functions  
  5.   
  6. function Inspect(){  
  7. # NO_1:检查是否root用户  
  8.     if [[ "$(whoami)" != "root" ]]; then  
  9.         echo "please run this script as root !" >&2  
  10.         exit 1  
  11.     fi  
  12.   
  13. # No_2: 检查系统是否为64位系统,不是就退出  
  14.     platform=`uname -i`  
  15.     if [ $platform != "x86_64" ];then  
  16.         echo "this script is only for 64bit Operating System !"  
  17.         exit 1  
  18.     fi  
  19.   
  20. # NO_3: 检查系统是否是CentOS7  
  21. ##Explain: Custom version '6' or '7'  
  22.     distributor=`cat /etc/redhat-release|awk '{print $1}'`  
  23.     VERSION=`cat /etc/redhat-release`  
  24.     if [ $distributor != 'CentOS' ]; then  
  25.         echo "this script is only for {distributor}_{CV} series"  
  26.         exit 1  
  27.     fi  
  28.   
  29. cat << EOF  
  30.   
  31.    your system Version information: ${VERSION}          
  32.    start optimizing...  
  33.   
  34. EOF  
  35. }  
  36.   
  37. function Choice_6_7(){  
  38. # No.4:确认输入Y或者N  
  39. yn="1"  
  40. cat <<EOF  
  41. `echo -e "\033[32m Please select CentOS6 or CentOS7 ?  \033[0m"`  
  42. `echo -e "\033[32m     1: CentOS.6.x  \033[0m"`  
  43. `echo -e "\033[32m     2: CentOS.7.x  \033[0m"`  
  44.   
  45. EOF  
  46.   
  47.     echo -n "please input [1\2]: "  
  48.     read yn    
  49.     if [ "yn" != "1" -a "yn" != "2" ]; then  
  50.         echo "bye-bye!"  
  51.         exit 0  
  52.       else  
  53.         if [ $yn -eq 1 ];then  
  54.             main_6  
  55.           else  
  56.             main_7  
  57.         fi  
  58.     fi  
  59. }  
  60.   
  61. function Count_down(){  
  62. # No.5:倒计时  
  63.     for i in `seq -w 3 -1 1`  
  64.       do  
  65.         echo -ne "\b___${i}";  
  66.         sleep 1;  
  67.     done   
  68.     echo -e "\b Good Luck ^_^!"  
  69.     echo   
  70. }  
  71.   
  72. #=============优化开始==================  
  73.   
  74. # 1: instll repo  
  75. function CentOS6_repo(){  
  76.     if [ ! -e "/etc/yum.repos.d/bak" ]; then  
  77.         mkdir /etc/yum.repos.d/bak  
  78.         mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/bak/CentOS-Base.repo.backup  
  79.     fi  
  80.   
  81.     wget -q -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo  
  82.     wget -q -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo  
  83.     yum clean all >/dev/null 2>&1  
  84.     yum makecache >/dev/null 2>&1  
  85.     echo -e "\033[31m install CentOS6.x repo OK! \033[0m"  
  86. }  
  87.   
  88. function CentOS7_repo(){  
  89.     if [ ! -e "/etc/yum.repos.d/bak" ]; then  
  90.         mkdir /etc/yum.repos.d/bak  
  91.         mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/bak/CentOS-Base.repo.backup  
  92.     fi  
  93.     wget -q -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  
  94.     wget -q -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo  
  95.     yum clean all >/dev/null 2>&1  
  96.     yum makecache >/dev/null 2>&1  
  97.     echo -e "\033[31m install CentOS7.x repo OK! \033[0m"  
  98. }  
  99.   
  100. # 2: 安装必要的软件包  
  101. function Install_Soft(){  
  102.     yum -y install tree nmap sysstat lrzsz dos2unix telnet &>/dev/null  
  103.     yum -y install ntpdate &>/dev/null  
  104.     yum -y install openssl openssh bash &>/dev/null  
  105.     yum -y install bash-comp* &>/dev/null  
  106.     echo -e "\033[31m Soft install Ok! \033[0m"  
  107. }  
  108.   
  109. # 3: 关闭SELinux  
  110. function SELinux(){  
  111.     sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config  
  112.     setenforce 0 &>/dev/null  
  113.     echo -e "\033[31m SELinux stop ok \033[0m"  
  114. }  
  115.   
  116. # 4: 设置系统运行级别  
  117. function CentOS6_init(){  
  118.     INIT=`grep '^id:3:initdefault:$' /etc/inittab|wc -l`  
  119.       if [ $INIT -ne 1 ];then  
  120.         echo "id:3:initdefault:" >>/etc/inittab  
  121.       fi  
  122.     echo -e "\033[31m Runlevel 3 Ok! \033[0m"  
  123. }  
  124.   
  125. # 5: 精简开机启动项  
  126. function C6_start_item(){  
  127.     chkconfig --list|grep "3:on"|grep -vE "sshd|crond|network|rsyslog|sysstat"|awk '{print $1}'|sed -r  's#^(.*)#chkconfig \1 off#g'|bash  
  128.     echo -e "\033[31m Stop CentOS_6 Useless service Ok! \033[0m"  
  129. }  
  130.   
  131. function C7_start_item(){  
  132.     #stop firewalld  
  133.     systemctl stop firewalld  
  134.     systemctl disable firewalld &>/dev/null  
  135.     #systemctl stop postfix  
  136.     #systemctl disable postfix  
  137.     echo -e "\033[31m Stop CentOS_7 Useless service Ok! \033[0m"  
  138. }  
  139.   
  140. # 6: 更改SSH配置文件  
  141. function C6_ssh(){  
  142. if [ -f /etc/ssh/sshd_config ];then  
  143. cat >>/etc/ssh/sshd_config <<EOF  
  144. Port 22  
  145. PermitEmptyPasswords no  
  146. UseDNS no  
  147. GSSAPIAuthentication no  
  148. LoginGraceTime 3m  
  149. #PermitRootLogin no  
  150. #ListenAddress 172.16.1.41  
  151. EOF  
  152. fi  
  153. /etc/init.d/sshd restart >/dev/null 2>&1  
  154. echo -e "\033[31m Configure sshd Ok! \033[0m"  
  155. }  
  156.   
  157. function C7_ssh(){  
  158. if [ -f /etc/ssh/sshd_config ];then  
  159. cat >>/etc/ssh/sshd_config <<EOF  
  160. Port 22  
  161. PermitEmptyPasswords no  
  162. UseDNS no  
  163. GSSAPIAuthentication no  
  164. LoginGraceTime 3m  
  165. #PermitRootLogin no  
  166. #ListenAddress 172.16.1.41  
  167. EOF  
  168. fi  
  169. systemctl restart sshd  
  170. echo -e "\033[31m Configure sshd Ok! \033[0m"  
  171. }  
  172.   
  173. # 7: 字符集设置  
  174. function C6_UTF(){  
  175.     if [ -f /etc/sysconfig/i18n ];then  
  176.         LANG="en_US.UTF-8"  
  177.         echo 'LANG="en_US.UTF-8"'>/etc/sysconfig/i18n  
  178.         echo -e "\033[31m Character set to UTF-8 \033[0m"  
  179.       else  
  180.         echo "/etc/sysconfig/i18n No file! false"  
  181.     fi  
  182. }  
  183.   
  184. function C7_UTF(){  
  185.     if [ -f /etc/locale.conf ];then  
  186.         LANG="en_US.UTF-8"  
  187.         echo 'LANG="en_US.UTF-8"' >/etc/locale.conf  
  188.       fi  
  189.     echo -e "\033[31m Character set to UTF-8 \033[0m"  
  190. }  
  191.   
  192. # 8: 设置时间同步  
  193. function NTPdate(){  
  194.     /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1  
  195.     echo "#Time synchronization system-`date +%F`" >/var/spool/cron/root  
  196.     echo '*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' >>/var/spool/cron/root  
  197.     date  
  198.     echo -e "\033[31m ntpdate Ok! \033[0m"  
  199. }  
  200.   
  201. # 9: 调整Linux系统文件描述符数量  
  202. function Ulimit(){  
  203.     sed -i "/^ulimit -SHn.*/d" /etc/rc.local  
  204.     sed -i "/^ulimit -s.*/d" /etc/profile  
  205.     sed -i "/^ulimit -c.*/d" /etc/profile  
  206.     sed -i "/^ulimit -SHn.*/d" /etc/profile  
  207.   
  208. if [ -f /etc/security/limits.conf ];then  
  209.     cp -a /etc/security/limits.conf /etc/security/limits.conf.`date +%F`.bak  
  210. cat >> /etc/security/limits.conf <<EOF  
  211.   
  212. #-- File descriptor number adjustment --------  
  213. *                -       nofile          65535  
  214. EOF  
  215. fi  
  216. echo -e "\033[31m limits Ok! \033[0m"  
  217. }  
  218.   
  219. # 10: Linux服务器内核参数优化  
  220. function Sysctl(){  
  221.     if [ ! -f /etc/sysctl.conf.`date +%F`.bak ];then  
  222.         cp -a /etc/sysctl.conf /etc/sysctl.conf.`date +%F`.bak  
  223.     fi  
  224.     sed -i "/^net.ipv4.tcp_fin_timeout/d" /etc/sysctl.conf  
  225.     sed -i "/^net.ipv4.tcp_tw_reuse/d" /etc/sysctl.conf  
  226.     sed -i "/^net.ipv4.tcp_tw_recycle/d" /etc/sysctl.conf  
  227.     sed -i "/^net.ipv4.tcp_syncookies/d" /etc/sysctl.conf  
  228.     sed -i "/^net.ipv4.tcp_keepalive_time/d" /etc/sysctl.conf  
  229.     sed -i "/^net.ipv4.ip_local_port_range/d" /etc/sysctl.conf  
  230.     sed -i "/^net.ipv4.tcp_max_syn_backlog/d" /etc/sysctl.conf  
  231.     sed -i "/^net.ipv4.tcp_max_tw_buckets/d" /etc/sysctl.conf  
  232.     sed -i "/^net.ipv4.route.gc_timeout/d" /etc/sysctl.conf  
  233.     sed -i "/^net.ipv4.tcp_syn_retries/d" /etc/sysctl.conf  
  234.     sed -i "/^net.ipv4.tcp_synack_retries/d" /etc/sysctl.conf  
  235.     sed -i "/^net.core.somaxconn/d" /etc/sysctl.conf  
  236.     sed -i "/^net.core.netdev_max_backlog/d" /etc/sysctl.conf  
  237.     sed -i "/^net.ipv4.tcp_max_orphans/d" /etc/sysctl.conf  
  238.   
  239. #add  
  240. cat >> /etc/sysctl.conf <<EOF  
  241.   
  242. #-----------Kernel optimization--------  
  243. net.ipv4.tcp_fin_timeout = 2  
  244. net.ipv4.tcp_tw_reuse = 1  
  245. net.ipv4.tcp_tw_recycle = 1  
  246. net.ipv4.tcp_syncookies = 1  
  247. net.ipv4.tcp_keepalive_time = 600  
  248. net.ipv4.ip_local_port_range = 4000    65000  
  249. net.ipv4.tcp_max_syn_backlog = 16384  
  250. net.ipv4.tcp_max_tw_buckets = 36000  
  251. net.ipv4.route.gc_timeout = 100  
  252. net.ipv4.tcp_syn_retries = 1  
  253. net.ipv4.tcp_synack_retries = 1  
  254. net.core.somaxconn = 16384  
  255. net.core.netdev_max_backlog = 16384  
  256. net.ipv4.tcp_max_orphans = 16384  
  257. EOF  
  258.   
  259.     #delete  
  260.     sed -i "/^kernel.shmmax/d" /etc/sysctl.conf  
  261.     sed -i "/^kernel.shmall/d" /etc/sysctl.conf  
  262.   
  263.     #add  
  264.     shmmax=`free -l |grep Mem |awk '{printf("%d\n",$2*1024*0.9)}'`  
  265.     shmall=[shmmax/4]  
  266.     echo "kernel.shmmax = "$shmmax >> /etc/sysctl.conf  
  267.     echo "kernel.shmall = "$shmall >> /etc/sysctl.conf  
  268.     sysctl -p >/dev/null 2>&1  
  269.     echo -e "\033[31m Kernel optimization Ok! \033[0m"  
  270. }  
  271.   
  272. # 11: 定时清理邮件目录的垃圾文件  
  273. function Rm_mail(){  
  274. if [ -d /var/spool/clientmqueue/ ];then  
  275.   find /var/spool/clientmqueue/ -type f|xargs rm -f  
  276.   mkdir -p /var/spool/scripts/  
  277. cat >/var/spool/scripts/Dtm.sh <<EOF  
  278. #!/bin/bash  
  279. #Explain: Delete temporary mail  
  280. find /var/spool/clientmqueue/ -type f|xargs rm -f  
  281. EOF  
  282.   
  283. echo ' ' >>/var/spool/cron/root  
  284. echo '#Delete temporary mail' >>/var/spool/cron/root  
  285. echo '/bin/sh /var/spool/scripts/Dtm.sh >/dev/null 2>&1' >>/var/spool/cron/root  
  286. fi  
  287.   
  288. if [ -d /var/spool/postfix/maildrop/ ];then  
  289.   find /var/spool/postfix/maildrop/ -type f|xargs rm -f  
  290.   mkdir -p /var/spool/scripts/  
  291. cat >/var/spool/scripts/Dtm02.sh <<EOF  
  292. #!/bin/bash  
  293. #Explain: Delete temporary mail  
  294. find /var/spool/postfix/maildrop/ -type f|xargs rm -f  
  295. EOF  
  296.   
  297. echo ' ' >>/var/spool/cron/root  
  298. echo "#Delete temporary mail" >>/var/spool/cron/root  
  299. echo '/bin/sh /var/spool/scripts/Dtm02.sh >/dev/null 2>&1' >>/var/spool/cron/root  
  300. fi  
  301. echo -e "\033[31m Spam mail clearance Ok! \033[0m"  
  302. }  
  303.   
  304. # 12: 隐藏Linux版本信息显示  
  305. function RM_Versioninfo(){  
  306.     if [ -f /etc/issue ];then  
  307.         >/etc/issue  
  308.     fi  
  309.   
  310.     if [ -f /etc/issue.net ];then  
  311.         >/etc/issue.net  
  312.     fi  
  313.     echo -e "\033[31m Version information delete Ok! \033[0m"  
  314. }  
  315.   
  316. # 13: hosts config  
  317. function Hosts(){  
  318. cat >>/etc/hosts <<EOF  
  319. `hostname -I`  `hostname`  
  320. EOF  
  321. }  
  322.   
  323. function done_ok(){  
  324. cat << EOF  
  325.   
  326. +------------------------------------------------------------------------+  
  327.                         optimizer is done   
  328.  Congratulations on your system optimization complete  
  329.                E-mail:1097857032@qq.com   
  330.                
  331.              System reboot ount down 10s                 
  332. +------------------------------------------------------------------------+  
  333.   
  334. EOF  
  335. }  
  336.   
  337. function REBOOT(){  
  338. for i in `seq -w 9 -1 0`  
  339.   do  
  340.     echo -ne "\b__$i";  
  341.     sleep 1;  
  342. done   
  343. echo -e "\b system reboor..."  
  344. sleep 1  
  345. reboot &>/dev/nill  
  346. }  
  347.   
  348. function main_6(){  
  349.     Count_down  
  350.     CentOS6_repo  
  351.     Install_Soft  
  352.     SELinux  
  353.     CentOS6_init  
  354.     C6_start_item  
  355.     C6_ssh  
  356.     C6_UTF  
  357.     NTPdate  
  358.     Ulimit  
  359.     Sysctl  
  360.     Rm_mail  
  361.     RM_Versioninfo  
  362.     Hosts  
  363.     done_ok  
  364.     REBOOT  
  365. }  
  366.   
  367. function main_7(){  
  368.     Count_down  
  369.     CentOS7_repo  
  370.     Install_Soft  
  371.     SELinux  
  372.     C7_start_item  
  373.     C7_ssh  
  374.     C7_UTF  
  375.     NTPdate  
  376.     Ulimit  
  377.     Sysctl  
  378.     Rm_mail  
  379.     RM_Versioninfo  
  380.     Hosts  
  381.     done_ok  
  382.     REBOOT  
  383. }  
  384.   
  385. function main(){  
  386.     Inspect  
  387.     Choice_6_7  
  388. }  
  389. main  
  390. exit 0  

  

zhaoyulin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: