html tool

显示标签为“linux”的博文。显示所有博文
显示标签为“linux”的博文。显示所有博文

2026年6月12日星期五

转:shell中滚动显示全部内容,高亮显示查询内容

 

 只高亮,不漏日志

想让日志全部显示,但只把关键词标亮?试试这个:

bash
tail -f app.log | grep --line-buffered --color=always -E "ERROR|WARN|$"

技巧解析:在匹配模式最后加上 |$,它会匹配“行尾”,这样每一行日志都会被输出,但关键词部分依然会高亮显示

2026年4月10日星期五

转:使用跳板机 两个主机ssh和scp

环境介绍当前在100.120 上,有个118.131 可以和它联通,

118.131和122.2 可以联通,但无法直接在100.120上直接联通

如果要ssh 可以【下面这个只要求118.131上有100.120的key】 

/bin/ssh -t root@192.168.118.131 "ssh root@192.168.122.2"

scp文件,这里要求122.2上有100.121的key

scp  -o ProxyJump=root@192.168.118.131 use_cmd root@192.168.122.2:~

ssh -o ProxyJump=root@192.168.118.131 root@192.168.122.2 "ls -all ~"


2026年2月12日星期四

转:virsh 基本使用

 

virsh list

virsh list --all



virsh start <虚拟机名称>    #开机

virsh shutdown <虚拟机名称> #关机

virsh destory  <虚拟机名称> #强制断电

virsh reboot <虚拟机名称>   #重启

virsh suspent <虚拟机名称>  #挂起

virsh resume <虚拟机名称>   #挂起的恢复

virsh undefine <虚拟机名称> #删除

virsh autostart <虚拟机名称> #随宿主机启动自动重启虚拟机

virsh autostart --disable <虚拟机名称> #随宿主机启动自动重启虚拟机的取消


virsh console <虚拟机名称> #串行控制台接入,无界面方式,但应该是独占模式


虚拟机配置相关

libvirt 的虚拟机配置存储在xml ,more存储为/etc/libvirt/qemu/

virsh dumpxml <虚拟机名称> #查此虚拟机的当前配置

virsh edit <虚拟机名称>  #编辑此虚拟机的配置

virsh dumpxml <虚拟机名称> backup.xml #导出配置


查看基本信息

virsh dominfo  <虚拟机名称> #查询基本摘要

virsh domiflist  <虚拟机名称> #查网卡信息

virsh domblklist  <虚拟机名称> #查硬盘信息

virsh vcpulnfo  <虚拟机名称>   #查vCPU信息


2025年12月17日星期三

转:linux 网桥配置

 

使用 Bridge网桥(最常用)

创建网桥,让多个容器通过网桥互联并访问外部网络。

bash
# 1. 创建网桥
sudo ip link add br0 type bridge
sudo ip link set br0 up
sudo ip addr add 192.168.100.1/24 dev br0

# 2. 创建veth pair
sudo ip link add veth-host type veth peer name veth-container

# 3. 将veth-host连接到网桥
sudo ip link set veth-host master br0
sudo ip link set veth-host up

# 4. 创建命名空间并移动veth-container
sudo ip netns add container1
sudo ip link set veth-container netns container1
sudo ip netns exec container1 ip link set veth-container up
sudo ip netns exec container1 ip addr add 192.168.100.100/24 dev veth-container

# 5. 启用NAT转发(让容器能访问外网)
sudo iptables -t nat -A POSTROUTING -s 192.168.100.0/24 ! -o br0 -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=1

2025年12月1日星期一

问题:Buff/Cache 中不可以算到Availabe中的部分是什么?

 交流中被问到free -h中为什么Available 比Buff/Cache小

查询发现Available估算时Buff/Cache有无法使用的部分,

Buff/Cache中不可立即回收(不能完全算入Available)的部分主要包括:

  1. 脏页:已被修改但尚未写入磁盘的数据。

  2. 正在被使用的页:有进程正在直接读取或写入的缓存页。

  3. 被锁定在内存中的页:通过mlock()系统调用锁定的页。

  4. 内核数据结构占用的Slab内存中的不可回收部分

1. 脏页 - 最大的“不确定因素”

  • 是什么:数据已在内存中被修改,但与磁盘上的版本不一致。内核必须先将它们写回磁盘,才能回收这些内存页。

  • 影响:如果系统有大量写入操作(如数据库、日志写入),脏页会很多。回收它们需要等待I/O完成,因此不能立即提供给应用程序

  • 查看命令

    bash
    grep -E 'Dirty|Writeback' /proc/meminfo

    输出示例:

    text
    Dirty:            12456 kB      # 待写回的脏数据量
    Writeback:          432 kB      # 正在写回的数据量

2. 正在被使用的页

  • 是什么:某个进程正在通过read()write()系统调用访问的缓存页。回收会导致进程I/O错误。

  • 影响:通常比例很小,但存在。

3. 被锁定的页

  • 是什么:通过mlock()系统调用明确要求常驻内存的页(如一些实时性要求高的应用、加密密钥)。

  • 影响:明确不可回收。

