shell腳本-centos7系統初始環境配置

#!/bin/sh

#Centos7.X系統環境初始化設置腳本
cat /etc/redhat-release |grep -i centos |grep '7.[[:digit:]]' &>/dev/null
if [[ $? != 0 ]]
then
    echo -e "\e[1;31m不支持的操作系統,該腳本只適用於CentOS 7.x  x86_64 操作系統\e[0m"
    exit 1
fi

#查看本機器基本信息
echo -e "\e[1;31m系統版本爲:\e[0m"
cat /etc/redhat-release|awk '{print $1,$4}'

df_t=`df -h|grep /$|awk '{print $2}'`
df_s=`df -h|grep /$|awk '{print $4}'`
echo -e "\e[1;31m當前磁盤總容量爲: $df_t,	剩餘容量爲: $df_s\e[0m"

mem_t=`free -h|grep ^Mem|awk '{print $2}'`
mem_s=`free -h|grep ^Mem|awk '{print $4}'`
echo -e "\e[1;31m當前內存總值爲: $mem_t,       空閒內存爲: $mem_s\e[0m"

physical_id=`grep "physical id" /proc/cpuinfo|uniq|wc -l`
cpuinfo=`grep ^processor /proc/cpuinfo | wc -l`
echo -e "\e[1;31m當前機器有$physical_id個cpu,$cpuinfo核心數\e[0m"

#配置yum源並安裝常用工具
echo -e "\e[1;31m現yum源爲:\e[0m"
ls /etc/yum.repos.d/
sleep 1
echo -e "\e[1;31m刪除系統自帶CentOS*源並改爲阿里源,epel源\e[0m"
rm -rf /etc/yum.repos.d/CentOS*
echo -e "\e[1;31m正在配置阿里源\e[0m"
cd /etc/yum.repos.d/
curl -o /etc/yum.repos.d/Ali.repo http://mirrors.aliyun.com/repo/Centos-7.repo &> /dev/null
if [ $? = 0 ];then
	echo -e "\e[1;31m阿里源配置完成,正在安裝wget命令\e[0m"
	yum -y install wget &> /dev/null
	echo -e "\e[1;31m wget已安裝完成,正在配置epel源\e[0m"
	wget https://mirrors.aliyun.com/repo/epel-7.repo &> /dev/null
	echo -e "\e[1;31m epel源配置完成,正在建立本地yum源緩存\e[0m"
	yum clean all    &>/dev/null
	yum makecache    &>/dev/null
	echo -e "\e[1;31m正在安裝vim、bash補全、netstat、tree、nmap、lrzsz、dos2unix、telnet、screen、lsof、ntp請稍後\e[0m"
	yum -y install vim bash-completion net-tools tree nmap lrzsz dos2unix telnet screen lsof ntp &>/dev/null
	echo -e "\e[1;31m查看時間 並設置初始化時間\e[0m"
	date +%F\ %T
	ntpdate cn.pool.ntp.org && hwclock -w
else
	echo -e "\e[1;31m阿里源配置失敗,請檢測網絡環境!\e[0m"
	exit 2
fi


echo -e "\e[1;31m設置linux的最大文件打開數\e[0m"
ulimit -SHn 65535
ulimit -a
if [ "`egrep "* - nofile 65535|* - nproc 65536" /etc/security/limits.conf|wc -l`" == "0" ];then
        echo "* - nofile 65535" >> /etc/security/limits.conf
        echo "* - nproc 65536" >> /etc/security/limits.conf
else
        echo "\e[1;31m linux最大文件打開數 設置成功或者之前已經設置過了\e[0m"
fi


#關閉防火牆,selinux,修改ssh
setenforce 0 &>/dev/null
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
systemctl stop firewalld &>/dev/null
systemctl disable firewalld &>/dev/null
echo -e "\e[1;31m防火牆,selinux均已經關閉!\e[0m"
sed -ri "s@GSSAPIAuthentication yes@GSSAPIAuthentication no\nUseDNS=no@" /etc/ssh/sshd_config
systemctl restart sshd &>/dev/null

