干货!超实用的 Linux 初始化脚本
咸鱼今天给大家分享一个无论是学习还是工作中都很实用的 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 初始化脚本的更多相关文章
- Linux初始化脚本
以下脚本用于linux系统的初始化脚本,可以在服务器系统安装完毕之后立即执行.脚本结合各位大牛一些参数,已经在CentOS 5下通过. 使用方法:将其复制,保存为一个shell文件,比如init.sh ...
- linux系统最小化安装后的初始化脚本
作为运维人员,经常会初始化系统,系统在安装过程中基本都会选择最小化安装,这样安装好的系统里会缺少很多环境. 下面分享一个系统安装后的初始化脚本: #!/bin/bash #系统时最小化安装的,这里要安 ...
- ubuntu系统安装初始化脚本
ubuntu系统安装初始化脚本 经常安装卸载ubuntu,每次系统安装完成后要安装好多软件,一个个命令输很麻烦浪费时间,一个sh文件全搞定! 1. flashplayer下载:点击这里 2. Auda ...
- 浅析 Linux 初始化 init 系统,第 1 部分: sysvinit 第 2 部分: UpStart 第 3 部分: Systemd
浅析 Linux 初始化 init 系统,第 1 部分: sysvinit 第 2 部分: UpStart 第 3 部分: Systemd http://www.ibm.com/developerw ...
- linux ——shell 脚本
linux—shell 脚本 精简基础 2018/10/30 13 ...
- Linux链接脚本学习--lds(转)
Linux链接脚本学习--lds 一.概论 ld: GNU的链接器. 用来把一定量的目标文件跟档案文件链接在一起,并重新定位它们的数据,链接符号引用. 一般编译一个程序时,最后一步就是运行ld进行链接 ...
- Linux 初始化之 Systemd机制
systemd是Linux下的一种init软件,由Lennart Poettering带头开发,其开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降 ...
- LINUX SHELL脚本攻略笔记[速查]
Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...
- 温故之--Linux 初始化 init 系统
参选URL: http://www.ibm.com/developerworks/cn/linux/1407_liuming_init1/index.html 本系列一共三篇,看完记住,那水平就不一样 ...
- bash-1 初始化CentOS系统的初始化脚本
初始化CentOS系统的初始化脚本 #!/bin/bash # #******************************************************************* ...
随机推荐
- 教你几个 Java 编程中的奇技淫巧
枯燥的编程中总得有些乐趣,今天我们不谈论那些高深的技能,教你几个在编程中的奇技淫巧,说不定在某些时候还能炫耀一番呢. 1.找到最大值和最小值 不使用 if else switch 和三元运算符,在给定 ...
- dubbo2升级到dubbo3实践
dubbo当前版本 2.7.3 期望升级到 3.0.11. 升级过程 maven依赖变更 <dependency> <groupId>org.apache.dubbo</ ...
- Sqlserver分布式跨数据库查询、Join,以及分布式事务
简言: 这篇文章我要谈一谈SQL Server分布式跨服务器查询,多表Join,以及分布式事务的处理 SqlServer跨服务器查询的方式 以往自己才疏学浅,学习了一波之后,在这记录下来. 1. 使用 ...
- salesforce零基础学习(一百二十三)Transaction Security 浅入浅出
本篇参考: https://help.salesforce.com/s/articleView?id=sf.enhanced_transaction_security_policy_types.htm ...
- PyTorch复现GoogleNet学习笔记
PyTorch复现GoogleNet学习笔记 一篇简单的学习笔记,实现五类花分类,这里只介绍复现的一些细节 如果想了解更多有关网络的细节,请去看论文<Going Deeper with Conv ...
- pymysql.err.ProgrammingError: (1146, "Table 'autoplatform.webcasestepinfo' doesn't exist"
在使用jmeter调试接口时,提示pymysql.err.ProgrammingError: (1146, "Table 'autoplatform.webcasestepinfo' doe ...
- uniapp 微信小程序-点击图片放大图片
<view class="pij-cont-imgbox" v-if='item.images.length>0'> <view class="p ...
- VSCTF的Recovery
题目如下: from random import randint from base64 import b64encode def validate(password: str) -> bool ...
- Flutter异常监控 - 贰 | 框架Catcher原理分析
前言 在给 Flutter 应用做异常监控的时候,一开始我是拒绝滴,如果不考虑 Flutter Engine 和 native 侧的监控,用我另一篇文章中不得不知道的 Flutter 异常捕获知识点 ...
- [OpenCV实战]27 在OpenCV下使用forEach进行并行像素访问
目录 1 Mat像素访问 1.1 使用at方法直接进行像素访问 1.2 使用指针进行像素访问 1.3 使用forEach方法进行像素访问 1.4 将forEach与C ++ 11 Lambda一起使用 ...