梭梭的高级特定功能杂项002

高级杂项功能002

Linux 挂载 Windows 共享盘

#1. 首先关闭 Windows 的防火墙
#2. 在 <计算机管理>---<系统工具>---<本地用户和组>----<用户> 自定义管理用户名和密码 
#3. 在电脑中开启共享目录,并设置访问权限,添加可登录的用户
#4. 在 Linux 下, 使用如下命令验证是否可获取到 Windows 系统所共享的资源
	smbclient -U <用户名> -L //172.16.0.100 
#5. 若可成功访问, 则可使用如下命令挂载共享目录:
	mount.cifs //172.16..0.100/d  <挂载点目录>  -o  <验证用户名>

修复 Yum

rpm -ivh --replacepkgs *.rpm --nodeps --force
yum makecache

取消开机登录界面-- root 用户自动登录

# 在图形化模式下 
sed  's#^\(\[daemon\]\)$#&\nAutomaticLoginEnable=True\nAutomaticLogin=root#g' -i /etc/gdm/custom.conf

设置系统启动模式界面

# 查看当前模式 
systemctl get-default
# 设置启动模式
systemctl set-default graphical.target  # 图形化界面 
systemctl set-default multi-user.target # 多用户模式 
# 热切换启动模式
systemctl isolate  multi-user.target

快速解压缩 rpm 包

# 解压缩 rpm 包文件 , 危险操作
rpm2cpio mft-4.20.0-34.x86_64.rpm | cpio -idvm 

制作和解压缩 run 包



查看硬盘 inode 的使用率

df  -iT 
# 若你的硬盘主要为了存储小文件,可以使用如下方法对硬盘创建文件系统,从而获得更多的 inode 
mkfs.ext4 -T small  <设备>   # block 会变小,盘读写速度会降低

解锁 root 用户

# 问题原因
连续多次输入错误密码,触发系统PAM认证模块策略限制,导致用户被锁定,无法登录Linux实例
# 解决方法
1. 使用单用户模式登录
2. 依次执行如下命令,解锁root用户
    pam_tally2 -u root    # 查看root用户登录密码连续输入错误次数。
    pam_tally2 -u root -r # 清除root用户密码连续输入错误次数。
    authconfig --disableldap --update # 更新PAM安全认证记录。
3. reboot 

配置用户登录认证限制

# 1.配置 /etc/pam.d/system-auth 文件
# 2.根据业务需要,注释、修改或删除该配置
# 表示普通用户和root用户连续三次输入错误密码会被锁定,50秒后才能解锁。 
auth required pam_tally2.so deny=3 unlock_time=50  

根据 用户 ID 限制用户登录

# 说明系统用户(包括root)UID为0~999,该限制一般是禁止系统用户登录系统,增强系统的安全性
# 1. 配置 PAM配置文件: /etc/pam.d/system-auth
# 2. 根据业务需要,注释、修改或删除该配置
# 设置禁止 UID小于1000 的用户登录
auth required pam_succeed_if.so uid >= 1000
# 什么是PAM
PAM (Pluggable Authentication Modules)是一个身份认证机制,可用于Linux系统中来实现用户身份验证,加强系统的安全。

如果PAM模块配置错误,可能会导致用户无法通过身份认证,即使输入了正确的密码也无法登录Linux实例。这种情况下,建议您联系管理员检查PAM模块的配置,并根据需要进行相应的调整,以确保能够成功登录Linux实例。常见的与远程登录实例的服务有ssh和login,这两个服务在pam对应的配置文件如下:

/etc/pam.d/login:控制台(管理终端)对应的配置文件。例如密码验证、账户锁定和限制登录IP等。
/etc/pam.d/sshd:SSH远程登录的认证信息。
/etc/pam.d/system-auth:系统级别的认证信息,例如密码策略、用户信息和访问控制等。

实时监控各个 CPU 核心的利用率

sar -P ALL 2  
# 等价于 
mpstat -P ALL 2 

如何查看文本中的隐藏字符

:set list    # 显示查看 
:set nolist  # 关闭显示 
# 隐藏字符示例如下
^I  # 制表符
^M  # 换行符
^J  # 回车符

通过文本中的隐藏字符实现文本的切割

# 查看某一个 PCI 设备当前支持的速率和带宽
lspci -vvv -s 3d:00.0 2> /dev/null | grep 'LnkCap:' | awk -F'\t' '{print $4}' | awk -F',' '{print $2" ,"$3}' 
Speed 5GT/s , Width x32
# 查看某一个 PCI 设备当前的速率和带宽
lspci -vvv -s 3d:00.0 2> /dev/null | grep 'LnkSta:' | awk -F'\t' '{print $4}' 
Speed 5GT/s (ok), Width x32 (ok)

获取 Fio 脚本中拉起的子进程的所有 PID 号

# 获取所有 Fio 进程的 PID 号
child_pids=$(pgrep -P $$ -l | grep -w "fio" | awk '{print $1}' | xargs)
wait $child_pids  # 主进程等待 子进程结束 