4. Slab内存中的不可回收部分

  • 是什么/proc/meminfo中的SReclaimable(可回收Slab)被计入Buff/Cache,而SUnreclaim(不可回收Slab)则不被计入。

    • 可回收Slab:如目录项缓存(dentry)、索引节点缓存(inode_cache)。这些可被回收,并被计入Available

    • 不可回收Slab:一些内核数据结构占用的内存,无法回收。

  • 查看命令

    bash
    grep -E 'SReclaimable|SUnreclaim' /proc/meminfo

内核如何计算 Available?(深入原理)

Available 的值在 /proc/meminfo 中是这样计算的(简化版):

bash
# 查看精确值
grep Available /proc/meminfo

# 内核的估算逻辑(概念上):
Available = Free + (PageCache的总和 - 其中不可立即回收的部分) + (SReclaimable * 权重系数)

不可立即回收的部分 主要通过以下方式估算:

  1. 统计所有“干净”的页面(未修改的缓存),这些可以瞬间回收。

  2. 估算回收“脏页”的成本,并根据系统当前压力、I/O负载等因素,决定将多大比例的脏页计入“可用”资源。在内存压力不大时,内核可能保守估计;压力大时,会更积极地将脏页的潜在回收能力计入。


一个具体的诊断例子

假设您的系统 free -h 显示:

text
              total        used        free      shared  buff/cache   available
Mem:            16Gi        10Gi       500Mi       1.0Gi        5.5Gi        4.5Gi

分析

  • buff/cache 有 5.5Gi

  • available 有 4.5Gi

  • free 只有 500Mi

计算 available 的来源
4.5Gi ≈ 0.5Gi (free) + [5.5Gi (buff/cache) - 约 1.5Gi (不可立即回收部分)]

查看这“约1.5Gi”不可回收部分的具体构成

bash
# 1. 查看脏页大小
cat /proc/meminfo | grep Dirty
# 假设输出 Dirty: 800000 kB (约0.76Gi)

# 2. 查看Slab分配
cat /proc/meminfo | grep -E 'SReclaimable|SUnreclaim'
# SReclaimable:  400000 kB  (约0.38Gi,这部分是buff/cache的一部分且可回收)
# SUnreclaim:    200000 kB  (约0.19Gi,这部分不属于buff/cache)

# 3. 粗略估算
# 不可立即回收部分 ≈ 脏页 + 其他难以估算的正在使用的页
# ≈ 0.76Gi + (0.5Gi ~ 0.7Gi) ≈ 1.3Gi ~ 1.5Gi

这个估算结果与上面的分析基本吻合。

结论与建议

  1. Available 是一个智能估算值,而非简单加减。它告诉你在不引起严重I/O阻塞或进程错误的前提下,能安全分配多少内存。

  2. Buff/Cache 和 Available 的差值,主要反映了脏页的数量和回收成本

  3. 当系统内存压力极大时,内核会启动激进的后台回写,将脏页刷入磁盘,从而将它们转变为“干净页”,增加 Available 的估算值。但这个过程会导致I/O争用,可能使系统变慢。

当您需要精确分析时,请使用 cat /proc/meminfo 获取原始数据,并重点关注 DirtyWritebackSReclaimable 这几个指标。它们正是 Buff/Cache 中那些“看得见但暂时用不了”的部分。

2025年8月7日星期四

tcpreplay改写ipv6地址

 #ipv6的tcprewire改写方式

tcprewrite \

 --srcipmap=[2000::1]:[240e:123:4567:8900::1] \

 --dstipmap=[2000::1]:[240e:123:4567:8900::1] \

 --infile=ipv6_sql.pcap \

 --outfile=ipv6_sql_240e.pcap \

 --fixcsum


ESxi使用scp

 配置一下如下,就可以用scp了

esxcli network firewall ruleset set --ruleset-id=sshClient --enabled=true

介绍-dankon deeps


在 VMware ESXi 中,esxcli network firewall ruleset 命令用于管理主机防火墙规则集。您提到的命令:

bash
esxcli network firewall ruleset set --ruleset-id=sshClient --enabled=true

命令解析

  1. esxcli network firewall

    • ESXi 的网络防火墙管理模块。

  2. ruleset set

    • 修改防火墙规则集的配置。

  3. --ruleset-id=sshClient

    • 指定规则集为 sshClient(SSH 客户端出站规则)。

    • 注意:

      • sshServer 控制 SSH 入站连接(默认 ESXi 作为服务器)。

      • sshClient 控制 ESXi 主动发起的 SSH 连接(如从 ESXi 连接其他主机)。

  4. --enabled=true

    • 启用该规则集(允许匹配规则的流量)。

    • 设为 false 则禁用。


随机生成base64

      ##base64

      len=$(( (RANDOM % 15 +2 ) *4)) #8-64之间的4的倍数

      b64=$(openssl rand -base64 $len) #openssl 随机生成安全数据,使用base64编码生成 ,生成$len的原始二进制数据

      echo $b64


