云涛雪浪蹙天浮,隐隐征帆去未休。
k3s 中 service 的域名结构
service(Cluster IP) 的域名结构为:<servicename>.<namespace>.svc.<clusterdomain> ,如:“lhweb-svc.lvhang.svc.cluster.local.”
pod(endpoint) 的IP解析为 77.0.42.10.in-addr.arpa name = 10-42-0-77.lhweb-svc.lvhang.svc.cluster.local.
winget 修改国内镜像
0.查看源
winget source list
1.删除原有 winget 源,需要管理员权限
winget source remove winget
2.添加中科大镜像源
winget source add winget https://mirrors.ustc.edu.cn/winget-source
3.恢复
winget source reset winget
ASP.NET Core 本地证书过期时
若使用 dotnet dev-certs https 工具重新生成证书仍然无效,可以前往 C:\Users\{username}\AppData\Roaming\ASP.NET\Https 目录下删除项目对应的证书文件并重新启动 visual studio。
linux 笔记 / 3.分区-格式化-挂载
1.查看磁盘(fdisk)
当你添加一个新的硬盘后,使用 fdisk -l 命令来查看系统中新添加硬盘,下图显示一块新添加并且没有进行分区的硬盘。
获取到硬盘的路径 /dev/sde 后就可以开始为硬盘创建分区。
2.创建分区(fdisk)
运行命令 sudo fdisk /dev/sde
后进入 fdisk 分区菜单选项,在菜单上下文中可以对硬盘的分区信息进行编辑。
输入 m 命令可以查看所有的命令。
使用 p 命令查看硬盘与分区信息。
使用 n 命令创建一个新的分区,默认是 GPT 分区格式。过程中需要输入分区的起点与终点。
之前的操作并未实际写入硬盘,最后我们输入 w 命令后就可以将之前所有的修改写入硬盘。
3. 格式化分区
在硬盘分区创建完成就可以为分区进行文件系统的初始化即格式化分区。在 linux 的 /sbin 目录中有多个对应不同格式的 mkfs 程序,如下面的列表所示:
- mkfs.bfs
- mkfs.cramfs
- mkfs.ext2
- mkfs.ext3
- mkfs.ext4
- mkfs.fat
- mkfs.minix
- mkfs.msdos
- mkfs.ntfs
- mkfs.vfat
下面的实例中,我们使用 mkfs.ext4 命令来为 /dev/sde1 分区创建文件系统。
4.挂载分区
分区格式化完成后,我们就可以挂在分区到指定目录来使用分区了。
挂在命令:以上面的分区路径 /dev/sde1 为例将分区挂在到 /mnt/disk1目录, 命令为 mount /dev/sde1 /mnt/disk1
5.自动挂载
如果需要在系统重启后分区能够自动被挂载需要修改配置文件 /etc/fstab。具体操作可参考 这盘文章 。
参考资料:
Linux磁盘操作:分区、格式化、挂载 – 知乎 (zhihu.com)
Ubuntu Manpage: fdisk – manipulate disk partition table
Ubuntu Manpage: mkfs – build a Linux filesystem
Ubuntu Manpage: mount – mount a filesystem
三和弦与七和弦基础知识
半音与音程
名称 | 度数 | 半音数 |
纯一度 | 1 | 0 |
小二度 | 2 | 1 |
大二度 | 2 | 2 |
小三度 | 3 | 3 |
大三度 | 3 | 4 |
纯四度 | 4 | 5 |
增四度 | 4 | 6 |
减五度 | 5 | 6 |
纯五度 | 5 | 7 |
小六度/增五度 | 6 | 8 |
大六度 | 6 | 9 |
小七度 | 7 | 10 |
大七度 | 7 | 11 |
纯八度 | 8 | 12 |
三和弦
由三个音按三度叠置而成的一种和弦称为三和弦,其中最常见的是大三和弦和小三和弦。表中数字为半音数量。
三和弦种类 | 标记 | 根音到三音 | 三音到五音 | 根音到五音 | 速记 |
大三和弦 | C | 大三度(4) | 小三度(3) | 纯五度(7) | 4+3 |
小三和弦 | Cm | 小三度(3) | 大三度(4) | 纯五度(7) | 3+4 |
增三和弦 | Caug | 大三度(4) | 大三度(4) | 增五度(8) | 4+4 |
减三和弦 | Cdim | 小三度(3) | 小三度(3) | 减五度(6) | 3+3 |
七和弦
七和弦即加入了七音的和弦,所谓七音就是相对于和弦根音的第七个音(在自然音阶内),下表是以C大调音阶中的7级和弦。(七音就是根音前面的一个音)
级数 | 和弦标记 | 和弦名称 | 和弦组成音 | 助记 |
Ⅰ | Cmaj7 | 大七和弦 | C E G B / 4+3+4 | C(大三度) + Em(小三) |
Ⅱ | Dm7 | 小七和弦 | D F A C / 3+4+3 | D(小三度) + F(大三) |
Ⅲ | Em7 | 小七和弦 | E G B D / 3+4+3 | E(小三度) + G(大三) |
Ⅳ | Fmaj7 | 大七和弦 | F A C E / 4+3+4 | F(大三度) + Am(小三) |
Ⅴ | G7 | 大小七和弦 | G B D F / 4+3+3 | G(大三度) + Bdim(减三) |
Ⅵ | Am7 | 小大七和弦 | A C E G / 3+4+3 | A(小三度) + C(大三) |
Ⅶ | Bm7-5 | 半减七和弦 | B D F A / 3+3+4 | B(小三度) + Dm(小三) |
和弦名称 | 和弦标记(以C为例) | 组成音(以C为例) | 助记 |
小大七和弦 | CmM7 | 1 ♭3 5 7 / 3+4+4 | Cm + 大三度 |
减七和弦 | Cdim7 | 1 ♭3 ♭4 6 / 3+3+3 | Cdim + 小三度 |
半增七和弦 | Cmaj7+5 | 1 3 #5 7 / 4+4+3 | Caug + 小三度 |
CmM标记中的 m 表示小三和弦,M表示大三度。半增七和弦可以读作大七升五和弦,如C大七升五和弦。
三和弦与七和弦规则
在熟悉三和弦的基础上可以很快的找出对应的七和弦
和弦名称 | 标记 | 与三和弦关系 |
大七和弦 | Cmaj7 | C + 大三度 |
小七和弦 | Cm7 | Cm + 小三度 |
大小七和弦/属七和弦 | C7 | C + 小三度 |
小大七和弦 | CmM7 | Cm + 大三度 |
减七和弦 | Cdim7 | Cdim + 小三度 |
半增七和弦 | Cmaj7+5 | Caug + 小三度 |
几个乐理名词的理解
自然音阶
自然音阶一词最早来源于古希腊的自然音列音属(diatonic genus)。在现代的音乐理论中,自然音阶是一种特殊的七声音阶(heptatonic scale)——它们总是包含五个全音和两个半音,且按照“全-全-半-全-全-全-半”或其它不同顺序(如“全-半-全-全-全-半-全”等)在一个八度内排列。
自然音阶的七种调式(mode)
调名 | 音阶关系 | 说明 |
Ionian | 全全半全全全半 | 自然大调,以首调唱名do为主音的调式 |
Dorian | 全半全全全半全 | 小调类调式,以首调唱名re为主音的调式 |
Phrygian | 半全全全半全全 | 小调类调式,以首调唱名mi为主音的调式 |
Lydian | 全全全半全全半 | 大调类调式,以首调唱名fa为主音的调式 |
Mixolydian | 全全半全全半全 | 大调类调式,以首调唱名sol为主音的调式 |
Aeolian | 全半全全半全全 | 自然小调,以首调唱名la为主音的调式 |
Locrian | 半全全半全全全 | 最具小调特点的调式,以首调唱名si为主音的调式 |
关系调
关系调,指一对调号相同的大、小音阶。例如:C大调跟a小调。也就是关系大小调用的音列是一样的,但是主音不同。比如C大调的音阶是C、D、E、F、G、A、B;a小调的音阶是:A、B、C、D、E、F、G。
大调 | 小调 |
---|---|
C 大调 | a 小调 |
G 大调 | e 小调 |
D 大调 | b 小调 |
A 大调 | f# 小调 |
E 大调 | c# 小调 |
B/C♭ 大调 | g#/a♭小调 |
F#/G♭ 大调 | d#/e♭ 小调 |
D♭/C# 大调 | b♭/a# 小调 |
A♭ 大调 | f 小调 |
E♭ 大调 | c 小调 |
B♭ 大调 | g 小调 |
F 大调 | d 小调 |
调式、调号、调高
调式(mode),若干高低不同的乐音,围绕某一有稳定感的中心音,按一定的音程关系组织在一起,成为一个有机的体系,称为调式。比如自然大调就是一种调式
调号(signature),五线谱的谱号旁边会有一些升降号。这个谱号加上升降号便称为是调号。
调高(key),在自然大调或小调中以不同的音作为主音,比如 C大调,G大调。
参考资料:
自然音阶 – 维基百科,自由的百科全书 (wikipedia.org)
调式 – 维基百科,自由的百科全书 (wikipedia.org)
关系调 – 维基百科,自由的百科全书 (wikipedia.org)
七种七和弦的现代标记 – 知乎 (zhihu.com)
调高(key)与调号 – 知乎 (zhihu.com)
linux 查看磁盘信息常用命令
请将命令中的 /dev/sdx
替换为你指定的硬盘。
命令 | 说明 |
df -h | 显示文件系统的磁盘空间使用情况 |
du -sh * | 查看当前目录下文件与文件夹的大小 |
sudo hdparm -I /dev/sdx | 查看硬盘参数 |
sudo hdparm -C /dev/sdx | 查看磁盘运行状态 |
sudo smartctl -a /dev/sdx | 查看硬盘 smart 信息 |
sudo smartctl -H /dev/sdx | 硬盘健康检查 |
lsblk | 显示系统中块设备 |
sudo blkid /dev/sdx | 查看块设备的PTUUID 和 PTTYPE |
lshw | 显示系统中所有硬件设备的详细信息 |
linux 笔记 / 2.文件系统
上一篇介绍了分区格式,相比于主流的分区格式 MBR 和 GPT,文件系统的格式要多很多。
在完成磁盘分区后,每个空白的分区就是给操作系统保存文件的仓库,操作系统为了管理文件需要以特定的格式保存文件,这个格式需要支持文件的读写,检索,权限,日志记录等功能,也就是为操作系统提供管理磁盘空间以及其中的文件的机制。
下表列举了常用操作系统使用的文件系统。
文件系统 | 开发者 | 发布年份 | 原操作系统 |
FAT32 | Microsoft | 1996 | Windows 95 |
exFAT | Microsoft | 2006 | Windows CE 6.0 / XP SP3 / Vista SP1 |
NTFS | Microsoft | 1993 | Windows NT 3.1 |
ext4 | 开源 | 2006 | Linux |
HFS+ | Apple | 1998 | Mac OS 8.1 |
常见文件系统的特性
分区格式 | 最大单个文件 | 最大支持分区 |
FAT32 | 4G | 2TB |
exFAT | 127 PB | 64 ZB |
NTFS | 16 EB | 16 EB |
ext4 | 16 TB | 1 EB |
HFS+ | 8 EB | 8 EB |
1ZB = 1024EB,1EB = 1024PB,1PB = 1024TB,1TB = 1024GB
FAT (File Allocation Table)
FAT文件系统系列包括 FAT、FAT16、FAT32 和 exFAT ,目前仍旧常见的是FAT32 和 exFAT,源于它良好的兼容性目前在U盘上用的比较多。其中exFAT 就是一种适用于闪存的文件系统。2019年8月,微软公开了exFAT 的技术文档,并支持将 exFAT 功能集成到 Linux内核中。Linux内核于版本5.4中提供初步支持。
NTFS (New Technology File System)
NTFS 包含多个版本,最早为 1993 年发布的 1.0 版本,以及最新的于 Window XP 发布的 3.1 版本,对应系统中 NTFS.sys 文件的版本号 5.1,需要注意区别。
在 linux 系统上,完整并安全的对 NTFS 的读写功能由 NTFS-3G 驱动程序提供。这是一个由 Tuxera 公司开发并维护的自由软件项目,采用GNU通用公共许可证发布,旨在为非微软Windows NT 系的操作系统提供安全快速、具备读写功能的NTFS文件系统驱动程序。
ext (extended filesystem)
ext 系列文件系统包括 ext、ext2、ext3 和 ext 4。其中的 ext或ext1 发表于1992年4月,它是第一个利用虚拟文件系统实现出的文件系统,在linux核心0.96c版中首次加入支持,最大可支持2GB的文件系统。后续版本特性如下表,
名称 | 开发者 | 发布时间 | 最大文件 | 最大分区 | |
ext2 | Rémy Card | 1993 | 2TB | 32TB | |
ext3 | Stephen Tweedie | 1999 | 2TB | 32TB | |
ext4 | 多人[1] | 2006 | 16 TB | 1 EB |
其中 ext4 于 2008年12月25日在 Linux 2.6.29 版公开发布之后成为 Linux 官方建议的默认文件系统。
参考资料:
文件系统的对比 – 维基百科,自由的百科全书 (wikipedia.org)
NTFS – 维基百科,自由的百科全书 (wikipedia.org)
exFAT – 维基百科,自由的百科全书 (wikipedia.org)
ext4 – 维基百科,自由的百科全书 (wikipedia.org)
linux 笔记 / 1.磁盘分区
本文的内容并不特定于 linux,只是作为后续学习的一个基础。
一块磁盘需要分区后才能被操作系统使用,那么分区具体是什么样的呢?
目前两种最主流的分区格式是 MBR(Master Boot Record) 和 GPT(GUID Partition Table)。下面这张表说明了两种分区格式的主要特点。
分区 | 分区数量 | 最大分区容量 | 始于 | 固件支持 |
MBR | 4个主分区+扩展分区 | 2TiB | 1983 | BIOS |
GPT | 128个主分区 | 512B扇区磁盘8ZiB 4KB扇区磁盘64ZiB | 20世纪90年代后期 | UEFI |
在创建特定的分区后会在磁盘上写入分区表信息,其中 MBR 分区表的长度为512字节,从磁盘的0柱面,0磁头,1扇区开始写入。在这512字节的数据中,前446字节为引导程序代码,之后的64字节即为MBR的分区信息,最后还有两位结束标志(55AA)。具体可参考下面两张图,一张为MBR位于磁盘位置示意,另一张为MBR数据结构图。
在介绍 GPT 格式之前先介绍 LBA 概念,磁盘的一个扇区为512字节,现在由于 4K 扇区磁盘的出现,所以引入逻辑区块地址(LBA, Logical Block Address)概念, LBA 在一般磁盘是 512字节,在 4K 磁盘上就是 4K。
GPT 使用34个LBA来记录信息,其中的第一部分 LAB0 为 Protectiv MBR, 这块区域是为了提供最基本的向后兼容 ,不至于在旧系统上让系统认为这块磁盘还未被分区,以减少意外删除。
之后的LAB1称为 Primary GPT Header,它保存了磁盘以及分区表的信息。之后的 LBA2~LAB34 都用于保存分区表,每个LBA 可保存四个分区信息,总共可保存128个分区的信息。
对于GPT分区信息相对于 MBR 有一点比较特殊,GPT 分区会在磁盘的尾部,即 LBA-1 至 LBA-34 备份一份 GPT 分区信息以提高分区信息的完整性和健壮性。
GPT 分区信息的 bootloader code 并不是保存在分区信息中的,对于作为启动盘的 GPT 磁盘会有一个专门的 EFI 分区来保存启动程序。
除了 MBR 和 GPT,还有一些历史上的或者并不常见的分区格式,有兴趣的可参考下图再深入研究。
参考资料:
MBR VS GPT | What’s the Difference and Which Is Better – EaseUS
GUID Partition Table – Wikipedia
Where is the bootloader located in GPT-based drives? – Quora
web存储技术简要
web 的浏览器端存储技术主要是 cookie,localStorage, sessionStorage, indexedDB, webSQL。
技术名称 | 访问对象 | 大小限制 |
cookie | document.cookie | 4KB |
localStorage | window.localStorage | 5MB(chrome) |
sessionStorage | window.sessionStorage | 5MB(chrome) |
indexedDB | window.indexedDB | 通常为2GB |
其中 cookie 可通过服务器 set-cookie 响应标头进行设置;sessionStorage 存储的内容在用户关闭页面或浏览器窗口后被清楚;localStorage 和 sessionStorage 是协议敏感的,也就是说在分别使用 http 和 https 访问时, localStorage 和 sessionStorage 都是隔离的。
websql 并不是 w3c 的标准,不过chrome,edge 浏览器都是支持的, 它以 sqlite 作为后端的存储技术。
参考资料:
https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie
https://developer.mozilla.org/zh-CN/docs/Web/API/Storage
https://developer.mozilla.org/zh-CN/docs/Web/API/IndexedDB_API
输出 EF Core 执行的 sql 语句
首先引入 Microsoft.Extensions.Logging.Debug 包,然后在 DbContext 类中的 OnConfiguring 方法中添加如下代码:
public static readonly LoggerFactory LoggerFactory = new LoggerFactory(new[] { new DebugLoggerProvider() });
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//...
optionsBuilder.UseLoggerFactory(LoggerFactory);
//
}
这样在启动调试的时候,就可以在 Visual Studio 底部的调试输出中看到 EF Core 执行 sql 的信息了。