rename
重命名工具,支持通配符和正则表达式
# 去掉文件名中的空格
rename 's/ //g' *.mp4
# 修改扩展名(会将所有 .txt 文件的扩展名改为 .bak)
rename 's/\.txt$/.bak/' *.txt
# -n : 预览效果
rename -n 's/\.log$/\.bak/' *.log
apt
# 查看软件包更新日志
apt changelog openssh-serverimg2txt
# 可以在控制台查看小图像
img2txt -f utf8 -w <宽度> -h <高度> <图像文件路径>journalctl
# 查看实时日志(类似 tail -f)
journalctl -f
# 查看最近10分钟日志
journalctl --since "10 minutes ago"
# 查看指定时间范围日志
journalctl --since "2025-12-25 02:38:00" --until "2025-12-25 02:40:00"
# 查看特定服务日志(如 sshd)
journalctl -u sshd
# 查看所有服务日志
journalctl -u *
# 查看错误日志
journalctl -p err
# 查看警告及以上日志
journalctl -p warning
# 查看内核日志(-k)
journalctl -k
# 输出为 JSON 格式
journalctl -o json
# 输出为短格式
journalctl -o short-precise
dd
测试磁盘写能力
因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。
# time dd if=/dev/zero of=/test.dbf bs=8k count=300000
测试磁盘读能力
因为/dev/sdb1是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力。
time dd if=/dev/sdb1 of=/dev/null bs=8k
yum
仅下载
# yum -y install --downloadonly --downloaddir /tmp/ NetworkManager
查看依赖包列表
# yum deplist docker-compose | grep provider
provider: python3.x86_64 3.6.8-18.el7
provider: python3.i686 3.6.8-18.el7
provider: python3.x86_64 3.6.8-18.el7
provider: python3.i686 3.6.8-18.el7
provider: python36-cached_property.noarch 1.5.1-2.el7
provider: python36-docker.noarch 2.6.1-3.el7
provider: python36-dockerpty.noarch 0.4.1-18.el7
provider: python36-docopt.noarch 0.6.2-8.el7
provider: python36-jsonschema.noarch 2.5.1-4.el7
provider: python36-pysocks.noarch 1.6.8-7.el7
provider: python36-requests.noarch 2.14.2-2.el7
provider: python3-setuptools.noarch 39.2.0-10.el7
provider: python36-six.noarch 1.14.0-3.el7
provider: python36-texttable.noarch 1.6.2-1.el7
provider: python36-websocket-client.noarch 0.47.0-2.el7
provider: python36-PyYAML.x86_64 3.13-1.el7
查看yum事务列表
# yum history list
回滚指定事务(根据ID)
# yum history undo 7 adb
# 查询已连接设备
adb devices
# 查询所有包名
adb shell pm list packages -s
# 获取应用的详细信息
adb shell dumpsys package <包名>
# 卸载
adb shell pm uninstall --user 包名
# 停用应用
adb shell pm disable --user 包名
# 启用应用
adb shell pm enable --user 包名rpm
# 查看某个 RPM 包的所有脚本
rpm -q --scripts <package-name>
# 查看 RPM 包中包含的所有文件
rpm -ql <package-name>
# 查看某个 RPM 包的详细信息,包括文件的权限、大小等
rpm -qi <package-name>
# 提取 RPM 包内容
rpm2cpio <package-name>.rpm | cpio -idmv
# 重置数据库
rpm --rebuilddb
# 查看更新日志
rpm -q --changelog openssh-server
virsh
# 查看OS元数据列表
virt-install --osinfo list
# 创建虚拟机
virt-install \
--name=CentOS_Stream_10 \
--ram=2048 \
--vcpus=2 \
--disk path=/media/wuxk/514BA5C710D27B7B/CentOS-Stream-GenericCloud-x86_64-10-latest.x86_64.qcow2,format=qcow2 \
--os-variant=rhel7.0 \
--network network=default \
--graphics spice \
--import
# 运行状态虚拟机列表 --all(全部列表)
virsh list
# 虚拟机信息
virsh dominfo 3
# 虚拟机删除
virsh undefine 3
# 查看虚拟机IP
virsh domifaddr an_89
# 设置虚拟机centos用户公钥
virt-customize -a CentOS-7-x86_64-GenericCloud-1703.qcow2 --ssh-inject centos:string:"123"
# 设置用户密码
--root-password password:ubuntu
# 主机名
--hostname ubuntutest
# 添加mac地址绑定
virsh net-update default add ip-dhcp-host '<host mac="52:54:00:48:27:1D" ip="198.51.100.3"/>' --live --config
# 修改绑定
virsh net-update default modify ip-dhcp-host '<host mac="52:54:00:48:27:1D" ip="198.51.100.3"/>' --live --config
# 查看绑定
virsh net-dhcp-leases virbr1
# 进入控制台
virsh console an_89nmap
NMAP 默认只会扫描1000个常用的端口
参数 作用
-sT TCP 连接扫描(不安全)
-sS SYN 扫描(安全,推荐)
-sU UDP 扫描
-Pn 禁用 ping 扫描
-p 指定端口(如 -p 80,443)
-oX 输出 XML 格式结果
-T 设置扫描速度(T1~T6)
-sV 服务版本检测
-O 操作系统识别
-sC 使用 NSE 脚本
-A 强力扫描(包含版本、操作系统、脚本等)
-6 IPv6 地址扫描
-f 使用小数据包规避防火墙
-v 显示冗余信息
主机发现:检测目标主机是否在线(如 nmap -sn 192.168.1.0/24)
端口扫描:探测开放端口及服务版本(如 nmap -sV 192.168.1.10)
操作系统识别:推断目标主机的操作系统(如 nmap -O 192.168.1.10)
服务版本检测:识别端口上运行的服务版本(如 nmap -sV 192.168.1.10)
防火墙规避:通过分片、IP 伪装等策略绕过防火墙(如 nmap -f 192.168.1.10)
扫描指定端口:nmap -sV -6 -p 10000-11000 wuxk.ip-ddns.comdmidecode
查看型号
# dmidecode -s system-product-name
查看系统信息
# dmidecode -t systemscreen
#创建会话 -d:后台 -m:存在的话则重命名 -S 指定名称 (或bash)
screen -d -m -S anolisupdate sh -c "ping -c 100 localhost | tee /tmp/update_anolis.log"
#会话列表
screen -list
#进入会话
screen -r anolisupdate
#离开会话,但不终止任务
在 screen 会话中按下 Ctrl + A 然后按下 d。
#终止会话
screen -X -S <会话编号或名称> quit循环
for 循环(适用于每行只有一个字段)
# cat list
1.2.3.4
1.2.3.5
# for i in $(cat list);do ssh $i lsblk;done
for 循环(范围)
for i in {1..188};do echo $i;done
while循环(适用于每行有多个字段)
# cat list
1.2.3.4 666
1.2.3.5 333
cat list | while read -r ip port;do ssh $ip -p$port;donestrace
跟踪调试命令,可以跟踪命令、进程、子进程
跟踪命令调用
# strace -o ls.log ls /tmp
显示 cat 命令中与文件操作相关的系统调用(open、read、write)
# strace -e trace=open,read,write cat /etc/passwd
统计系统调用耗时
strace -c ls /tmp
跟踪已运行的进程 字符串内容最多显示 9999 字节
该命令会实时监控进程 3300348 向 标准输出(stdout) 和 标准错误(stderr) 写入的所有内容(如日志、错误消息等),并完整显示(因 -s 9999 确保内容不截断)。
# strace -p 3300348 -s 9999 -e write=1,2
跟踪网络请求
# strace -e trace=network curl www.baidu.com
分析启动缓慢的程序
strace -tt -c -o slow.log ./slow_program
readlink
# 在脚本中获取脚本的绝对路径
echo $(readlink -f "$0") # 输出/root/a.shEOF
# 会展开 Shell 变量(如 $() 和 $0) - 区别在于开头的 EOF 和 'EOF'
var="Hello"
cat <<EOF
$var World # 输出:Hello World
EOF
# 不会展开 Shell 变量(如 $() 和 $0)
var="Hello"
cat <<'EOF'
$var World # 输出:$var World(原样输出)
EOF