bash脚本,限制服务器带宽最大20M/s
TIME 2023-04-01 14:51:08
以下是一个可以限制服务器带宽最大为20MB/s的bash脚本:
#!/bin/bash
# 网卡接口名称,可以根据实际情况进行修改
INTERFACE="eth0"
# 带宽限制,单位为KB/s
LIMIT=20000
# 清除现有的限速规则
tc qdisc del dev $INTERFACE root 2>/dev/null
# 添加新的限速规则
tc qdisc add dev $INTERFACE root handle 1: cbq avpkt 1000 bandwidth 100mbit
tc class add dev $INTERFACE parent 1: classid 1:1 cbq rate ${LIMIT}kbit \
allot 1500 prio 5 bounded isolated
tc filter add dev $INTERFACE parent 1: protocol ip prio 16 u32 match ip dst \
0.0.0.0/0 flowid 1:1
这个脚本使用了Linux中的Traffic Control(TC)命令来实现带宽限制。其中,INTERFACE变量指定了网卡接口名称,可以根据实际情况进行修改。LIMIT变量指定了带宽上限,本例中设置为20MB/s,即20000KB/s。
脚本会先清除现有的限速规则,然后添加新的限速规则。它使用CBQ算法来控制带宽,将所有传输数据的流划分成一组类别(class),每个类别有自己的带宽限制。在本例中,我们只定义了一个类别,其带宽限制为20MB/s。最后,脚本使用TC命令将所有传输数据的流过滤到这个类别中。
请注意,在运行此脚本之前,您需要安装Traffic Control(TC)命令,并以root权限运行脚本。
当脚本被执行时,它会列出当前系统中所有运行的进程,并按照所占用内存的大小进行排序。这个脚本基于Linux中的ps和sort命令来实现。
下面是代码的解释:
复制代码
#!/bin/bash
# 定义变量,并设置默认值
COLUMNS=${COLUMNS:-80}
LINES=${LINES:-24}
# 使用ps命令列出所有进程并过滤掉头部信息和自身进程相关信息,
# 再使用awk命令提取进程ID、进程名称和内存使用大小等信息,
# 最后使用sort命令按照内存使用大小进行倒序排序
ps -e -o pid,user,cmd,%mem --sort=-%mem | head -n $(($LINES - 3)) | awk '{printf("%-6s %-10s %s\n", $1, $2, $3)}' | cut -c -$COLUMNS
# 输出一个空行
echo
脚本首先定义了两个变量COLUMNS和LINES,分别表示终端窗口的列数和行数,如果未定义,则默认为80列和24行。然后使用ps命令列出所有运行的进程,并使用sort命令将其按照内存使用大小进行倒序排序。head命令用于截取列表的前若干行(除去头部和自身进程相关信息),而awk命令则用于提取进程ID、用户名、命令行和内存使用率等信息,并将其以一定格式输出。cut命令用于限制输出的宽度,以适应终端窗口大小。
最后,脚本会在列表之后输出一个空行,以保持良好的排版。
点击数:5
本文访问统计: 2