ecs服务器shell常用脚本练习(四)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 【4月更文挑战第4天】shell代码训练(四)

个人积累的一些shell脚本结合书本知识总结,精简学习直接代码,可以复制粘贴直接用

1. 统计当前Linux 系统中可以登录计算机的账户有多少个

#!/bin/bash

#方法1:

grep "bash$" /etc/passwd | wc ‐l

#方法2:

awk ‐f: '/bash$/{x++}end{print x}' /etc/passwd

2. 统计/var/log 有多少个文件,并显示这些文件名

#!/bin/bash

#使用ls 递归显示所有,再判断是否为文件,如果是文件则计数器加1

cd /var/log

sum=0

for i in `ls ‐r *`

do

if [ ‐f $i ];then

let sum++

echo "文件名:$i"

fi

done

echo "总文件数量为:$sum"

3. 自动为其他脚本添加解释器信息#!/bin/bash,如脚本名为test.sh 则效果如下:

#./test.sh abc.sh 自动为abc.sh 添加解释器信息

#./test.sh user.sh 自动为user.sh 添加解释器信息

#!/bin/bash

#先使用grep 判断对象脚本是否已经有解释器信息,如果没有则使用sed 添加解释器以及描述信息

if ! grep ‐q "^#!" $1; then

sed '1i #!/bin/bash' $1

sed '2i #Description: '

fi

#因为每个脚本的功能不同,作用不同,所以在给对象脚本添加完解释器信息,以及Description 后还希望

#继续编辑具体的脚本功能的描述信息,这里直接使用vim 把对象脚本打开,并且光标跳转到该文件的第2 行

vim +2 $1

4. 自动化部署varnish 源码包软件

#本脚本需要提前下载varnish‐3.0.6.tar.gz 这样一个源码包软件,该脚本即可用自动源码安装部署软件

yum ‐y install gcc readline‐devel pcre‐devel

useradd ‐s /sbin/nologin varnish

tar ‐xf varnish‐3.0.6.tar.gz

cd varnish‐3.0.6

#使用configure,make,make install 源码安装软件包

./configure ‐‐prefix=/usr/local/varnish

make && make install

#在源码包目录下,将相应的配置文件拷贝到Linux 系统文件系统中

#默认安装完成后,不会自动拷贝或安装配置文件到Linux 系统,所以需要手动cp 复制配置文件

#并使用uuidgen 生成一个随机密钥的配置文件

cp redhat/varnish.initrc /etc/init.d/varnish

cp redhat/varnish.sysconfig /etc/sysconfig/varnish

cp redhat/varnish_reload_vcl /usr/bin/

ln ‐s /usr/local/varnish/sbin/varnishd /usr/sbin/

