咸鱼今天给大家分享一个无论是学习还是工作中都很实用的 Linux 系统初始化脚本,其实就是各种命令的集合

完整代码在文章最后哦

定义相关变量

 

配置 yum 镜像源

获取阿里云 yum 镜像源

判断函数是否执行成功

写入一行配置

修改配置

配置系统时区

配置 dns 服务器

修改最大文件描述符限制

关闭系统不需要的服务

内核参数优化相关

安装常用工具

关闭 SELinux

主函数

完整脚本

#环境变量
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH #当前时间
current_time=$(date +%Y%m%d) #阿里的DNS
dns_server=223.5.5.5 if [[ ! -z `uname -r|grep 'el6'` ]]
then
kernel_version=el6
yum_repo=http://mirrors.aliyun.com/repo/Centos-6.repo
elif [[ ! -z `uname -r|grep 'el7'` ]]
then
kernel_version=el7
yum_repo=http://mirrors.aliyun.com/repo/Centos-7.repo
else
echo -e "\e[31mUnidentified Kernel version: $(uname -r). Only support for kernel el6/el7\e[0m"
exit
fi function add_yum_repo(){
local item="Add Aliyun Yum Mirrors"
yum clean all
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.${current_time} && \
curl -o /etc/yum.repos.d/CentOS-Base.repo ${yum_repo} > /dev/null 2>&1
show_result $? "${item}"
yum makecache
} function show_result(){
if [ "$1" -eq 0 ]
then
echo -e "\e[32m$2 is Success . [ OK ] \e[0m"
else
echo -e "\e[31m$2 is Fail . [ FAIL ] \e[0m"
fi
} function add_newconfig_tofile(){
local SearchResult=`grep "$1" "$2"`
if [ -z "${SearchResult}" ]
then
echo "$1" >> $2
fi
} function add_config_tofile(){
local keywords=`echo $1| awk -F "[= ]+" '{print $1}'`
local SearchResult=`grep "^${keywords}" "$2"`
if [ -z "${SearchResult}" ] #空为真,非空为假
then
echo $1 >> $2
else
sed -i "s/^${keywords}.*/$1/" $2
fi
} function config_localtime(){
local item="Config SH As Location"
rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
show_result $? "${item}"
} function config_dns_addr(){
local item="Config DNS Address"
cp /etc/resolv.conf /etc/resolv.conf.${current_time} && \
echo "nameserver ${dns_server}" > /etc/resolv.conf
show_result $? "${item}"
} function maximum_file_dspt(){
local item="Maximum File Descriptor"
cp /etc/security/limits.conf /etc/security/limits.conf.${current_time} && \
echo "* soft nofile 100000
* hard nofile 100000
* soft nproc 65535
* hard nproc 65535
* soft core unlimited
* hard core unlimited" > /etc/security/limits.conf
show_result $? "${item}"
} function shutdown_nonuse_srv(){
local item="Shutdown Unused Services"
if [[ "${kernel_version}" == el6 ]]
then
for i in `chkconfig --list | awk '{print $1}'`
do
chkconfig --level 2345 $i off > /dev/null 2>&1
done
for ii in crond network rsyslog sshd sysstat haldaemon
do
chkconfig --level 2345 $ii on > /dev/null 2>&1
done
show_result $? "${item}"
elif [[ "${kernel_version}" == el7 ]]
then
systemctl disable postfix > /dev/null 2>&1
show_result $? "${item}"
else
echo -e "\e[31mUnidentified Kernel version: $(uname -r). Only support for kernel el6/el7\e[0m"
fi
} function optimize_kel_args(){
local item="Optimize Kernel Arguments"
cp /etc/sysctl.conf /etc/sysctl.conf.${current_time} > /dev/null 2>&1
arch_ratio=$([[ ! -z $(uname -a | grep x86_64) ]] && expr 64 / 32 || expr 32 / 32)
memory_size=$(free -b| awk 'NR==2{print $2}')
nf_conntrack_size=$(expr ${memory_size} / 16384 / ${arch_ratio})
#开启反向路径过滤
add_config_tofile "net.ipv4.conf.default.rp_filter = 1" /etc/sysctl.conf
add_config_tofile "net.ipv4.conf.all.rp_filter = 1" /etc/sysctl.conf
#处理无源路由包
add_config_tofile "net.ipv4.conf.all.accept_source_route = 0" /etc/sysctl.conf
add_config_tofile "net.ipv4.conf.default.accept_source_route = 0" /etc/sysctl.conf
#core文件名中添加pid作为扩展名
add_config_tofile "kernel.core_uses_pid = 1" /etc/sysctl.conf
#开启syn洪水攻击保护
add_config_tofile "net.ipv4.tcp_syncookies = 1" /etc/sysctl.conf
#修改消息队列长度
add_config_tofile "kernel.msgmnb = 65536" /etc/sysctl.conf
add_config_tofile "kernel.msgmax = 65536" /etc/sysctl.conf
#修改最大内存共享段大小bytes
add_config_tofile "kernel.shmmax = 68719476736" /etc/sysctl.conf
add_config_tofile "kernel.shmall = 4294967296" /etc/sysctl.conf
#timewait数量默认18000
add_config_tofile "net.ipv4.tcp_max_tw_buckets = 600" /etc/sysctl.conf
add_config_tofile "net.ipv4.tcp_sack = 1" /etc/sysctl.conf
add_config_tofile "net.ipv4.tcp_window_scaling = 1" /etc/sysctl.conf
add_config_tofile "net.ipv4.tcp_rmem = 4096 87380 16777216" /etc/sysctl.conf
add_config_tofile "net.ipv4.tcp_wmem = 4096 65536 16777216" /etc/sysctl.conf
add_config_tofile "net.core.rmem_default = 8388608" /etc/sysctl.conf
add_config_tofile "net.core.wmem_max = 16777216" /etc/sysctl.conf
#未收到客户端确认信息连接请求的最大值
add_config_tofile "net.ipv4.tcp_max_syn_backlog = 262144" /etc/sysctl.conf
#放弃建立连接之前发送的synack包
add_config_tofile "net.ipv4.tcp_syn_retries = 2" /etc/sysctl.conf
#开启重用,允许time—wait socket 重新用语新的tcp连接
add_config_tofile "net.ipv4.tcp_tw_reuse = 1" /etc/sysctl.conf
add_config_tofile "net.ipv4.tcp_fin_timeout = 1" /etc/sysctl.conf
#防止简单的ddos攻击
add_config_tofile "net.ipv4.tcp_max_orphans = 3276800" /etc/sysctl.conf
#启用timewait快速收回
add_config_tofile "net.ipv4.tcp_tw_recycle = 0" /etc/sysctl.conf
#keeptime启用时tcp发送keepalive消息的频度,默认2h
add_config_tofile "net.ipv4.tcp_keepalive_time = 600" /etc/sysctl.conf
#允许系统打开的端口范围
add_config_tofile "net.ipv4.ip_local_port_range = 1024 65535" /etc/sysctl.conf
#资源回收
add_config_tofile "net.ipv4.tcp_tw_recycle = 0" /etc/sysctl.conf
#路由转发
add_config_tofile "net.ipv4.ip_forward = 1" /etc/sysctl.conf
#修改防火墙连接跟踪表大小,默认65535
add_config_tofile "net.netfilter.nf_conntrack_max = ${nf_conntrack_size}" /etc/sysctl.conf
add_config_tofile "net.nf_conntrack_max = ${nf_conntrack_size}" /etc/sysctl.conf
#解禁ping
add_config_tofile "net.ipv4.icmp_echo_ignore_all = 0" /etc/sysctl.conf
modprobe bridge
sysctl -p > /dev/null 2>&1
show_result $? "${item}"
} function install_pkgs(){
local item="Install Common Pkgs"
yum -y groupinstall "Development libraries" > /dev/null 2>&1
yum -y groupinstall "Development tools" > /dev/null 2>&1
yum -y install sysstat tree lrzsz telnet wget net-tools tcpdump lsof vim ntp > /dev/null 2>&1
show_result $? "${item}"
} function shutdown_selinux(){
local item="Shutdown Selinux "
setenforce 0 > /dev/null 2>&1
cp /etc/selinux/config /etc/selinux/config.${current_time} && \
sed -i 's:SELINUX=enforcing:SELINUX=disabled:g' /etc/selinux/config
show_result $? "${item}"
} function main(){
echo -e '\033[34;1m开始初始化操作系统中......\033[0m'
add_yum_repo
install_pkgs
config_localtime
config_dns_addr
maximum_file_dspt
shutdown_nonuse_srv
shutdown_selinux
optimize_kel_args
echo -e '\033[34;1m服务器系统初始化已完成!\033[0m'
} main