介绍-dankon deepseek

一、命令分解

  1. openssl rand
    OpenSSL 的随机数生成器模块,用于生成密码学安全的伪随机数据。

  2. -base64
    指定输出格式为 Base64 编码(将二进制数据转换为可读的 ASCII 字符)。

  3. 4
    生成 4 字节的原始二进制数据(编码前长度)。


二、输出特性

  • 实际输出长度
    4 字节二进制数据 → Base64 编码后为 6 个字符(每 3 字节对应 4 个 Base64 字符,填充 = 补全)。
    示例输出aBcD12=


随机生成uuid

 uuidgen

介绍:

UUID(Universally Unique Identifier)是一个 128 位 的唯一标识符,标准格式为:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx(32 个十六进制字符 + 4 个连字符)。
其核心特性:

  • 唯一性:理论上重复概率极低(如版本 4 UUID 的冲突概率约为 1/2^122)。

  • 无需中央分配:本地生成即可保证全球唯一。

2024年10月24日星期四

重做系统后挂载之前的磁盘方式

 步骤

1.查询之前的磁盘位置

fdisk -l






2.创建文件夹 mkdir  /data/es

3.挂载

mount /data/es /dev/mapper/centos-***_***_es 

2024年9月2日星期一

附加磁盘分区挂载

 

查看硬盘

lsblk -l

参考:https://blog.csdn.net/J080624/article/details/94635949

分区

fdisk /dev/sdb


格式化

mkfs -t ext4 /dev/sdb1 


挂载

mkdir /home/sdb1

mount /dev/sdb1 /home/sdb1


2024年8月23日星期五

centos镜像源切换

 更新为阿里的参考

https://developer.aliyun.com/mirror/centos

https://developer.aliyun.com/mirror/epel

下载前备份之前的源

cd /etc/yum.repos.d/&&mkdir backup&&mv * backup

下载centos源

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

运行yum makecache 生成本地缓存

再试试yum install wget就可以了

下载eple源

wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

2024年7月30日星期二

shell字符显示下划线和 背景,字符颜色


echo -e "\033[4m dd \033[0m" #shell 字符下划线

echo -e "\033[47;30m 3-2-18 \033[0m" #shell 字符和背景色设置

参考: https://blog.csdn.net/m0_51077280/article/details/128675334

2024年5月29日星期三

转:ldconfig

 

参考:http://linux.51yip.com/search/ldconfig

ldconfig是一个动态链接库管理命令,命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件

2024年4月26日星期五

整数序列生成seq

参考:https://blog.csdn.net/sjin_1314/article/details/7980991

seq x y 生成x~y之间的整数序列

eg:

# seq 10 15

10

11

12

13

14

15


可以指定位数和不足位时补充0
eg:
# seq -f ta"%2g" 1 15
ta 1
ta 2
ta 3
ta 4
ta 5
ta 6
ta 7
ta 8
ta 9
ta10
ta11
ta12
ta13
ta14
ta15

# seq -f ta"%02g" 1 15
ta01
ta02
ta03
ta04
ta05
ta06
ta07
ta08
ta09
ta10
ta11
ta12
ta13
ta14
ta15


2024年4月11日星期四

转:shell字符串为空

参考:https://www.cnblogs.com/chuanzhang053/p/8532248.html
#!/bin/bash

str_1=''
str_2=Badboy
if [[ -z $str_1 ]];
then
    echo str_1 is empty.
else
    echo str_1 is not empty.
fi

if [[ -z v$str_2 ]];
then
    echo str_2 is empty.
else
    echo str_2 is not empty.
fi

2024年4月10日星期三

date获取英文月份缩写%b

 date获取英文月份缩写%b

date获取英文月份%B

2024年2月19日星期一

diff比较str

 参考:https://cloud.tencent.com/developer/ask/sof/116324565


diff <( printf '%s\n' "$str1" ) <( printf '%s\n' '$str2' )

2023年12月25日星期一

转:使用tr分割shell字符串为多个内容的数组

 参考:https://blog.csdn.net/u010003835/article/details/80750003

方式三:

string="1,sd,a"

array=(`echo $string|tr ',' ' '`)

echo ${array[0]}

echo ${array[1]}

echo ${array[2]}


输出:
# bash t
1
sd
a

shell执行sqlite语句

 参考地址:https://blog.csdn.net/guangdeshishe/article/details/125295529

单条:

sqlite3 ../rule_pcap_80t.db <<EOF >${name}_ignore_key

select ignore_keys from pcap_es_and_ignore_key where pcap_name="${name}" and suuid="S3100109841";

EOF


多条:
sqlite3 ../rule_pcap_80t.db <<EOF >${name}_ignore_key
select ignore_keys from pcap_es_and_ignore_key where pcap_name="${name}" and suuid="S3100109841";
delete  ignore_keys from pcap_es_and_ignore_key where pcap_name="${name}" and suuid="S3100109841";
EOF