#添加DNS地址
cat >> /etc/resolv.conf <<-OK
#阿里雲DNS
nameserver 223.5.5.5
nameserver 223.6.6.6
#百度DNS
nameserver 180.76.76.76
#騰訊DNS
nameserver 119.29.29.29 
#google DNS
nameserver 8.8.8.8
#114 DNS
nameserver 114.114.114.114
nameserver 114.114.115.115
OK

#優化內核參數
echo -e "\e[1;31m修改/etc/sysctl.conf\e[0m"
cat >> /etc/sysctl.conf <<-EOF
#禁用包過濾功能 
net.ipv4.ip_forward = 0  

#啓用源路由覈查功能 
net.ipv4.conf.default.rp_filter = 1  

#禁用所有IP源路由 
net.ipv4.conf.default.accept_source_route = 0  

#使用sysrq組合鍵是瞭解系統目前運行情況,爲安全起見設爲0關閉
kernel.sysrq = 0  

#控制core文件的文件名是否添加pid作爲擴展
kernel.core_uses_pid = 1  

#開啓SYN Cookies,當出現SYN等待隊列溢出時,啓用cookies來處理
net.ipv4.tcp_syncookies = 1  

#每個消息隊列的大小(單位:字節)限制
kernel.msgmnb = 65536  

#整個系統最大消息隊列數量限制
kernel.msgmax = 65536  

#單個共享內存段的大小(單位:字節)限制,計算公式64G*1024*1024*1024(字節)
kernel.shmmax = 68719476736  

#所有內存大小(單位:頁,1頁 = 4Kb),計算公式16G*1024*1024*1024/4KB(頁)
kernel.shmall = 4294967296 
 
#timewait的數量,默認是180000
net.ipv4.tcp_max_tw_buckets = 6000
  
#開啓有選擇的應答
net.ipv4.tcp_sack = 1  

#支持更大的TCP窗口. 如果TCP窗口最大超過65535(64K), 必須設置該數值爲1
net.ipv4.tcp_window_scaling = 1  

#TCP讀buffer
net.ipv4.tcp_rmem = 4096 131072 1048576

#TCP寫buffer
net.ipv4.tcp_wmem = 4096 131072 1048576 
  
#爲TCP socket預留用於發送緩衝的內存默認值(單位:字節)
net.core.wmem_default = 8388608

#爲TCP socket預留用於發送緩衝的內存最大值(單位:字節)
net.core.wmem_max = 16777216  

#爲TCP socket預留用於接收緩衝的內存默認值(單位:字節)  
net.core.rmem_default = 8388608

#爲TCP socket預留用於接收緩衝的內存最大值(單位:字節)
net.core.rmem_max = 16777216

#每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目
net.core.netdev_max_backlog = 262144  

#web應用中listen函數的backlog默認會給我們內核參數的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG默認爲511,所以有必要調整這個值
net.core.somaxconn = 40960  

#系統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上。這個限制僅僅是爲了防止簡單的DoS攻擊,不能過分依靠它或者人爲地減小這個值,更應該增加這個值(如果增加了內存之後)
net.ipv4.tcp_max_orphans = 3276800  

#記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有128M內存的系統而言,缺省值是1024,小內存的系統則是128
net.ipv4.tcp_max_syn_backlog = 262144  

#時間戳可以避免序列號的卷繞。一個1Gbps的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種“異常”的數據包。這裏需要將其關掉
net.ipv4.tcp_timestamps = 0  

#爲了打開對端的連接,內核需要發送一個SYN並附帶一個迴應前面一個SYN的ACK。也就是所謂三次握手中的第二次握手。這個設置決定了內核放棄連接之前發送SYN+ACK包的數量
net.ipv4.tcp_synack_retries = 1  

#在內核放棄建立連接之前發送SYN包的數量
net.ipv4.tcp_syn_retries = 1  