干货!超实用的 Linux 初始化脚本的更多相关文章

  1. Linux初始化脚本

    以下脚本用于linux系统的初始化脚本,可以在服务器系统安装完毕之后立即执行.脚本结合各位大牛一些参数,已经在CentOS 5下通过. 使用方法:将其复制,保存为一个shell文件,比如init.sh ...

  2. linux系统最小化安装后的初始化脚本

    作为运维人员,经常会初始化系统,系统在安装过程中基本都会选择最小化安装,这样安装好的系统里会缺少很多环境. 下面分享一个系统安装后的初始化脚本: #!/bin/bash #系统时最小化安装的,这里要安 ...

  3. ubuntu系统安装初始化脚本

    ubuntu系统安装初始化脚本 经常安装卸载ubuntu,每次系统安装完成后要安装好多软件,一个个命令输很麻烦浪费时间,一个sh文件全搞定! 1. flashplayer下载:点击这里 2. Auda ...

  4. 浅析 Linux 初始化 init 系统,第 1 部分: sysvinit 第 2 部分: UpStart 第 3 部分: Systemd

    浅析 Linux 初始化 init 系统,第 1 部分: sysvinit  第 2 部分: UpStart 第 3 部分: Systemd http://www.ibm.com/developerw ...

  5. linux ——shell 脚本

                                                      linux—shell 脚本  精简基础                 2018/10/30 13 ...

  6. Linux链接脚本学习--lds(转)

    Linux链接脚本学习--lds 一.概论 ld: GNU的链接器. 用来把一定量的目标文件跟档案文件链接在一起,并重新定位它们的数据,链接符号引用. 一般编译一个程序时,最后一步就是运行ld进行链接 ...

  7. Linux 初始化之 Systemd机制

    systemd是Linux下的一种init软件,由Lennart Poettering带头开发,其开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降 ...

  8. LINUX SHELL脚本攻略笔记[速查]

    Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...

  9. 温故之--Linux 初始化 init 系统

    参选URL: http://www.ibm.com/developerworks/cn/linux/1407_liuming_init1/index.html 本系列一共三篇,看完记住,那水平就不一样 ...

  10. bash-1 初始化CentOS系统的初始化脚本

    初始化CentOS系统的初始化脚本 #!/bin/bash # #******************************************************************* ...

