• 系统优化脚本支持Ubuntu和CentOS


    系统优化脚本支持Ubuntu和CentOS

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

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

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

    84b8e06481c6cbe19c3bbe9f5fb28b20.png

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

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

    shell脚本如下

    
     
    1. #!/bin/bash
    2. os=$(cat /etc/os-release 2>/dev/null | grep ^ID= | awk -F= '{print $2}')
    3. function selinuxset(){
    4. selinux_status=$(grep -c "SELINUX=disabled" /etc/sysconfig/selinux)
    5. echo "========================禁用SELINUX========================"
    6. if [ "$selinux_status" -eq 0 ];then
    7. sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/sysconfig/selinux
    8. setenforce 0
    9. grep SELINUX=disabled /etc/sysconfig/selinux
    10. getenforce
    11. else
    12. echo 'SELINUX已处于关闭状态'
    13. grep SELINUX=disabled /etc/sysconfig/selinux
    14. getenforce
    15. fi
    16. action "完成禁用SELINUX" /bin/true
    17. echo "==========================================================="
    18. sleep 3
    19. }
    20. function firewalldset(){
    21. echo "========================关闭firewalld======================="
    22. echo '关闭防火墙'
    23. systemctl disable --now firewalld
    24. echo '验证如下'
    25. systemctl list-unit-files | grep firewalld
    26. echo '生产环境下建议启用'
    27. echo "==========================================================="
    28. sleep 3
    29. }
    30. function ufwset(){
    31. echo "========================关闭ufw============================"
    32. echo '关闭防火墙'
    33. systemctl disable --now ufw
    34. echo '验证如下'
    35. systemctl list-unit-files | grep ufw
    36. echo '生产环境下建议启用'
    37. echo "==========================================================="
    38. sleep 3
    39. }
    40. function limitsset(){
    41. echo "======================修改文件描述符========================"
    42. echo '加大系统文件描述符最大值'
    43. {
    44. echo '* soft nofile 65536'
    45. echo '* hard nofile 65536'
    46. echo '* soft nproc 65536'
    47. echo '* hard nproc 65536'
    48. } >> file
    49. echo '查看配置内容'
    50. cat /etc/security/limits.conf
    51. echo '设置软硬资源限制'
    52. ulimit -Sn ; ulimit -Hn
    53. echo "==========================================================="
    54. sleep 3
    55. }
    56. function yumset(){
    57. echo "======================开始修改YUM源========================"
    58. echo '开始修改YUM源'
    59. 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
    60. echo '开始安装常规软件'
    61. yum update -y
    62. yum install curl git wget ntpdate lsof net-tools telnet vim lrzsz tree nmap nc sysstat epel* -y
    63. echo "==========================================================="
    64. sleep 3
    65. }
    66. function aptset(){
    67. echo "======================开始修改APT源========================"
    68. echo '开始修改APT源'
    69. apt_stat=$(cat /etc/apt/sources.list | grep -v ^\# | awk -F/ '{print $3}' | grep -v ^$ | awk 'NR==1{print}')
    70. sudo sed -i "s/$apt_stat/mirrors.ustc.edu.cn/g" /etc/apt/sources.list
    71. echo '开始安装常规软件'
    72. apt update -y
    73. apt upgrade -y
    74. apt install vim htop net-tools lrzsz nmap telnet ntpdate sysstat curl git wget -y
    75. echo "==========================================================="
    76. sleep 3
    77. }
    78. function restartset(){
    79. echo "===================禁用ctrl+alt+del重启===================="
    80. rm -rf /usr/lib/systemd/system/ctrl-alt-del.target
    81. echo "完成禁用ctrl+alt+del重启"
    82. echo "==========================================================="
    83. sleep 3
    84. }
    85. function historyset(){
    86. echo "========================history优化========================"
    87. chk_his=$(cat /etc/profile | grep HISTTIMEFORMAT |wc -l)
    88. if [ $chk_his -eq 0 ];then
    89. cat >> /etc/profile <<'EOF'
    90. #设置history格式
    91. export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`whoami`] [`who am i|awk '{print $NF}'|sed -r 's#[()]##g'`]: "
    92. #记录shell执行的每一条命令
    93. export PROMPT_COMMAND='\
    94. if [ -z "$OLD_PWD" ];then
    95. export OLD_PWD=$PWD;
    96. fi;
    97. if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then
    98. logger -t `whoami`_shell_dir "[$OLD_PWD]$(history 1)";
    99. fi;
    100. export LAST_CMD="$(history 1)";
    101. export OLD_PWD=$PWD;'
    102. EOF
    103. source /etc/profile
    104. else
    105. echo "优化项已存在。"
    106. fi
    107. echo "完成history优化"
    108. echo "==========================================================="
    109. sleep 3
    110. }
    111. function helloset(){
    112. echo "========================欢迎界面优化========================"
    113. cat << EOF > /etc/profile.d/login-info.sh
    114. #!/bin/sh
    115. #
    116. # @Time : 2022-04-21
    117. # @Author : chenby
    118. # @Desc : ssh login banner
    119. export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    120. shopt -q login_shell && : || return 0
    121. echo -e "\033[0;32m
    122. # # ###### # # ####
    123. # # # # # # #
    124. ###### ##### # # # #
    125. # # # # # # #
    126. # # # # # # #
    127. # # ###### ###### ###### #### by chenby\033[0m"
    128. # os
    129. upSeconds="\$(cut -d. -f1 /proc/uptime)"
    130. secs=\$((\${upSeconds}%60))
    131. mins=\$((\${upSeconds}/60%60))
    132. hours=\$((\${upSeconds}/3600%24))
    133. days=\$((\${upSeconds}/86400))
    134. UPTIME_INFO=\$(printf "%d days, %02dh %02dm %02ds" "\$days" "\$hours" "\$mins" "\$secs")
    135. if [ -f /etc/redhat-release ] ; then
    136. PRETTY_NAME=\$(< /etc/redhat-release)
    137. elif [ -f /etc/debian_version ]; then
    138. DIST_VER=\$(
    139. PRETTY_NAME="\$(grep PRETTY_NAME /etc/os-release | sed -e 's/PRETTY_NAME=//g' -e 's/"//g') (\$DIST_VER)"
    140. else
    141. PRETTY_NAME=\$(cat /etc/*-release | grep "PRETTY_NAME" | sed -e 's/PRETTY_NAME=//g' -e 's/"//g')
    142. fi
    143. if [[ -d "/system/app/" && -d "/system/priv-app" ]]; then
    144. model="\$(getprop ro.product.brand) \$(getprop ro.product.model)"
    145. elif [[ -f /sys/devices/virtual/dmi/id/product_name ||
    146. -f /sys/devices/virtual/dmi/id/product_version ]]; then
    147. model="\$(< /sys/devices/virtual/dmi/id/product_name)"
    148. model+=" \$(< /sys/devices/virtual/dmi/id/product_version)"
    149. elif [[ -f /sys/firmware/devicetree/base/model ]]; then
    150. model="\$(< /sys/firmware/devicetree/base/model)"
    151. elif [[ -f /tmp/sysinfo/model ]]; then
    152. model="\$(< /tmp/sysinfo/model)"
    153. fi
    154. MODEL_INFO=\${model}
    155. KERNEL=\$(uname -srmo)
    156. USER_NUM=\$(who -u | wc -l)
    157. RUNNING=\$(ps ax | wc -l | tr -d " ")
    158. # disk
    159. totaldisk=\$(df -h -x devtmpfs -x tmpfs -x debugfs -x aufs -x overlay --total 2>/dev/null | tail -1)
    160. disktotal=\$(awk '{print \$2}' <<< "\${totaldisk}")
    161. diskused=\$(awk '{print \$3}' <<< "\${totaldisk}")
    162. diskusedper=\$(awk '{print \$5}' <<< "\${totaldisk}")
    163. DISK_INFO="\033[0;33m\${diskused}\033[0m of \033[1;34m\${disktotal}\033[0m disk space used (\033[0;33m\${diskusedper}\033[0m)"
    164. # cpu
    165. cpu=\$(awk -F':' '/^model name/ {print \$2}' /proc/cpuinfo | uniq | sed -e 's/^[ \t]*//')
    166. cpun=\$(grep -c '^processor' /proc/cpuinfo)
    167. cpuc=\$(grep '^cpu cores' /proc/cpuinfo | tail -1 | awk '{print \$4}')
    168. cpup=\$(grep '^physical id' /proc/cpuinfo | wc -l)
    169. CPU_INFO="\${cpu} \${cpup}P \${cpuc}C \${cpun}L"
    170. # get the load averages
    171. read one five fifteen rest < /proc/loadavg
    172. 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"
    173. # mem
    174. 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);}')"
    175. # network
    176. # extranet_ip=" and \$(curl -s ip.cip.cc)"
    177. IP_INFO="\$(ip a | grep glo | awk '{print \$2}' | head -1 | cut -f1 -d/)\${extranet_ip:-}"
    178. # Container info
    179. 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)"
    180. # info
    181. echo -e "
    182. Information as of: \033[1;34m\$(date +"%Y-%m-%d %T")\033[0m
    183. \033[0;1;31mProduct\033[0m............: \${MODEL_INFO}
    184. \033[0;1;31mOS\033[0m.................: \${PRETTY_NAME}
    185. \033[0;1;31mKernel\033[0m.............: \${KERNEL}
    186. \033[0;1;31mCPU\033[0m................: \${CPU_INFO}
    187. \033[0;1;31mHostname\033[0m...........: \033[1;34m\$(hostname)\033[0m
    188. \033[0;1;31mIP Addresses\033[0m.......: \033[1;34m\${IP_INFO}\033[0m
    189. \033[0;1;31mUptime\033[0m.............: \033[0;33m\${UPTIME_INFO}\033[0m
    190. \033[0;1;31mMemory\033[0m.............: \${MEM_INFO}
    191. \033[0;1;31mLoad Averages\033[0m......: \${LOADAVG_INFO}
    192. \033[0;1;31mDisk Usage\033[0m.........: \${DISK_INFO}
    193. \033[0;1;31mUsers online\033[0m.......: \033[1;34m\${USER_NUM}\033[0m
    194. \033[0;1;31mRunning Processes\033[0m..: \033[1;34m\${RUNNING}\033[0m
    195. \033[0;1;31mContainer Info\033[0m.....: \${CONTAINER_INFO}
    196. "
    197. EOF
    198. echo "==========================================================="
    199. sleep 3
    200. }
    201. function sshset(){
    202. echo "========================root登录优化========================"
    203. echo "生产环境不建议开启 设置root密码"
    204. read -p "输入root密码" rootpw
    205. echo "root:$rootpw" |chpasswd
    206. echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
    207. systemctl restart sshd
    208. echo "root密码修改为$rootpw"
    209. echo "==========================================================="
    210. sleep 3
    211. }
    212. function allin() {
    213. if [ "$os" = "\"centos\"" ]; then
    214. selinuxset
    215. firewalldset
    216. limitsset
    217. yumset
    218. restartset
    219. historyset
    220. helloset
    221. fi
    222. if [ "$os" = "ubuntu" ]; then
    223. sshset
    224. ufwset
    225. limitsset
    226. aptset
    227. restartset
    228. historyset
    229. helloset
    230. fi
    231. }
    232. function menu() {
    233. clear
    234. echo "#####################################################################"
    235. echo -e "# ${RED}一键基础优化脚本${PLAIN} #"
    236. echo -e "# ${GREEN}作者${PLAIN}: chenby #"
    237. echo -e "# ${GREEN}网址${PLAIN}: https://www.oiox.cn #"
    238. echo -e "# ${GREEN}版本${PLAIN}: V1.0 #"
    239. echo -e "# ${GREEN}说明${PLAIN}: #"
    240. echo -e "# #"
    241. echo "####################################################################"
    242. echo " -------------"
    243. echo -e " ${GREEN}1.${PLAIN} 一键优化"
    244. echo " -------------"
    245. echo -e " ${GREEN}2.${PLAIN} 自定义优化"
    246. echo " -------------"
    247. echo -e " ${GREEN}0.${PLAIN} 退出"
    248. echo " -------------"
    249. read -p " 请选择操作[0-2]:" chenby
    250. case $chenby in
    251. 0)
    252. exit 0
    253. ;;
    254. 1)
    255. allin
    256. ;;
    257. 2)
    258. setun
    259. ;;
    260. *)
    261. colorEcho $RED " 请选择正确的操作!"
    262. exit 1
    263. ;;
    264. esac
    265. }
    266. function setun() {
    267. echo " -------------"
    268. echo -e " ${GREEN}1.${PLAIN} 禁用SELINUX"
    269. echo " -------------"
    270. echo -e " ${GREEN}2.${PLAIN} 关闭firewalld"
    271. echo " -------------"
    272. echo -e " ${GREEN}3.${PLAIN} 关闭ufw"
    273. echo " -------------"
    274. echo -e " ${GREEN}4.${PLAIN} 修改文件描述符"
    275. echo " -------------"
    276. echo -e " ${GREEN}5.${PLAIN} 开始修改YUM源"
    277. echo " -------------"
    278. echo -e " ${GREEN}6.${PLAIN} 开始修改APT源"
    279. echo " -------------"
    280. echo -e " ${GREEN}7.${PLAIN} 禁用ctrl+alt+del重启"
    281. echo " -------------"
    282. echo -e " ${GREEN}8.${PLAIN} history优化"
    283. echo " -------------"
    284. echo -e " ${GREEN}9.${PLAIN} 欢迎界面优化"
    285. echo " -------------"
    286. echo -e " ${GREEN}10.${PLAIN} 设置root密码"
    287. echo " -------------"
    288. echo -e " ${GREEN}0.${PLAIN} 退出"
    289. echo " -------------"
    290. read -p " 请选择操作[0-2]:" cby
    291. case $cby in
    292. 0)
    293. exit 0
    294. ;;
    295. 1)
    296. if [ "$os" = "\"centos\"" ]; then
    297. selinuxset
    298. fi
    299. if [ "$os" = "ubuntu" ]; then
    300. echo 'Ubuntu无需设置'
    301. fi
    302. ;;
    303. 2)
    304. if [ "$os" = "\"centos\"" ]; then
    305. firewalldset
    306. fi
    307. if [ "$os" = "ubuntu" ]; then
    308. echo 'Ubuntu无需设置'
    309. fi
    310. ;;
    311. 3)
    312. if [ "$os" = "\"centos\"" ]; then
    313. echo 'CentOS无需设置'
    314. fi
    315. if [ "$os" = "ubuntu" ]; then
    316. ufwset
    317. fi
    318. ;;
    319. 4)
    320. limitsset
    321. ;;
    322. 5)
    323. if [ "$os" = "\"centos\"" ]; then
    324. yumset
    325. fi
    326. if [ "$os" = "ubuntu" ]; then
    327. echo 'Ubuntu无需设置'
    328. fi
    329. ;;
    330. 6)
    331. if [ "$os" = "\"centos\"" ]; then
    332. echo 'CentOS无需设置'
    333. fi
    334. if [ "$os" = "ubuntu" ]; then
    335. aptset
    336. fi
    337. ;;
    338. 7)
    339. restartset
    340. ;;
    341. 8)
    342. historyset
    343. ;;
    344. 9)
    345. helloset
    346. ;;
    347. 10)
    348. if [ "$os" = "\"centos\"" ]; then
    349. echo 'CentOS无需设置'
    350. fi
    351. if [ "$os" = "ubuntu" ]; then
    352. sshset
    353. fi
    354. ;;
    355. *)
    356. colorEcho $RED " 请选择正确的操作!"
    357. exit 1
    358. ;;
    359. esac
    360. }
    361. if [ $(id -u) -eq 0 ];then
    362. menu
    363. else
    364. echo "非root用户!请使用root用户!!!"
    365. exit 1
    366. fi

    技术交流

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

    f6372b61bb73d7e45e552f74d8fc6999.png

    关于

    https://www.oiox.cn/

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

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

    全网可搜《小陈运维》

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

  • 相关阅读:
    MySQL事务和锁
    Centos7部署django项目
    (七)笔记.net core学习之反射、加载dll、读取moudle、类、方法、特性
    【iOS-界面传值方式的比较】
    普及篇|云备份和云容灾,你用对了吗?
    Java_网络多线程
    剩余类环上可逆矩阵的计数
    hyperf框架接入pgsql扩展包
    JAVA 设计模式 单利 懒汉式进阶版
    GitHub标星65k,阿里面试核心技术手册,我不允许还有人没看过!
  • 原文地址:https://blog.csdn.net/qq_33921750/article/details/126377300