编辑
2023-05-01
Shell
00

语法格式:

uptime (选项)

选项作用
-p以漂亮的格式显示机器正常运行的时间
-s系统自开始运行时间,格式为yyyy-mm-dd hh:mm
-h显示帮助信息

命令实例

如下图所示:直接输入 uptime,只有一行输出

20:00:43 => 当前系统时间 up 64 days, 6:49 => 系统自上次开机到目前运行时间 5 users => 登录到系统的用户数 load average => 系统平均负载
  • 0.24 => 1分钟内系统平均负载
  • 0.31 => 5分钟内系统平均负载
  • 0.27 => 15分钟内系统平均负载

什么是平均负载呢?

简单来说,平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和CPU使用率并没有直接关系。

最理想的平均活跃进程数是什么?

就是刚好每个CPU上都刚好运行着一个进程,这样每个CPU都得到了充分的利用。比如平均负载为4时意味着什么呢?

  • 在只有4个CPU的系统上,意味着所有的CPU都刚好被完全占用。
  • 在8个CPU的系统上,意味着CPU有50%的空闲。
  • 而在有2个CPU系统上,意味着有一半的进程竞争不到CPU。

平均负载为多少时合理?

平均负载比CPU个数大的时候,系统就已经出现了过载。

  • 如果1分钟,5分钟,15分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。
  • 如果1分钟的值远小于15分钟的值,就说明系统最近1分钟负载在减少,而过去15分钟内却有很大负载。
  • 反之则相反,如果1分钟的值远大于15分钟的值,说明近1分钟负载在增加,这种情况可能是临时性的,也可能还会持续,要持续观察,一旦1分钟的平均负载超过了CPU的数量,意味着系统正在发生过载的问题。

例如:一个单核系统上,平均负载为1.78,0.60,6.56,说明1分钟内,系统有78%的超载,而在15分钟内有556%的超载。

实际生产中,平均负载多高时需要关注呢?

平均负载高于CPU数量70%时,就应该分析排查负载高问题了。

平均负载与CPU使用率

  • CPU密集型进程,使用大量CPU会导致平均负载升高,此时两者时一致的。
  • I/O密集型进程,等待I/O也会导致平均负载升高,但CPU使用率不一定很高,需要结合top命令查看。
  • 大量等待CPU的进程调度也会导致平均负载升高,此时的CPU使用率也会比较高。
编辑
2023-05-01
Tools
00

概述

Rinetd 是一个 TCP 连接重定向工具,当我们需要进行流量的代理转发的时候,我们可以通过该工具完成。Rinetd 是一个使用异步 IO 的单进程的服务,它可以处理配置在 /etc/rinetd.conf 中的任意数量的连接,但是并不会过多的消耗服务器的资源。Rinetd 不能用于重定向 FTP 服务,因为 FTP 服务使用了多个 socket 进行通讯。 如果需要 Rinetd 随系统启动一起启动,可以在 /etc/rc.local 中添加启动命令 /usr/sbin/rinetd。在没有使用 -c 选项指定其他配置文件的情况下,Rinetd 使用默认的配置文件 /etc/rinetd.conf。

快速使用

git clone https://github.com/boutell/rinetd.git cd rinetd make && make install echo "0.0.0.0 8080 www.baidu.com 80" > /etc/rinetd.conf rinetd -c /etc/rinetd.conf

这里所有对 Rinetd 宿主机 8080 端口的请求都会被转发到 Baidu 上. 注意:确保指定的端口没有被其他应用占用,如上面的 8080 端口。使用 kill -1 信号可以使 Rinetd 重新加载配置信息而不中断现有的连接。

开机启动

在/etc/rc.local 文件中,添加/usr/sbin/rinetd 或者 /usr/sbin/rinetd -c /etc/rinetd.conf 启动命令即可。 生产环境使用需谨慎! 生产环境使用需谨慎! 生产环境使用需谨慎!

转发规则