#開啓TCP連接中time_wait sockets的快速回收
net.ipv4.tcp_tw_recycle = 1  

#開啓TCP連接複用功能,允許將time_wait sockets重新用於新的TCP連接(主要針對time_wait連接)
net.ipv4.tcp_tw_reuse = 1  

#1st低於此值,TCP沒有內存壓力,2nd進入內存壓力階段,3rdTCP拒絕分配socket(單位:內存頁)
net.ipv4.tcp_mem = 94500000 915000000 927000000 
  
#如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。對端可以出錯並永遠不關閉連接,甚至意外當機。缺省值是60 秒。2.2 內核的通常值是180秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕載的WEB服務器,也有因爲大量的死套接字而內存溢出的風險,FIN- WAIT-2的危險性比FIN-WAIT-1要小,因爲它最多隻能喫掉1.5K內存,但是它們的生存期長些。
net.ipv4.tcp_fin_timeout = 15  

#表示當keepalive起用的時候,TCP發送keepalive消息的頻度(單位:秒)
net.ipv4.tcp_keepalive_time = 30  

#對外連接端口範圍
net.ipv4.ip_local_port_range = 2048 65000

#表示文件句柄的最大數量
fs.file-max = 102400

# 避免放大攻擊
net.ipv4.icmp_echo_ignore_broadcasts = 1

# 開啓惡意icmp錯誤消息保護
net.ipv4.icmp_ignore_bogus_error_responses = 1

# 開啓SYN洪水攻擊保護
net.ipv4.tcp_syncookies = 1

# 開啓並記錄欺騙,源路由和重定向包
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1

# 處理無源路由的包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# 開啓反向路徑過濾
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 確保無人能修改路由表
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0

# 不充當路由器
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# IPv6設置
net.ipv6.conf.default.router_solicitations = 0
net.ipv6.conf.default.accept_ra_rtr_pref = 0
net.ipv6.conf.default.accept_ra_pinfo = 0
net.ipv6.conf.default.accept_ra_defrtr = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.default.dad_transmits = 0
net.ipv6.conf.default.max_addresses = 1

# 增加系統文件描述符限制
fs.file-max = 65535

# 允許更多的PIDs (減少滾動翻轉問題); may break some programs 32768
kernel.pid_max = 65536

# 增加TCP最大緩衝區大小
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608

# 增加Linux自動調整TCP緩衝區限制
# 最小,默認和最大可使用的字節數
# 最大值不低於4MB,如果你使用非常高的BDP路徑可以設置得更高

# Tcp窗口等
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1
EOF

/sbin/sysctl -p

echo -e "\e[1;31m系統已優化完畢,請使用!\e[0m"

<yum安裝的工具>

wget :下載工具,具體用法:https://www.cnblogs.com/ftl1012/p/9265699.html

vim :  文本編輯器,https://www.runoob.com/linux/linux-vim.html

bash-completion :命令自動補全

netstat :顯示網絡狀態的命令,https://www.runoob.com/linux/linux-comm-netstat.html

tree :以樹狀圖列出目錄內容的命令,https://www.runoob.com/linux/linux-comm-tree.html

nmap :網絡安全審計工具,https://www.cnblogs.com/LyShark/p/10637507.html

lrzsz :本地與服務器互傳工具,sz filename命令發送文件到本地,rz命令上傳本地文件到服務器

dos2unix :解決win和linux換行符轉換的問題,https://www.jianshu.com/p/d2e96b2ccab9

telnet :一般用來測別的服務器端口開了沒,語法:telnet <hostname or IP> <port>

screen :命令行終端切換,https://www.jianshu.com/p/0702a451dd0c

lsof :列出當前系統打開文件的工具,https://www.jianshu.com/p/a3aa6b01b2e1

ntp :時間服務器,https://www.cnblogs.com/liushui-sky/p/9203657.html

 

內核優化內容基本照搬這篇文檔,全都有註釋:

http://www.360doc.com/showweb/0/0/906099299.aspx

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章