增加了网工相关笔记,还有一点linux和git

This commit is contained in:
2026-06-23 22:30:02 +08:00
parent ac33e1197b
commit 0292147403
32 changed files with 726 additions and 6 deletions
+9 -5
View File
@@ -1,20 +1,24 @@
# 日常 List
> 这里放每天会自动刷新的小任务。完成后 Tasks 会按 `🔁 every day` 生成下一次。
- [ ] eNSP #daily 🔺 🔁 every day 📅 2026-06-23
- [ ] eNSP #daily 🔺 🔁 every day 📅 2026-06-24
- [x] eNSP #daily 🔺 🔁 every day 📅 2026-06-23 ✅ 2026-06-23
- [x] eNSP #daily 🔺 🔁 every day 📅 2026-06-22 ✅ 2026-06-22
- [x] eNSP #daily 🔺 🔁 every day 📅 2026-06-21 ✅ 2026-06-21
- [ ] Linux #daily 🔺 🔁 every day 📅 2026-06-23
- [ ] Linux #daily 🔺 🔁 every day 📅 2026-06-24
- [x] Linux #daily 🔺 🔁 every day 📅 2026-06-23 ✅ 2026-06-23
- [x] Linux #daily 🔺 🔁 every day 📅 2026-06-22 ✅ 2026-06-22
- [x] Linux #daily 🔺 🔁 every day 📅 2026-06-21 ✅ 2026-06-21
- [ ] C# #daily ⏫ 🔁 every day 📅 2026-06-23
- [ ] C# #daily ⏫ 🔁 every day 📅 2026-06-24
- [x] C# #daily ⏫ 🔁 every day 📅 2026-06-22 ✅ 2026-06-22
- [x] C# #daily ⏫ 🔁 every day 📅 2026-06-21 ✅ 2026-06-22
- [ ] C++ 或 UE #weekly ⏬ 🔁 every week
- [ ] 今日复盘:记录完成情况和明天第一件事 🔼 🔁 every day 📅 2026-06-23
- [ ] 今日复盘:记录完成情况和明天第一件事 🔼 🔁 every day 📅 2026-06-24
- [x] 今日复盘:记录完成情况和明天第一件事 🔼 🔁 every day 📅 2026-06-23 ✅ 2026-06-23
- [x] 今日复盘:记录完成情况和明天第一件事 🔼 🔁 every day 📅 2026-06-22 ✅ 2026-06-23
- [x] 今日复盘:记录完成情况和明天第一件事 🔼 🔁 every day 📅 2026-06-21 ✅ 2026-06-22
- [ ] 学习吉他 🔼 🔁 every day 📅 2026-06-23
- [ ] 学习吉他 🔼 🔁 every day 📅 2026-06-24
- [x] 学习吉他 🔼 🔁 every day 📅 2026-06-23 ✅ 2026-06-23
- [x] 学习吉他 🔼 🔁 every day 📅 2026-06-22 ✅ 2026-06-23
- [x] 学习吉他 🔼 🔁 every day 📅 2026-06-21 ✅ 2026-06-22
- [x] 今日复盘:记录完成情况和明天第一件事 🔼 🔁 every day 📅 2026-06-20 ✅ 2026-06-20
@@ -0,0 +1,269 @@
# 清理 Git 历史中的本地目录模板
这份模板用于把某个已经推送过的本地目录,从远端仓库的历史提交中移除。
适用场景:
```text
某个目录已经被 push 到远端
后来发现它不适合公开,例如简历、密码本、密钥、隐私资料
希望远端最新版本和历史提交中都不再包含它
但本地仍然要保留这个目录
```
## 参数
把下面这些参数替换成自己的实际值:
```text
<原仓库路径> 当前正在使用的本地仓库路径
<旧仓库备份路径> 原仓库的备份路径
<清理仓库路径> 新 clone 出来的临时清理仓库路径
<远端地址> GitHub/Gitee 等远端仓库地址
<分支名> 要重写并推送的分支,例如 master 或 main
<目录路径> 要从历史中移除的目录,例如 简历/
```
多个目录可以写多个 `--path`
```powershell
git filter-repo --path "<目录1>/" --path "<目录2>/" --invert-paths
```
## 重要提醒
如果目录里包含密码、Recovery Key、Token 等敏感信息,应先更换或吊销这些信息。
清理 Git 历史只能减少仓库历史中的暴露,不等于保证已经泄露的信息重新安全。
重写历史后,提交 ID 会变化,因此远端需要强推:
```powershell
git push --force-with-lease origin <分支名>
```
`--force-with-lease``--force` 更安全。它会先检查远端分支是否仍停在本地记录的位置,避免覆盖别人新推送的提交。
## 流程
### 1. 检查原仓库状态
进入当前本地仓库:
```powershell
cd "<原仓库路径>"
git status
```
如果有未提交修改,先提交、备份或手动处理。不要在状态混乱时重写历史。
### 2. 备份原仓库
把当前仓库复制或改名保留:
```powershell
cd "<原仓库的上级目录>"
ren "<原仓库文件夹名>" "<旧仓库备份文件夹名>"
```
也可以用资源管理器手动复制一份。
重点是保留本地私有目录,后面要从 old 里复制回新仓库。
### 3. 在非同步目录重新 clone
建议不要在 OneDrive、网盘同步目录里执行历史重写。
```powershell
cd "<临时工作目录>"
git clone <远端地址> "<清理仓库文件夹名>"
cd "<清理仓库路径>"
```
### 4. 清理历史
清理单个目录:
```powershell
git filter-repo --path "<目录路径>/" --invert-paths
```
清理多个目录:
```powershell
git filter-repo --path "<目录1>/" --path "<目录2>/" --invert-paths
```
说明:
```text
--path 指定要匹配的路径
--invert-paths 反转选择,保留其他路径,移除指定路径
```
如果提示不是 fresh clone,可以在确认备份无误后使用:
```powershell
git filter-repo --force --path "<目录路径>/" --invert-paths
```
### 5. 检查并恢复 remote
`git filter-repo` 可能会删除 `origin` remote。
检查:
```powershell
git remote -v
```
如果没有输出,重新添加:
```powershell
git remote add origin <远端地址>
```
### 6. 修改 .gitignore
把本地要保留、但以后不再提交的目录写入 `.gitignore`
```gitignore
/<目录路径>/
```
例如:
```gitignore
/简历/
```
提交 `.gitignore` 修改:
```powershell
git add .gitignore
git commit -m "Ignore local-only directory"
```
### 7. 获取远端状态
执行:
```powershell
git fetch origin
```
`fetch` 不是合并。它只是把远端当前状态下载到本地,例如更新 `origin/<分支名>`
这里的作用是让 `--force-with-lease` 能检查远端分支是否被别人更新过。
### 8. 强推清理后的历史
```powershell
git push --force-with-lease origin <分支名>
```
如果成功,远端 `<分支名>` 会被替换成清理后的新历史。
### 9. 检查清理结果
检查历史中是否还存在目标目录:
```powershell
git log --all -- "<目录路径>/"
```
没有输出,说明当前可见历史里已经找不到这个目录。
也可以检查远端分支:
```powershell
git fetch origin
git log origin/<分支名> -- "<目录路径>/"
```
### 10. 重建日常使用的本地仓库
回到原来的仓库位置,从远端重新 clone:
```powershell
cd "<原仓库的上级目录>"
git clone <远端地址> "<原仓库文件夹名>"
```
### 11. 复制回本地私有目录
从 old 备份中,把本地要保留但不提交的目录复制回新仓库:
```text
<旧仓库备份路径>/<目录路径>
复制到
<原仓库路径>/<目录路径>
```
### 12. 最终验证
进入新仓库:
```powershell
cd "<原仓库路径>"
git status
git check-ignore -v --no-index -- "<目录路径>/任意测试文件.md"
git log --all -- "<目录路径>/"
```
理想结果:
```text
git status 没有异常改动
git check-ignore 能看到 .gitignore 命中规则
git log 没有输出
```
## 常见问题
### filter-repo 不是 Git 命令
报错:
```text
git: 'filter-repo' is not a git command
```
说明还没有安装 `git-filter-repo`
可以尝试:
```powershell
python -m pip install git-filter-repo
```
### push 被拒绝 stale info
如果强推时报:
```text
! [rejected] <分支名> -> <分支名> (stale info)
```
通常是因为本地没有最新的 `origin/<分支名>` 信息。
先执行:
```powershell
git fetch origin
git push --force-with-lease origin <分支名>
```
### .gitignore 不会影响已跟踪文件
`.gitignore` 只影响未被跟踪的新文件。
如果某个文件已经被 Git 跟踪,需要取消跟踪:
```powershell
git rm --cached -r -- "<目录路径>"
git commit -m "Stop tracking local-only directory"
git push
```
这只会从 Git 跟踪列表中移除,不会删除本地实际文件。
+6
View File
@@ -0,0 +1,6 @@
语法:su \[-] \[用户名]
可以通过exit返回上一个用户或快捷键Ctrl+D
参数:
- -:切换后加载环境变量
- 用户名:不加默认切换到root
+7
View File
@@ -0,0 +1,7 @@
作用:sudo用来在非root账户上用root权限执行指令
使用权限:在sudo组的账号,例如创建系统时的账号
案例:
- sudo su - //用sudo来切换到root账号
+12
View File
@@ -0,0 +1,12 @@
Root用户:拥有最大的权限,可以增删改查所有内容包括系统本身,默认密码不存在
sudo passwd -S root显示L标识密码锁定
切换到root的指令用[[su]]
因为默认密码不存在,一般的su - root无法切换到root
使用普通用户切换到其他用户需要输入密码
使用root用户切换到其他用户无需输入密码
一种基于[[sudo指令]]组用户切换到root指令:sudo - su
sudo用户:创建系统时的用户
@@ -0,0 +1,7 @@
切换到root用户后,执行指令:visudo
该指令会自动通过vi打开/etc/sudoers
在文件中添加
`用户名 ALL=(ALL) NOPASSWD:ALL`
NOPASSWD表示使用sudo命令无需输入密码
View File
+3 -1
View File
@@ -1,3 +1,5 @@
ctrl+l:清空控制台
ctrl+w:删除指令的最近一部分
ctrl+w:删除指令的最近一部分
Ctrl+d:返回上一个用户
@@ -0,0 +1,241 @@
# 网络工程学习提纲
这份提纲先服务于笔记整理,目标不是一次写全,而是按模块逐步补齐。
## 01 二层交换技术
### 00 总览与交换基础
- 交换机、集线器、路由器的区别
- 冲突域与广播域
- 交换机二层转发流程:学习、泛洪、转发、老化
- 单播、广播、组播的基本概念
- 常见查看命令与基础排障思路
### 01 VLAN 与端口类型
- VLAN 的作用与划分广播域的意义
- VLAN ID、缺省 VLAN、管理 VLAN
- Access、Trunk、Hybrid 的区别
- Tag/Untagged、PVID 的含义
- 不同 VLAN 之间默认不能通信的原因
- VLAN 常见配置思路与常见故障点
### 02 MAC 与 ARP
- MAC 地址的概念与格式
- MAC 地址表的学习与老化
- ARP 的作用与请求/应答过程
- Gratuitous ARP 的基本用途
- ARP 欺骗、ARP 冲突的基本现象
- 结合抓包或报文流理解二层与三层寻址
### 03 STP 与环路防护
- 二层环路产生原因与危害
- STP 的基本思想与端口状态
- 根桥、根端口、指定端口的选举规则
- RSTP、MSTP 相比 STP 的改进点
- 边缘端口、BPDU 保护、根保护、环路保护
- 拓扑变化 TC 对网络的影响
### 04 链路聚合
- 链路聚合的作用:带宽提升与冗余
- 手工聚合与 LACP
- 聚合口与成员口关系
- 聚合成员一致性要求
- 聚合与 VLAN、STP 的联动
- 聚合故障的常见定位思路
### 05 二层安全与控制
- 端口隔离
- 风暴抑制
- MAC 地址绑定/限制
- DHCP Snooping
- 动态 ARP 检测的基本思路
- 常见接入口安全场景
### 06 二层排障
- 主机不通时的排查顺序
- VLAN 不通、Trunk 不放行、PVID 错误的表现
- STP 阻塞导致的链路现象
- 聚合协商失败的现象
- 结合 `display`/`show` 命令形成排障模板
## 02 三层路由技术
### 00 总览与三层转发
- 路由器与三层交换机的作用
- 三层转发的基本过程
- 路由表的意义
- 最长匹配原则
### 01 IP 编址与子网划分
- IPv4 地址结构
- 子网掩码与 CIDR 表示
- 网段地址、广播地址、可用主机范围
- 子网划分与 VLSM
- 常见编址题型与速算技巧
### 02 路由基础与直连路由
- 直连路由、下一跳、出接口
- 路由优先级与度量值的基本概念
- 路由表字段怎么看
- 三层接口与 VLANIF 的角色
### 03 静态路由与默认路由
- 静态路由的用途
- 缺省路由的用途
- 浮动静态路由
- 黑洞路由的基本概念
- 静态路由的典型实验场景
### 04 RIP
- 距离矢量协议特点
- RIP 的跳数限制
- RIP v1 与 v2 的区别
- 定时更新与收敛
- 水平分割、毒性逆转的基本概念
### 05 OSPF
- 链路状态协议特点
- Router ID、区域、骨干区域
- 邻居建立与基本报文类型
- DR/BDR 的作用
- 代价 Cost 与路由计算
- 单区域与多区域基本设计
- 常见邻居起不来的原因
### 06 ACL
- ACL 的作用与使用场景
- 基本 ACL 与高级 ACL
- 源地址、目的地址、协议、端口匹配
- 通配符掩码
- `permit``deny` 的逻辑
- 入方向与出方向
- ACL 与流量控制、NAT、PBR 的联动
### 07 三层排障
- 网关配置错误
- 掩码错误导致的通信异常
- 默认路由缺失
- 动态路由邻居/路由发布异常
- ACL 误拦截的排查思路
## 03 高可用与出口
### 00 总览
- 企业网络出口常见需求
- 高可用、冗余、负载分担的基本概念
### 01 默认网关冗余 VRRP
- VRRP 的作用
- Master/Backup 机制
- 虚拟 IP 与优先级
- 抢占与故障切换
- 典型园区网网关冗余场景
### 02 NAT
- NAT 的作用与使用原因
- 静态 NAT、动态 NAT、NAPT
- Easy IP 的基本思路
- 地址转换表怎么看
- NAT 常见故障与调试
### 03 策略路由 PBR
- 策略路由与普通路由的区别
- 按源地址/业务类型选路
- PBR 与 ACL 的配合
- 双出口分流的常见场景
### 04 双出口与链路冗余
- 主备出口
- 负载分担出口
- 运营商双线场景
- 路由跟踪与故障切换基本思路
### 05 高可用与出口排障
- NAT 不生效
- VRRP 不切换或频繁切换
- 双出口策略不命中
- 链路恢复后业务异常的原因
## 04 VPN 与隧道
### 00 总览
- VPN 与隧道技术解决什么问题
- 常见站点到站点与远程接入场景
### 01 PPP 与广域网基础
- PPP 的基本作用
- PAP、CHAP 的区别
- 广域网链路认证基础
### 02 GRE
- GRE 的用途
- 封装思路
- 为什么要用 GRE 传递路由协议或多种流量
### 03 IPsec
- IPsec 的目标:认证、完整性、加密
- AH 与 ESP 的区别
- 传输模式与隧道模式
- IKE 协商的基本过程
- 感兴趣流的匹配思路
### 04 GRE over IPsec
- 为什么叠加使用
- 配置逻辑
- 常见适用场景
### 05 L2TP
- L2TP 的基本用途
- 与 IPsec 配合的常见思路
- 远程接入基本场景
### 06 VPN 与隧道排障
- 隧道不起来的常见原因
- IKE 协商失败
- 感兴趣流不匹配
- 路由可达但业务不通的定位思路
## 05 网络服务与排障
### 00 总览
- 常见网络服务在企业网中的位置
- “地址获取、名称解析、时间同步、日志监控”整体关系
### 01 DHCP
- DHCP 的作用
- Discover、Offer、Request、ACK 过程
- 地址池、租期、网关、DNS 选项
- DHCP 中继
- 地址分配失败的常见原因
### 02 DNS
- DNS 的作用
- 递归查询与迭代查询
- 常见记录类型:A、CNAME、MX
- 域名解析失败的常见定位方法
### 03 NTP
- 时间同步的意义
- NTP 的基本工作方式
- 时间不同步对认证、日志、安全的影响
### 04 SNMP 与 Syslog
- SNMP 的用途
- 团体字/版本的基本概念
- Syslog 的用途
- 日志与监控联动思路
### 05 常见命令与综合排障
- `ping``tracert/traceroute`
- `arp``display mac-address``display ip routing-table`
- `display vlan``display stp`
- `display ospf peer``display nat session`
- 综合排障顺序:物理层、二层、三层、策略、服务
## 写作建议
- 每篇笔记尽量固定成 5 段:概念、作用、原理、配置思路、常见故障。
- 先写“为什么要用”,再写“怎么配”,最后写“配错会怎样”。
- 命令不一定一次写很多,但每篇最好有 3 到 5 个常用查看命令。
- 多写“现象 -> 原因 -> 排查命令 -> 修复思路”,这样后面复习更快。
- ACL、NAT、PBR 这类容易混的内容,尽量配一个小拓扑去理解流量方向。
@@ -0,0 +1,132 @@
# MAC 与 ARP
## MAC
MAC 一般指 **MAC 地址**,不是我们平时说的一种独立协议。
MAC 地址的主要作用是:
- 在二层网络中唯一标识网卡或接口
- 让交换机能够根据目的 MAC 地址进行转发
常见特点:
- MAC 地址长度为 48 位,通常写成 12 个十六进制数
- 前 24 位一般表示厂商标识,后 24 位一般由厂商分配
- 二层交换机维护 **MAC 地址表**,记录“某个 MAC 地址对应哪个接口”
交换机转发数据帧时的大致过程:
1. 先学习源 MAC 地址,并记录进入接口
2. 查看目的 MAC 地址是否在 MAC 地址表中
3. 如果表中有记录,就从对应接口转发
4. 如果表中没有记录,就进行泛洪
## ARP
ARP 是 **地址解析协议**,作用是把 **IP 地址解析为 MAC 地址**
ARP 的核心用途:
- 主机已知目标 IP 地址,但不知道目标 MAC 地址时,先通过 ARP 查询
- 查询到 MAC 地址后,再封装二层帧并发送数据
要注意:
- ARP 不是“基于 MAC 的协议”,而是“根据 IP 找 MAC 的协议”
- ARP 不是用来路由的
- 二层交换机转发主要看 **MAC 地址表**
- 主机或三层设备在发送数据前,往往先通过 **ARP 表** 找到下一跳或目标主机的 MAC 地址
ARP 工作过程大致如下:
1. 主机先查看本地 ARP 表中有没有目标 IP 对应的 MAC
2. 如果没有,就发送 ARP Request 广播
3. 目标主机收到后,返回 ARP Reply 单播
4. 发送方学到对方的 MAC 地址,并写入 ARP 表
5. 后续数据通信就可以正常封装并发送
## MAC 地址表与 ARP 表的区别
MAC 地址表:
- 维护设备:二层交换机
- 作用:记录 MAC 地址与接口的对应关系
- 用途:决定二层帧从哪个端口转发
ARP 表:
- 维护设备:主机、路由器、三层交换机
- 作用:记录 IP 地址与 MAC 地址的对应关系
- 用途:发送数据前完成二层封装
## 一句话理解
- **MAC 地址表解决“帧往哪一个接口走”**
- **ARP 表解决“这个 IP 对应哪个 MAC”**
## 常见问题
### 1. 为什么同网段通信需要 ARP
因为发送方虽然知道对方 IP,但真正发二层数据帧时,还需要知道对方的 MAC 地址。
### 2. 为什么跨网段通信也会用到 ARP
因为主机把数据交给网关时,实际封装的是 **网关接口的 MAC 地址**,所以仍然要先解析网关的 MAC。
### 3. ARP 广播会不会很多
会。ARP 请求是广播报文,所以网络里主机很多时,ARP 广播也会增多。
## 常见厂商命令
### 华为
查看 MAC 地址表:
```bash
display mac-address
```
查看 ARP 表:
```bash
display arp
```
查看接口简要信息:
```bash
display interface brief
```
查看某个 VLAN 的 MAC 学习情况:
```bash
display mac-address vlan 10
```
### 思科 Cisco
查看 MAC 地址表:
```bash
show mac address-table
```
查看 ARP 表:
```bash
show arp
```
或:
```bash
show ip arp
```
查看接口状态:
```bash
show ip interface brief
```
## 复习时容易写错的点
- MAC 地址不是“身份协议”,更准确地说是二层地址
- ARP 不是“绑定设备 IP 与 MAC 方便二层交换时的路由”,更准确地说是“把 IP 解析为 MAC,方便后续二层封装与转发”
- 交换机转发数据帧主要依据 MAC 地址表,不是 ARP 表
@@ -0,0 +1,7 @@
标题三个都是属于生成树协议
实际生产中无需太关心生成树的算法,知道效果即可
厂商默认的设备在机器芯片算力足够的情况下都是开启的
主要是作用是防止回环/广播风暴,当遇到链路某个节点疯狂转发相同包时,对包的转发请求进行丢弃
配置流程大概是开启相关生成树协议,指定边缘端口edge和根端口root,保护根端口
@@ -0,0 +1,9 @@
这是VLAN的三个配置
Access:通常对应终端例如PC、打印机
Trunk:通常对应交换机之间的链路
Hybrid:同时兼顾Access和Trunk的功能,应用场景较少
关于VLAN TAG
Access:接收时根据接口配置打VLAN TAG,发送时剥离VLAN TAG
Trunk:对于没有VLAN TAG的,打上Native Vlan TAG,对于不允许放行的,接收或发送时丢弃
Hybrid:自定义哪些VLAN打TAG,哪些VLAN不打TAG
@@ -0,0 +1,3 @@
Vlan协议是最常用的协议
主要用来隔离业务逻辑或减少广播区域的作用
用VLAN号来区别不同的区域
@@ -0,0 +1,3 @@
通常用于链路带宽不足够的时候
可以将两条物理链路在逻辑上汇聚成一条逻辑链路,起到增大带宽/提高可靠性的作用
@@ -0,0 +1 @@
# 06 ACL
@@ -0,0 +1 @@
# 01 IP 编址与子网划分
@@ -0,0 +1 @@
# 05 OSPF
@@ -0,0 +1 @@
# 04 RIP
@@ -0,0 +1 @@
# 03 静态路由与默认路由
@@ -0,0 +1 @@
# 02 NAT
@@ -0,0 +1 @@
# 01 默认网关冗余 VRRP
@@ -0,0 +1 @@
# 04 双出口与链路冗余
@@ -0,0 +1 @@
# 03 策略路由 PBR
@@ -0,0 +1 @@
# 02 GRE
@@ -0,0 +1 @@
# 04 GRE over IPsec
@@ -0,0 +1 @@
# 03 IPsec
@@ -0,0 +1 @@
# 05 L2TP
@@ -0,0 +1 @@
# 01 PPP 与广域网基础
@@ -0,0 +1 @@
# 01 DHCP
@@ -0,0 +1 @@
# 02 DNS
@@ -0,0 +1 @@
# 03 NTP
@@ -0,0 +1 @@
# 04 SNMP 与 Syslog