设置系统语言为 EN

localectl set-locale LANG=en_US.UTF-8
localectl # 查看

根据文件查询安装包

rpm -qf 文件全路径 
# 根据命令查询安装包 
dnf whatprovides */ifconfig

下载网络文件 跳过 SSL 检查

curl --insecure   -O         xxxx
wget --no-check-certificate  xxxx 
git config --global http.sslVerify false   # git clone 跳过

实时查看 CPU 运行 频率

watch grep \'cpu MHz\' /proc/cpuinfo

pidstat 使用

watch  "pidstat  -l | sed -e '/fio/p' -e '1,3p' -n"

追踪一个进程的系统调用信息

strace -p 43291

快速获取文件完整路径

# 第一种
readlink -f dmg.txt  
# 第二种 
realpath dmg.txt  # 默认显示原始文件, 加 -s 参数显示当前文件路径
# 第三种
find ${PWD} -name dmg.txt   
# 第四种
ls -ld ${PWD}/dmg.txt

使用 VI 编辑二进制文件

#1. 使用二进制模式打开文件 
vim -b files    
#2. 使用 vi 内置命令将二进制转换为十六进制
:%!xxd 
#3. 修改数据 
#4. 将修改后的十六进制文件在转换为二进制
:%!xxd -r 
#5. 保存并退出

迅速查看服务器 PCI 总线速率

sudo dmidecode | grep "PCI"

G6机器截图如下:

不同PCIe版本对应的传输速率如下

# 几个概念:
传输速率为每秒传输量GT/s,而不是每秒位数Gbps,因为传输量包括不提供额外吞吐量的开销位; 比如 PCIe 1.x和PCIe 2.x使用8b / 10b编码方案,导致占用了20% (= 2/10)的原始信道带宽。
GT/s —— Giga transation per second (千兆传输/秒),即每一秒内传输的次数。重点在于描述物理层通信协议的速率属性,可以不和链路宽度等关联。
Gbps —— Giga Bits Per Second (千兆位/秒)。GT/s 与Gbps 之间不存在成比例的换算关系。

# PCIe 吞吐量(可用带宽)计算方法:
吞吐量 = 传输速率 *  编码方案
# 例如:
PCI-e2.0 协议支持 5.0 GT/s,即每一条Lane 上支持每秒钟内传输 5G个Bit;但这并不意味着 PCIe 2.0协议的每一条Lane支持 5Gbps 的速率。
为什么这么说呢?因为PCIe 2.0 的物理层协议中使用的是 8b/10b 的编码方案。 即每传输8个Bit,需要发送10个Bit;这多出的2个Bit并不是对上层有意义的信息。
那么, PCIe 2.0协议的每一条Lane支持 5 * 8 / 10 = 4 Gbps = 500 MB/s 的速率。
以一个PCIe 2.0 x8的通道为例,x8的可用带宽为 4 * 8 = 32 Gbps = 4 GB/s。

快速查看所有内存频率信息

dmidecode --type memory |grep -i -A 16 'Memory Device' |grep -i speed

按照行内各个字符位置快速获取指定区间的字符串

# 分割类型
  -b:表示字节
  -c:表示字符
  -f:表示定义字段
# 计数规则
N- :从第 N 个字节、字符、字段到结尾;
N-M :从第 N 个字节、字符、字段到第 M 个(包括 M 在内)字节、字符、段;
-M :从第 1 个字节、字符、字段到第 M 个(包括 M 在内)字节、字符、字段。
# 按照字符计数  
cat /etc/passwd | cut -b3-10 # 获取每行第 3 个 到第 10 个个字符, 包括第 10 个字符 
cat /etc/passwd | cut -b-10  # 获取每行头10个字符
cat /etc/passwd | rev | cut -b-10 | rev  # 获取每行尾部10个字符
cat /etc/passwd | cut -b11-  # 去除每行头10个字符,输出剩余的 
cat /etc/passwd | cut -b1-10 --complement  # 去除每行头10个字符,输出剩余的 

# 按照字节计数 --- 对于多字节字符默认是分割的,可添加 -n 参数指定不分割,例如在处理中文时
echo "是否his发顺丰" | cut -n -b2-6  # 结果为 "否his发" ; 不加 -n 参数结果为乱码

获取文本最后几个字符

# grep 实现 
grep -o ".$" a.txt           # 提取最后一个字符
grep -o "...$" a.txt         # 提取最后 2 个字符
# sed 实现 
sed 's/\(.*\)\(.$\)/\2/' a.txt             # 提取最后一个字符
sed 's/\(.*\)\(....$\)/\2/' a.txt          # 提取最后 4 个字符
# awk 实现 
awk '{a = substr($0, length($0), length($0)); print a}' a.txt     # 提取最后一个字符
awk '{a = substr($0, length($0) - 2, length($0)); print a}' a.txt # 提取最后 3 个字符
# cut + rev 实现
rev a.txt | cut -c 1 | rev            # 提取最后一个字符
rev a.txt | cut -c 1-3 | rev          # 提取最后 3 个字符

