系统命令集合
在线参考:https://book.shentoushi.top/
Windows Cmd&PowerShell
CMD命令终端基础
文件格式
- VBS:VBScript 脚本
- BAT:批处理脚本
echo
@echo off :: 关闭后续命令回显(@ 只关闭当前行回显)
@echo on :: 打开回显
echo "hello"
echo "hello" "world"
@ 字符的作用:放在命令前,关闭该命令自身的回显,无论此时 echo 是否打开。
常用命令
| 命令 | 作用 |
|---|---|
pause | 暂停,显示”请按任意键继续” |
:: | 注释 |
chcp 65001 | 切换 UTF-8 编码,解决乱码 |
start | 调用其他程序(如 exe) |
goto | 跳转,goto :eof 停止继续执行 |
call | 调用函数,也可调用其他 bat 脚本 |
变量
set x=hello
set y=world
echo %x% %y%
set /p input=请输入: :: 等待用户输入
echo %cd% :: 打印当前路径
| 写法 | 含义 |
|---|---|
set x=值 | 赋值 |
set /p x=提示 | 等待用户输入 |
%x% | 引用变量 |
%cd% | 当前路径 |
函数
:fun_main
...
goto :eof :: 函数结束
- 用
:函数名定义 - 用
call :函数名调用 goto :eof结束当前函数/脚本
for 循环
| 形式 | 作用 |
|---|---|
for /b | 获取指定目录下所有文件和文件夹(仅名字) |
for /f | 遍历指定目录下所有文件和文件夹(可读文件内容) |
for /d | 遍历指定目录下所有文件夹 |
for /r | 遍历指定目录及子文件夹中的文件 |
for /l | 按数字范围和步长循环 |
变量写法
| 环境 | 写法 | 示例 |
|---|---|---|
| CMD 命令行 | 单百分号 %i | for %i in (*) do echo %i |
| 批处理文件 (.bat) | 双百分号 %%i | for %%i in (*) do echo %%i |
- 批处理文件中变量名前加两个百分号(
%%i),因为%在批处理里需转义 - CMD 命令行中直接执行时用单百分号(
%i) - 变量名任意(i、j、file 等)
delims(分隔符)
for /f "delims=," %%i in (file.txt) do echo %%i
读取的字符串会按 delims 指定的分隔符拆分成多个子字符串。
FIND 命令
| 参数 | 作用 |
|---|---|
/V | 显示所有未包含指定字符串的行 |
/C | 仅显示包含字符串的行数 |
/N | 显示行号 |
/I | 搜索时忽略大小写 |
/OFF[LINE] | 不跳过具有脱机属性集的文件 |
用法:
find "string" [drive:][path]filename
"string":要搜索的文本[drive:][path]filename:要搜索的文件
比较符号
| 符号 | 含义 |
|---|---|
EQU | 等于 |
NEQ | 不等于 |
LSS | 小于 |
LEQ | 小于或等于 |
GTR | 大于 |
GEQ | 大于或等于 |
用法
if %x% EQU 1 echo 等于1
常用特殊符号
| 符号 | 名称 | 作用 |
|---|---|---|
| ` | ` | 管道符 |
^ | 转义字符 | 转义特殊字符 |
& | 顺序执行 | 一行执行多条命令,前一条失败不影响后面 |
&& | 条件与 | 前一条成功才执行后一条 |
| ` | ` | |
, | 逗号 | 相当于空格 |
&、&&、|| 对比
cmd1 & cmd2 :: cmd1 执行完(无论成败)执行 cmd2
cmd1 && cmd2 :: cmd1 成功才执行 cmd2
cmd1 || cmd2 :: cmd1 失败才执行 cmd2
&:从左到右依次执行,互不影响||:第一条失败才执行第二条;若碰到成功命令,后面不再执行;若一直失败,执行完所有&&:与||相反,成功才继续
简易案例
案例 1:获取目录下所有文件目录
@echo off
chcp 65001
setlocal enabledelayedexpansion
set "cdir=F:/"
for /f "delims=" %%i in ('dir /b "%cdir%"') do (
set "item=%%i"
call :process_item
)
pause
goto :eof
:process_item
:: 判断是否为目录
if exist "%cdir%%item%\" (
echo 目录: %item%
) else (
echo 文件: %item%
)
goto :eof
案例 2:用 Ping 获取网段存活主机
@echo off
chcp 65001 > nul
for /l %%i in (1,1,255) do (
ping 172.17.139.%%i -w 1 -n 1 | findstr /i "ttl" > nul
if not errorlevel 1 (
echo 存活IP:172.17.139.%%i
)
)
pause
案例 3:获取计算机信息筛选补丁
查看系统信息
systeminfo
扫描脚本
@echo off
chcp 65001 > nul
echo **获取系统信息:**
systeminfo
echo.
echo **获取已安装的补丁:**
wmic qfe list brief /format:table
echo.
echo **扫描是否有未打补丁:**
:: 获取所有已安装补丁并保存到文件
wmic qfe list brief > installed_patches.txt
:: 假设待安装的补丁列表是 2.txt 文件
set patchlist=2.txt
:: 检查每个待安装的补丁
echo **开始检查未安装补丁:**
for /f "delims=" %%i in (%patchlist%) do (
:: 提取补丁编号(例如:CVE-2021-33739 或 MS17-017)
for /f "tokens=1 delims= " %%j in ("%%i") do (
findstr /i "%%j" installed_patches.txt > nul
if errorlevel 1 (
echo 未安装补丁: %%i
)
)
)
pause
对应补丁列表
CVE-2021-33739 [Microsoft DWM 核心库特权提升漏洞](Windows 10、20)
CVE-2021-1732 [Windows Win32k 提权漏洞] (Windows 10, 2019/20H2)
CVE-2020-0787【Windows后台智能传输服务提权漏洞】(Windows 7/8/10、2008/2012/2016/2019)
CVE-2020-0796 [Microsoft 服务器消息块 3.1.1 (SMBv3) 协议处理某些请求的方式中存在一个远程代码执行漏洞,即“Windows SMBv3 客户端/服务器远程代码执行漏洞”] (Windows 1903/1909 )
MS10-015 [KB977165] [KiTrap0D] (2003/2008/7/XP)
MS10-012 [KB971468] [SMB 客户端 Trans2 堆栈溢出] (Windows 7/2008R2)
MS09-050 [KB975517] [远程代码执行] (2008/Vista)
MS09-020 [KB970483] [IIS 6.0](IIS 5.1 和 6.0)
MS09-012 [KB959454] [Chimichurri] (Vista/win7/2008/Vista)
MS08-068 [KB957097] [远程代码执行] (2000/XP)
MS08-067 [KB958644] [远程代码执行] (Windows 2000/XP/Server 2003/Vista/Server 2008)
MS08-066 [KB956803] [AFD.sys] (Windows 2000/XP/Server 2003)
MS08-025 [KB941693] [Win32.sys] (XP/2003/2008/Vista)
MS06-040 [KB921883] [远程代码执行] (2003/xp/2000)
MS05-039 [KB899588] [PnP 服务] (Win 9X/ME/NT/2000/XP/2003)
MS03-026 [KB823980] [RPC接口中的缓冲区溢出](/ NT / 2000 / XP / 2003)
Linux Shell编程入门
学习导航
参考学习:https://mp.weixin.qq.com/s/qXZkKrF1vYtJv07L0-hkAA
三大过滤 grep、sed、awk: https://mp.weixin.qq.com/s/FllzdXOEIaZI12x8xLqe-A
正则表达:https://mp.weixin.qq.com/s/-4s_9OPrFEHkpIRPaQgLmg
简易案例:
- 统计登录日志中SSH爆破事件
#!/bin/bash echo "检查日志中登录失败记录(SSH爆破)[/var/log/auth.log]:" loginfailed=$(cat /var/log/auth.log | grep "Failed password" | awk '{print $1,$2,$3,$9,$11}') if [ -n "$loginfailed" ];then (echo "[!]日志中发现以下登录失败记录:" && echo "$loginfailed") (echo "[!]登录失败的IP及次数如下(疑似SSH爆破):" && grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort -nr | uniq -c) (echo "[!]登录失败的用户及次数如下(疑似SSH爆破):" && grep "Failed password" /var/log/auth.log | awk '{print $9}' | sort -nr | uniq -c) (echo "[!]SSH爆破用户名的字典信息如下:" && grep "Failed password" /var/log/auth.log | perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr) else echo "no" fi - 统计Web日志中的SQL攻击事件
#!/bin/bash select=$(cat access.log | grep "SELECT" | awk '{print $1}') if [ -n "$select" ];then echo ip:$select fi - Linux基线排查 https://github.com/sun977/Linuxgun
Windows权限
文件和目录权限
Windows 文件/目录权限是一组权限项的集合,常见的有:完全控制、修改、读取和执行、列出文件夹内容、读取、写入、拒绝等。
| 权限 | 英文 | 说明 |
|---|---|---|
| 完全控制 | Full Control | 允许对文件夹、子文件夹、文件进行全权控制,包括修改资源权限、获取所有者、删除资源等 |
| 修改 | Modify | 允许修改或删除资源,同时拥有写入、读取和运行权限 |
| 读取和运行 | Read & Execute | 允许读取和列出资源目录,也允许在资源中移动和遍历 |
| 列出文件夹目录 | List Folder Contents | 允许查看资源中的子文件夹与文件名称 |
| 读取 | Read | 允许查看文件夹中的文件及子文件夹,也允许查看文件夹属性、所有者、权限等 |
| 写入 | Write | 允许在文件夹中创建新文件和子文件夹,也可改变文件夹属性、查看所有者和权限等 |
| 拒绝 | Deny | 显式拒绝某项权限,优先级高于允许 |
注意:完全控制 ⊃ 修改 ⊃ 读取和运行/写入 ⊃ 读取。高权限包含低权限的大部分能力。
用户和用户组权限
内置用户组
| 用户组 | 英文 | 说明 |
|---|---|---|
| 管理员组 | Administrators | 拥有系统最高权限,可执行几乎所有操作 |
| 普通用户组 | Users | 标准用户,权限受限,不能修改系统关键设置 |
| 备份操作组 | Backup Operators | 可绕过文件权限进行备份/还原,常用于备份任务 |
| 其他内置组 | — | 根据预设权限执行特定任务 |
特殊权限用户
系统还设有以下特殊用户,它们不属于任何内置用户组,具有独立的权限:
| 特殊用户 | 说明 |
|---|---|
| System | 本地系统账户,拥有极高权限,系统服务默认以此身份运行 |
| TrustedInstaller | Windows 模块安装服务账户,拥有系统文件的所有权,用于保护核心系统文件 |
| Everyone | 包含所有用户(含匿名),权限设置需谨慎 |
| 其他 | 如 Authenticated Users、Network Service、Local Service 等 |
Linux 权限
UID 分配原则
| UID 范围 | 类型 | 说明 |
|---|---|---|
| 0 | 管理员 | root,拥有系统最高权限 |
| 1-999 | 系统内部账号 | 用于维护系统服务,一般不用于登录 |
| 1000-65534 | 普通账号 | 可以登录系统 |
/etc/passwd 文件
每行一个用户,字段用 : 分隔,共 7 个字段:
root:x:0:0:root:/root:/bin/bash
| 字段 | 示例 | 含义 |
|---|---|---|
| 用户名 | root | 登录的用户名 |
| 密码占位 | x | 是否需要密码,x 表示需要(真实密码在 /etc/shadow),空表示不需要 |
| UID | 0 | 用户 ID,系统识别用户的唯一标识 |
| GID | 0 | 组 ID |
| 用户描述 | root | 用户描述信息,可自定义 |
| 家目录 | /root | 用户的家目录,存放个人文件,登录时默认进入 |
| 登录 shell | /bin/bash | 登录系统后执行的 shell,登录时默认打开的 shell 类型 |
/etc/group文件
每行一个组,字段用 : 分隔,共 4 个字段:
erik:x:1000:erik
| 字段 | 示例 | 含义 |
|---|---|---|
| 组名 | erik | 组名称 |
| 密码占位 | x | 是否需要密码,x 表示需要,空表示不需要 |
| GID | 1000 | 组 ID |
| 组成员 | erik | 组内的成员列表 |
文件/目录的权限表示
文件类型标识(第 1 位)
| 符号 | 类型 | 说明 |
|---|---|---|
d | 目录 | directory |
- | 普通文件 | 二进制文件、文本文件、压缩包等 |
l | 链接文件 | 快捷方式 |
c | 字符设备 | 键盘、鼠标等设备 |
b | 块设备 | 存数据的设备(如硬盘) |
权限位解读
-rwxr-xr-x 2 root root
| 部分 | 示例 | 含义 |
|---|---|---|
| 第 1 位 | - | 文件类型 |
| 第 2-4 位 | rwx | 文件拥有人的权限 |
| 第 5-7 位 | r-x | 文件拥有组的权限(组内用户) |
| 第 8-10 位 | r-x | 其他人的权限 |
| 链接数 | 2 | 文件:硬链接数量;目录:该目录下有几个子目录 |
| 拥有人 | root | 文件的拥有人 |
| 拥有组 | root | 文件的拥有组 |