ln ‐s /usr/local/varnish/bin/* /usr/bin

mkdir /etc/varnish

cp /usr/local/varnish/etc/varnish/default.vcl /etc/varnish/

uuidgen > /etc/varnish/secret

5. 编写nginx 启动脚本

#本脚本编写完成后,放置在/etc/init.d/目录下,就可以被Linux 系统自动识别到该脚本

#如果本脚本名为/etc/init.d/nginx,则service nginx start 就可以启动该服务

#service nginx stop 就可以关闭服务

#service nginx restart 可以重启服务

#service nginx status 可以查看服务状态

program=/usr/local/nginx/sbin/nginx

pid=/usr/local/nginx/logs/nginx.pid

start(){

if [ ‐f $pid ];then

echo "nginx 服务已经处于开启状态"

else

$program

fi

stop(){

if [ ‐! ‐f $pid ];then

echo "nginx 服务已经关闭"

else

$program ‐s stop

echo "关闭服务ok"

fi

}

status(){

if [ ‐f $pid ];then

echo "服务正在运行…"

else

echo "服务已经关闭"

fi

}

case $1 in

start)

start;;

stop)

stop;;

restart)

stop

sleep 1

start;;

status)

status;;

*)

echo "你输入的语法格式错误"

esac

6. 自动对磁盘分区、格式化、挂载

#对虚拟机的vdb 磁盘进行分区格式化,使用<<将需要的分区指令导入给程序fdisk

#n(新建分区),p(创建主分区),1(分区编号为1),两个空白行(两个回车,相当于将整个磁盘分一个区)

#注意:1 后面的两个回车(空白行)是必须的!

fdisk /dev/vdb << EOF

n

p

1

wq

EOF

#格式化刚刚创建好的分区

mkfs.xfs /dev/vdb1

#创建挂载点目录

if [ ‐e /data ]; then

exit

fi

mkdir /data

#自动挂载刚刚创建的分区,并设置开机自动挂载该分区

echo '/dev/vdb1 /data xfs defaults 1 2' >> /etc/fstab

mount ‐a

7. 自动优化Linux 内核参数

#!/bin/bash

#脚本针对RHEL7

cat >> /usr/lib/sysctl.d/00‐system.conf <

fs.file‐max=65535

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_synack_retries = 5

net.ipv4.tcp_syn_retries = 5

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_fin_timeout = 30

#net.ipv4.tcp_keepalive_time = 120

net.ipv4.ip_local_port_range = 1024 65535

kernel.shmall = 2097152

kernel.shmmax = 2147483648

kernel.shmmni = 4096

kernel.sem = 5010 641280 5010 128

net.core.wmem_default=262144

net.core.wmem_max=262144

net.core.rmem_default=4194304

net.core.rmem_max=4194304

net.ipv4.tcp_fin_timeout = 10

net.ipv4.tcp_keepalive_time = 30

net.ipv4.tcp_window_scaling = 0

net.ipv4.tcp_sack = 0

EOF

sysctl –p

8. 切割Nginx 日志文件(防止单个文件过大,后期处理很困难)

#mkdir /data/scripts

#vim /data/scripts/nginx_log.sh

#!/bin/bash

logs_path="/usr/local/nginx/logs/"

mv logspathaccess.log{logs_path}access.log {logs_path}access_$(date ‐d "yesterday" +"%Y%m%d").log

kill ‐USR1 `cat /usr/local/nginx/logs/nginx.pid`

# chmod +x /data/scripts/nginx_log.sh

#crontab ‐e #脚本写完后,将脚本放入计划任务每天执行一次脚本

0 1 * * * /data/scripts/nginx_log.sh

9. 检测MySQL 数据库连接数量

#本脚本每2 秒检测一次MySQL 并发连接数,可以将本脚本设置为开机启动脚本,或在特定时间段执行

#以满足对MySQL 数据库的监控需求,查看MySQL 连接是否正常

#本案例中的用户名和密码需要根据实际情况修改后方可使用

log_file=/var/log/mysql_count.log

user=root

passwd=123456

while :

do

sleep 2

count=`mysqladmin ‐u "user"‐p"user" ‐p "passwd" status | awk '{print $4}'`

echo "`date +%Y‐%m‐%d` 并发连接数为:count">>count" >> log_file

done

10. 根据md5 校验码,检测文件是否被修改

#!/bin/bash

#本示例脚本检测的是/etc 目录下所有的conf 结尾的文件,根据实际情况,您可以修改为其他目录或文件

#本脚本在目标数据没有被修改时执行一次,当怀疑数据被人篡改,再执行一次

#将两次执行的结果做对比,MD5 码发生改变的文件,就是被人篡改的文件

for i in $(ls /etc/*.conf)

do

md5sum "$i" >> /var/log/conf_file.log

done

如果想上手操作练代码的同学们可以通过阿里云ecs服务器免费试用参与!

入口:新老同学免费试用


相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
13天前
|
分布式计算 Hadoop Shell
使用shell脚本实现自动SSH互信功能
使用shell脚本实现自动SSH互信功能
24 1
|
8天前
|
运维 Linux 程序员
最全查看Linux系统状态脚本_linux查询所有服务器信息的脚本,墙都不扶就服你
最全查看Linux系统状态脚本_linux查询所有服务器信息的脚本,墙都不扶就服你
最全查看Linux系统状态脚本_linux查询所有服务器信息的脚本,墙都不扶就服你
|
11天前
|
SQL 存储 数据库
两个Python脚本轻松解决ETL工作:统计多个服务器下所有数据表信息
两个Python脚本轻松解决ETL工作:统计多个服务器下所有数据表信息
|
11天前
|
SQL 存储 数据库
两个Python脚本轻松解决ETL工作:统计多个服务器下所有数据表信息(1)
两个Python脚本轻松解决ETL工作:统计多个服务器下所有数据表信息(1)
|
13天前
|
Unix Shell Linux
轻松编写 AIX Shell 脚本
轻松编写 AIX Shell 脚本
15 1
|
13天前
|
监控 关系型数据库 Shell
Shell脚本入门:从基础到实践,轻松掌握Shell编程
Shell脚本入门:从基础到实践,轻松掌握Shell编程
|
13天前
|
关系型数据库 MySQL Shell
在Centos7中利用Shell脚本:实现MySQL的数据备份
在Centos7中利用Shell脚本:实现MySQL的数据备份
|
13天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
31 5
|
13天前
|
Shell 程序员 数据安全/隐私保护
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
|
13天前
|
存储 Shell C语言
shell脚本 编程 变量 基本入门(详解)
shell脚本 编程 变量 基本入门(详解)