在太阳下
不管你喜不喜欢,高不高兴,爱与不爱;太阳照旧照耀着你!温暖着你!

bash脚本,限制服务器带宽最大20M/s

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

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
Verified by MonsterInsights