随机推荐

  1. 爬了10000张NASA关于火星探索的图片,我发现了一个秘密

    前言 最近,我使用爬虫技术,爬取了美国航空航天局,也就是你电影里经常见到的 NASA, 火星探索的相关图片,有 10000 张吧. 嗯嗯,小事情,小事情. 完事儿之后,有点小激动,于是就有了这篇文章, ...

  2. 互斥锁 线程理论 GIL全局解释器锁 死锁现象 信号量 event事件 进程池与线程池 协程实现并发

    目录 互斥锁 multiprocessing Lock类 锁的种类 线程理论 进程和线程对比 开线程的两种方式(类似进程) 方式1 使用Thread()创建线程对象 方式2 重写Thread类run方 ...

  3. 浅谈字节码增强技术系列2-Asm与Cglib

    作者:董子龙 前言 记得那是2022年秋天的第一场雨,比2021年来的稍晚一些,在那个秋雨朦胧的下午,正在工位上奋笔疾书的我突然听到了前面波哥对着手机听筒说出来的"温柔"的话语:说 ...

  4. Nmap常用方法

    1.扫描单个目标地址  在Nmap后面直接添加目标地址即可扫描  nmap 目标地址  2.扫描多个目标地址  如果目标不在同一网段,或在同一网段但不连续且数量不多,可以使用该方法进行扫描  nmap ...

  5. python之元组(tuple)知识点

    元组与列表都是容器,两个的区别在于: 1.元组使用的是小括号,列表使用的是方括号 2.元组一旦定义不可修改,而列表是可以随意变更 创建元组 元组的创建与列表大同小异,逗号在元组中充当了元组的灵魂,创建 ...

  6. js实现n秒内只能点击一次操作

    <button @click="submit">5秒内只能点一次</button>

  7. MyBatis是如何初始化的?

    摘要:我们知道MyBatis和数据库的交互有两种方式有Java API和Mapper接口两种,所以MyBatis的初始化必然也有两种:那么MyBatis是如何初始化的呢? 本文分享自华为云社区< ...

  8. 《HelloGitHub》第 81 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  9. js任务队列EventLoop

    JS 执行机制 在我们学js 的时候都知道js 是单线程的如果是多线程的话会引发一个问题在同一时间同时操作DOM 一个增加一个删除JS就不知道到底要干嘛了,所以这个语言是单线程的但是随着HTML5到来 ...

  10. [python] 基于diagrams库绘制系统架构图

    Python的Diagrams库允许通过简单的Python代码绘制云系统架构,实现对新的系统架构进行原型设计.Diagrams的官方仓库地址见:diagrams.Diagrams的官方文档和使用示例见 ...