文件权限 vs 目录权限
同样的 r/w/x,对文件和目录的含义不同。
文件的权限
| 权限 | 含义 |
|---|---|
r (read) | 查看文件内容 |
w (write) | 编辑文件内容 |
x (execute) | 执行该文件 |
目录的权限
| 权限 | 含义 |
|---|---|
r (read) | 能够列出目录下面的文件 |
w (write) | 能够在该目录下创建和删除文件 |
x (execute) | 能进入该目录 |
重点:能否删除一个文件,取决于用户对该文件所在目录是否有
w权限,而不是对该文件本身是否有w权限。
权限的数字表示法
换算规则:r=4,w=2,x=1,-=0,一组权限相加;三位从左到右 = 拥有人 | 拥有组 | 其他人
| 数字 | 换算 | 拥有人 | 拥有组 | 其他人 | 典型用途 | |
|---|---|---|---|---|---|---|
| 777 | rwx rwx rwx | 读+写+执行 | 读+写+执行 | 读+写+执行 | 最宽松,危险,仅临时调试 | |
| 755 | rwx r-x r-x | 读+写+执行 | 读+执行 | 读+执行 | 目录、可执行程序 | |
| 700 | rwx — — | 读+写+执行 | 无 | 无 | 私有目录、私钥目录 | |
| 644 | rw- r– r– | 读+写 | 只读 | 只读 | 普通文件 | |
| 600 | rw- — — | 读+写 | 无 | 无 | 私密文件 |
本节知识点&思维导图
Windows&Linux-脚本开发-Bat&Shell
Windows&Linux-权限差异-文件&用户组