Intel CPU VROC --- NVME SSD 软RAID 配置工具 madam

查看驱动版本: mdadm --version 
创建RAID:(见文档RSTe_NVMe_for_Linux_SW_User_Guide_1.3.pdf)
查看RAID信息:mdadm –D /dev/mdxxx
查看RAID成员盘:mdadm –E /dev/nvmexn1
查看所有Container和RAID状态:cat /proc/mdstat

# 工具包下载地址
https://platformsw.intel.com/KitSearch.aspx
账号 Chrisouyang  密码 @Bios1234

数字间进制的转换

shell脚本若要进行浮点运算,得经过bc这个管道命令;
# bc常用有3个属性:
	scale  # 指定输出小数点后几位, 默认为0
	ibase  # 指定输入数据是几进制, 默认是十进制
	obase  # 指定输出数据是几进制, 默认是十进制
# 十 进制 转 2 进制 
echo "scale=0;obase=2;1.2*10" | bc
# 十六进制转 10 进制 
echo $(echo "obase=10;ibase=16;1E"|bc)
# 十六进制转 2 进制 
echo $(echo "obase=2;ibase=16;1E"|bc)

快速获取 OS 架构版本类型信息

[root@192 getopt]# cat /etc/os-release   
NAME="Rocky Linux"
VERSION="9.3 (Blue Onyx)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.3"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Rocky Linux 9.3 (Blue Onyx)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:9::baseos"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
SUPPORT_END="2032-05-31"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-9"
ROCKY_SUPPORT_PRODUCT_VERSION="9.3"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.3"
# 因 /etc/os-release 文件定义了一堆与 OS 信息相关的变量,故若脚本有需求获取相关信息,可直接在脚本中执行该文件,使其各个变量的定义转变为脚本中的全局变量,然后随用随取;执行命令如下:
source /etc/os-release  
# 常用的变量如下:
echo $ID  # 系统名,类似磁盘的 model 号一样
echo $VERSION_ID  # 系统版本号
echo $CPE_NAME | cut -d':' -f5 # 系统版本主 ID 

# 其他
[root@192 getopt]# cat /etc/system-release-cpe   
cpe:/o:rocky:rocky:9::baseos

获取所有 Fio 进程的 CPU 占用率

# -G 参数可根据进程名获取所有进程
pidstat -G fio | awk '/fio/{print $9" +"}' | xargs | sed 's/.$//g' | bc
pidstat -G fio | awk '/fio/{print $9" +"}' | xargs | sed 's/.$//g' | bc | xargs -I {} echo {}"*1000" | bc

根据驱动获取所有 PF 网口名

# 以驱动 nbl_core 为例
find /sys/bus/pci/drivers/nbl_core/ -type l -name '0000*' | xargs -I {} readlink -f {} | xargs -I {} ls {}/net

根据一个 BUS 号获取该 PF 口的所有 VF 口的网口名

[root@53_mach devices]# readlink -f  /sys/class/net/ens22f0/device
/sys/devices/pci0000:97/0000:97:02.0/0000:98:00.0

[root@53_mach 0000:98:00.0]# readlink -f /sys/bus/pci/devices/0000:98:00.0
/sys/devices/pci0000:97/0000:97:02.0/0000:98:00.0

[root@53_mach 0000:98:00.0]# readlink -f /sys/bus/pci/drivers/nbl_core/0000:98:00.0
/sys/devices/pci0000:97/0000:97:02.0/0000:98:00.0

# 通过 PF 端口名获取所有 VF 口的 bus  ID 
find $(readlink -f  /sys/class/net/ens22f0/device) -type l -name "virtf*" | xargs -I {} readlink -f {}  | xargs -I {} basename {} | wc  -l
# 通过 PF 端口 bus 号获取所有 VF 口的 bus  ID
find $(readlink -f  /sys/bus/pci/devices/0000:98:00.0) -type l -name "virtf*" | xargs -I {} readlink -f {}  | xargs -I {} basename {} | wc  -l
# 通过 PF 端口 bus 号获取所有 VF 的端口名列表
find $(readlink -f  /sys/bus/pci/devices/0000:98:00.0) -type l -name "virtf*" -exec readlink -f {} \; | xargs -I {} ls {}/net | wc  -l
find $(readlink -f  /sys/bus/pci/devices/0000:98:00.0) -type l -name "virtf*" | xargs -I {} readlink -f {}  | xargs -I {} ls {}/net | wc  -l

从 RPM 包提取文件

# 使用cpio从RPM中提取ko驱动:
先使用命令显示rpm包含的文件列表
rpm2cpio your.rpm | cpio -t
然后再显示的列表中找到你需要的文件,执行如下命令:
rpm2cpio your.rpm | cpio -id your-file
posted @ 2024-04-28 09:36  梭梭666  阅读(4)  评论(0编辑  收藏  举报
返回顶部