【基础入门-15】系统命令&终端脚本&Shell编程&Bat批处理&文件属性权限&用户及组划分

系统命令集合

在线参考: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 命令行单百分号 %ifor %i in (*) do echo %i
批处理文件 (.bat)双百分号 %%ifor %%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本地系统账户,拥有极高权限,系统服务默认以此身份运行
TrustedInstallerWindows 模块安装服务账户,拥有系统文件的所有权,用于保护核心系统文件
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),空表示不需要
UID0用户 ID,系统识别用户的唯一标识
GID0组 ID
用户描述root用户描述信息,可自定义
家目录/root用户的家目录,存放个人文件,登录时默认进入
登录 shell/bin/bash登录系统后执行的 shell,登录时默认打开的 shell 类型

/etc/group文件

每行一个组,字段用 : 分隔,共 4 个字段:

erik:x:1000:erik
字段示例含义
组名erik组名称
密码占位x是否需要密码,x 表示需要,空表示不需要
GID1000组 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,一组权限相加;三位从左到右 = 拥有人 | 拥有组 | 其他人

数字换算拥有人拥有组其他人典型用途
777rwx rwx rwx读+写+执行读+写+执行读+写+执行最宽松,危险,仅临时调试
755rwx r-x r-x读+写+执行读+执行读+执行目录、可执行程序
700rwx — —读+写+执行无无私有目录、私钥目录
644rw- r– r–读+写只读只读普通文件
600rw- — —读+写无无私密文件

本节知识点&思维导图

Windows&Linux-脚本开发-Bat&Shell

Windows&Linux-权限差异-文件&用户组

十二亿七千光年
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