Rinetd 的大部分配置都是配置转发规则,规则如下: bindaddress bindport connectaddress connectport 源地址 源端口 目的地址 目的端口 这里的地址可以是主机名也可以是 IP 地址。 如要将对 192.1.1.10:8080 的请求代理到 http://www.example.com:80 上,参照上面的规则配置如下: www.example.com 80 192.1.1.10:8080 这里将对外的服务地址 http://www.example.com 重定向到了内部地址 192.1.1.10 的 8080 端口上。通常 192.1.1.10:8080 在防火墙的内部,外部请求并不能直接访问。如果我们源地址使用 IP 地址 0.0.0.0 ,那么代表将该服务器所有 IP 地址对应端口上的请求都代理到目的地址上。

权限控制

Rinetd 使用 allow pattern 和 deny pattern 两个关键字进行访问权限的控制。如: allow 192.1.5.* deny 192.1.5.1 这里 pattern 的内容必须是一个 IP 地址,不能是主机名或者域名。可以使用 ? 匹配 0 - 9 的任意一个字符,使用 * 匹配 0 -9 的任意个的字符。在转发规则之前配置的权限规则会作为一个全局生效的规则生效, 在转发规则之后配置的权限规则仅适用于本条转发规则。校验的过程是先校验是否能够通过全局规则,再校验特定的规则。

用途

将请求转发到制定ip和端口, 实现正向代理.

# 把本地所有 3547 端口的请求都转到 域名 www.baidu.com 的 3547 端口上 0.0.0.0 3547 www.baidu.com 3547

参考:

https://zhuanlan.zhihu.com/p/136199201

https://www.jianshu.com/p/c1588d8cbda3

编辑
2023-04-25
Shell
00

作用: 对数据进行过滤

格式: grep [options] [pattern] filename

参数选项说明
-v排除匹配结果
-n显示匹配行与行号
-i不区分大小写
-c只统计匹配的行数
-E使用egrep命令
--color=auto过滤结果添加颜色
-w只匹配过滤的单词
-o只输出匹配的内容

实践

输出以 i 开头的行, 不区分大小写

grep "^i" test.txt -i -n

输出以 . 结尾的行

grep "\.$" test.txt -n

找出文件的空行, 以及行号

grep "^$" test.txt -n

过滤空行和注释

cat text.txt | grep -v ^# |grep -v ^$

找出符合其中一个模式的行

grep -E "aaa|bbb|ccc" test.txt -n
编辑
2023-04-25
Shell
00

作用:复制对数据进行排序

用途:可以与uniq命令一起进行去重

格式: sort [options] option_val filename option说明:

-n: 以数字排序, 不加-n选项, 默认是按字符排序. -r: 降序排列, 不指定-r选项 默认是升序. -k: 第n列, 以第n列数据进行排序. -t: 分隔符. -u: 去除重复行. -o: 将排序结果输出到文件中, 类似 重定向符号 > -b: 忽略前导空格. -R: 随机排序, 每次2运行的结果均不同.

实践:

如图为测试文件

image.png

shell
sort -n -t: -k2 1.txt => 指定分隔符 ":", 以第三列数据, 按数字形式以升序排序 sort -n -t"|" -k2 1.txt => 如果分隔符为|, 则对分隔符加上双引号 sort -nr -t: -k2 1.txt => 指定分隔符 ":", 以第三列数据, 按数字形式以降序排序 sort -nru -t: -k2 1.txt => 指定分隔符 ":", 去除重复行, 以第三列数据, 按数字形式以降序排序 sort -R 1.txt => 随机排序 sort -u 1.txt => 去除重复行 sort -R 1.txt -o 2.txt => 将排序结果输出到新文件
编辑
2023-04-23
Tools
00

文本替换

(1). 文件内全部替换:

pattern:

:%s#abc#123#g 如文件内有#,可用/替换 :%s/str1/str2/g

(2). 文件内局部替换: 把20行到30行内abc替换成123

:20,30s#abc#123 :20,30s/abc/123