Windows
- LockHunter
- Honeyview
- Snipaste
- Sysinternals Suite, live.sysinternals.com
- TreeSizeFree-Portable
- etcher
- ContextMenuManager
- Fork
- OpenArk
- Geek Uninstaller
- QuickLook
WSL2
Linux
Mac
Tools
Network
C++
Docs
Assembly: x86 Assembly Guide, x86 and amd64 instruction reference
Cryptography: Everything you should know about certificates and PKI but are too afraid to ask, 关于证书(certificate)和公钥基础设施(PKI)的一切(SmallStep, 2018)
Misc
bash 文件中 set 命令的帮助文档
bash -c "help set"
让 CPU 使用率达到 100%
while : ; do : ; done
关于 kB 和 KiB 的区别
1 kibibyte (KiB) = 1,024 bytes
1 kilobyte (kB) = 10**3 bytes
1 mebibyte (MiB) = 1,024**2 bytes = 1,048,576 bytes
1 megabyte (MB) = 1,000**2 bytes = 10**6 bytes
1 gibibyte (GiB) = 1,024**3 bytes = 1,073,741,824 bytes
1 gigabyte (GB) = 1,000**3 bytes = 10**9 bytes
当表示计算机中数据量的大小时,K、M、G、T等单位之间的进制都是 1024。
当表示网速时,K、M、G、T等单位之间的进制都是 1000。
查找
<
和>
包裹的字符串,<
前不是 ‘`‘ 字符并且>
后也不是 ‘`‘ 字符的正则表达式:# (?<!`)<.+?>(?!`) grep -P '(?<!`)<.+?>(?!`)' -R -n .
YAML 多行字符串标记对照表
总结
a. `|` 系列:保留原样换行
b. `>` 系列:换行转空格
c. `+`:保留结尾空行
d. `-`:删除结尾空行
举例
测试脚本literal_block: | Line 1 Line 2 Line 3 literal_block_plus: |+ Line 1 Line 2 Line 3 literal_block_strip: |- Line 1 Line 2 Line 3 folded_block: > Line 1 Line 2 Line 3 folded_block_plus: >+ Line 1 Line 2 Line 3 folded_block_strip: >- Line 1 Line 2 Line 3
结果import yaml with open('demo.yaml', 'r', encoding='utf-8') as f: data = yaml.safe_load(f) for key, value in data.items(): print(f"{key}:\n{repr(value)}\n{'-'*40}")
literal_block: 'Line 1\nLine 2\nLine 3\n' ---------------------------------------- literal_block_plus: 'Line 1\nLine 2\nLine 3\n\n\n' ---------------------------------------- literal_block_strip: 'Line 1\nLine 2\nLine 3' ---------------------------------------- folded_block: 'Line 1 Line 2 Line 3\n' ---------------------------------------- folded_block_plus: 'Line 1 Line 2 Line 3\n\n\n' ---------------------------------------- folded_block_strip: 'Line 1 Line 2 Line 3' ----------------------------------------
处理 iptables 命令可能查看不到规则端口信息的问题
整理 Kubernetes 的 NodePort 规则时可能会遇到使用 iptables 命令查看 KUBE-NODEPORTS 链时无法查看到 tcp 端口的问题。
这个时候就需要使用nft list chain ip nat KUBE-NODEPORTS
来查看才行。
nft
命令可以通过命令apt install nftables
来安装。
与命令iptables-save
等价的命令是nft list ruleset
。
https://www.reddit.com/r/kubernetes/comments/1bf8rma/nodeport_kubeproxy_v126_no_longer_has_destination/处理无法查看 iptables 中 log 目标输出的日志的问题
可以使用命令echo 1 > /proc/sys/net/netfilter/nf_log_all_netns
强制系统记录所有的日志。
https://stackoverflow.com/questions/39632285/how-to-enable-logging-for-iptables-inside-a-docker-container清空 iptables 的所有规则
iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -t raw -F iptables -t raw -X iptables -t raw -Z iptables -t mangle -F iptables -t mangle -X iptables -t mangle -Z iptables -t nat -F iptables -t nat -X iptables -t nat -Z iptables -t filter -F iptables -t filter -X iptables -t filter -Z iptables -t security -F iptables -t security -X iptables -t security -Z ip6tables -P INPUT ACCEPT ip6tables -P FORWARD ACCEPT ip6tables -P OUTPUT ACCEPT ip6tables -t raw -F ip6tables -t raw -X ip6tables -t raw -Z ip6tables -t mangle -F ip6tables -t mangle -X ip6tables -t mangle -Z ip6tables -t nat -F ip6tables -t nat -X ip6tables -t nat -Z ip6tables -t filter -F ip6tables -t filter -X ip6tables -t filter -Z ip6tables -t security -F ip6tables -t security -X ip6tables -t security -Z
设置 pip 使用的 mirror
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ pip config set install.trusted-host mirrors.aliyun.com
设置 Ubuntu 使用的 http 代理
在使用 sudo 时,如果想环境变量中的代理设置依然有效,可以编辑 `/etc/sudoers` 文件export http_proxy=http://localhost:7890 export https_proxy=http://localhost:7890 # minikube proxy # https://minikube.sigs.k8s.io/docs/handbook/vpn_and_proxy/ export HTTP_PROXY=http://localhost:7890 export HTTPS_PROXY=https://localhost:7890 export NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.59.0/24,192.168.49.0/24,192.168.39.0/24 # git http/https proxy git config --global http.proxy http://localhost:7890 git config --global https.proxy http://localhost:7890 # ssh proxy (nc) # 注意 nc 支持 socks 4, socks 5 或者 https 代理,如果要使用 http 代理可以使用 ncat cat << EOF >> ~/.ssh/config Host github.com User git ProxyCommand nc -x localhost:7890 -Xconnect %h %p EOF # ssh proxy (ncat) # ncat command comes from nmap(https://nmap.org/dist/nmap-7.92-setup.exe) cat << EOF >> ~/.ssh/config Host github.com User git ProxyCommand ncat --proxy localhost:7890 --proxy-type http %h %p EOF # or use http proxy when available cat << EOF >> ~/.ssh/config # https://man.openbsd.org/ssh_config Match host github.com exec "ncat -z 127.0.0.1 7890" ProxyCommand ncat --proxy 127.0.0.1:7890 --proxy-type http %h %p EOF # apt proxy cat << EOF | sudo tee /etc/apt/apt.conf.d/proxy.conf Acquire { HTTP::proxy "http://localhost:7890"; HTTPS::proxy "http://localhost:7890"; } EOF
+ Defaults:%sudo env_keep += "http_proxy https_proxy ftp_proxy all_proxy no_proxy"
设置 Ubuntu 使用的 mirror
cp /etc/apt/sources.list /etc/apt/sources.list.bak sed -i "s@http://.*archive.ubuntu.com@https://mirrors.bfsu.edu.cn@g" /etc/apt/sources.list sed -i "s@http://.*security.ubuntu.com@https://mirrors.bfsu.edu.cn@g" /etc/apt/sources.list apt update
Ubuntu 安装 Docker
镜像:https://mirrors.bfsu.edu.cn/help/docker-cesudo groupadd docker sudo usermod -aG docker $USER newgrp docker
路径为:{ "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "experimental": false, "features": { "buildkit": true } }
/etc/docker/daemon.json
或/var/snap/docker/current/config/daemon.json
。修改 Docker 的 cgroup driver 为 systemd
将上面的内容添加到 Docker 的配置文件中,路径一般为:{ + "exec-opts": ["native.cgroupdriver=systemd"] }
/etc/docker/daemon.json
。Ubuntu 安装 Golang
# https://golang.google.cn/dl/ # https://golang.google.cn/doc/install # https://goproxy.cn/ wget -O - https://golang.google.cn/dl/go1.19.1.linux-amd64.tar.gz | tar -C $HOME -xz export PATH=$PATH:$HOME/go/bin go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct # ubuntu sudo add-apt-repository ppa:longsleep/golang-backports sudo apt update && sudo apt install golang -y
Ubuntu 安装 podman 及 podman-compose
修改# podman(https://podman.io/getting-started/installation) sudo apt install podman # podman-compose(https://github.com/containers/podman-compose) sudo apt install python3-pip pip3 install podman-compose # qemu-system sudo apt-get install qemu-system-x86 # gvproxy wget -O gvproxy https://github.com/containers/gvisor-tap-vsock/releases/download/v0.4.0/gvproxy-linux chmod +x gvproxy sudo mv ./gvproxy /usr/libexec/podman/
/etc/containers/registries.conf
文件,让 podman 能够支持从 docker 上拉取镜像+ unqualified-search-registries = ["docker.io", "quay.io"]
Ubuntu 安装 Homebrew
# 官网:https://brew.sh/ # 镜像:https://mirrors.bfsu.edu.cn/help/homebrew/ export HOMEBREW_INSTALL_FROM_API=1 export HOMEBREW_API_DOMAIN="https://mirrors.bfsu.edu.cn/homebrew-bottles/api" export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.bfsu.edu.cn/homebrew-bottles" export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.bfsu.edu.cn/git/homebrew/brew.git" export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.bfsu.edu.cn/git/homebrew/homebrew-core.git" git clone --depth=1 https://mirrors.bfsu.edu.cn/git/homebrew/install.git brew-install /bin/bash brew-install/install.sh rm -rf brew-install test -r ~/.zshrc && echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.zshrc
Caddy
# To install cloudflare, run the following command # caddy add-package github.com/caddy-dns/cloudflare # https://caddyserver.com/docs/caddyfile/options { #debug log { output file /var/log/caddy/caddy.log format json level ERROR } } # default directives order: https://caddyserver.com/docs/caddyfile/directives#directive-order site { tls !!!email tls { dns cloudflare !!!key } root * /usr/share/caddy file_server #reverse_proxy 127.0.0.1:8080 @websockets { path /ws header Connection upgrade header Upgrade websocket } #reverse_proxy @websockets unix//dev/shm/ws.sock reverse_proxy @websockets 127.0.0.1:9090 }
Windows11 开启 DoH
1. 查看系统自带支持的 DoH 服务器地址
2. 添加常用的 DoH 服务器# 方式一 Get-DnsClientDohServerAddress # 方式二 netsh dns show encryption
3. 配置系统网络 在系统设置 "Network & internet > Ethernet" 中将# DNSPod https://www.dnspod.cn/products/publicdns netsh dns add encryption server=119.29.29.29 dohtemplate=https://doh.pub/dns-query autoupgrade=no udpfallback=no netsh dns add encryption server=2402:4e00:: dohtemplate=https://doh.pub/dns-query autoupgrade=no udpfallback=no # AliDNS https://alidns.com/ netsh dns add encryption server=223.5.5.5 dohtemplate=https://dns.alidns.com/dns-query autoupgrade=no udpfallback=no netsh dns add encryption server=223.6.6.6 dohtemplate=https://dns.alidns.com/dns-query autoupgrade=no udpfallback=no netsh dns add encryption server=2400:3200::1 dohtemplate=https://dns.alidns.com/dns-query autoupgrade=no udpfallback=no netsh dns add encryption server=2400:3200:baba::1 dohtemplate=https://dns.alidns.com/dns-query autoupgrade=no udpfallback=no
DNS Server assignment
由Automatic (DHCP)
改为Manual
并设置
4. 使用 https://www.dnsleaktest.com/ 测试| IPv4 | On | | Preferred DNS | 119.29.29.29 | | DNS over HTTPS | On (automatic template) | | Fallback to plaintext | Off | | Alternate DNS | | | DNS over HTTPS | Off | | IPv6 | On | | Preferred DNS | 2402:4e00:: | | DNS over HTTPS | On (automatic template) | | Fallback to plaintext | Off | | Alternate DNS | | | DNS over HTTPS | Off |
Windows11 中为 WSL2 开启 KVM 支持权限设置
1. 确保内核版本比较新
2. 将用户添加到组 kvm 中# 如果需要更新内核可以手动到 https://www.catalog.update.microsoft.com/Search.aspx?q=wsl 下载预编译好的内核 $ uname -r 5.15.79.1-microsoft-standard-WSL2
3. 修改 https://learn.microsoft.com/en-us/windows/wsl/wsl-config$ sudo usermod -a -G kvm ${USER}
4. 确认 kvm 可用$ cat << EOF | sudo tee /etc/wsl.conf [boot] command = /bin/bash -c 'chown root:lvm /dev/kvm && chmod 660 /dev/kvm' [wsl2] nestedVirtualization=true EOF
$ kvm-ok INFO: /dev/kvm exists KVM acceleration can be used
Windows 中为 Hyper-V 中的虚拟机开启虚拟化支持
在 Windows 中以管理员身份打开 powershell
进入虚拟机,确认虚拟化是否已经开启# 查看有哪些虚拟机 $ Get-VM Name State CPUUsage(%) MemoryAssigned(M) Uptime Status Version ---- ----- ----------- ----------------- ------ ------ ------- UbuntuServer22.04 Running 0 12288 00:42:38.0460000 Operating normally 9.0 # 查看指定虚拟机是否已经打开了虚拟化 $ Get-VMProcessor -VMName UbuntuServer22.04 | fl | findstr ExposeVirtualizationExtensions ExposeVirtualizationExtensions : False # 开启指定虚拟机的虚拟化支持 $ Set-VMProcessor -ExposeVirtualizationExtensions $true -VMName UbuntuServer22.04 # 确认指定虚拟机开启了虚拟化 $ Get-VMProcessor -VMName UbuntuServer22.04 | fl | findstr ExposeVirtualizationExtensions ExposeVirtualizationExtensions : True
$ egrep -o 'vmx|xvm' /proc/cpuinfo vmx
Windows 中配置 Hyper-V 中的虚拟机使用 WSL 同网段的静态 IP
首先获取 WSL 的信息
在 Hyper-V Manager 中配置虚拟机使用名为$ ip a show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1280 qdisc mq state UP group default qlen 1000 link/ether 00:15:5d:51:33:53 brd ff:ff:ff:ff:ff:ff inet 172.31.203.89/20 brd 172.31.207.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::215:5dff:fe51:3353/64 scope link valid_lft forever preferred_lft forever $ ip r default via 172.31.192.1 dev eth0 proto kernel
WSL
的虚拟交换机,并使用静态的 MAC 地址。
配置 Hyper-V 中的 Ubuntu 虚拟机使用静态 IP 地址172.31.203.100
,编辑文件/etc/netplan/50-cloud-init.yaml
然后使用命令network: version: 2 ethernets: eth0: addresses: - 172.31.203.100/20 routes: - to: default via: 172.31.192.1 nameservers: addresses: [172.31.192.1]
netplan apply
应用修改即可。Windows 11 中允许局域网访问 WSL2
将下面的内容添加到C:\Users\%USERNAME%\.wslconfig
文件中
并在 Windows 中使用命令[wsl2] networkingMode=mirrored dnsTunneling=true firewall=true autoProxy=true [experimental] hostAddressLoopback=true
wsl --shutdown
重启 WSL2 后即可生效。 参考:https://learn.microsoft.com/en-us/windows/wsl/wsl-configWindows Terminal 配置
{ "actions": [ { "command": { "action": "copy", "singleLine": false }, "id": "User.copy", "keys": "ctrl+shift+c" }, { "command": "paste", "id": "User.paste", "keys": "ctrl+shift+v" } ], "copyOnSelect": true, "multiLinePasteWarning": false, "defaults": { "adjustIndistinguishableColors": "never", "antialiasingMode": "cleartype", "bellStyle": "taskbar", "closeOnExit": "always", "colorScheme": "Dracula+", "cursorShape": "filledBox", "experimental.retroTerminalEffect": false, "font": { "face": "CaskaydiaMono Nerd Font Propo", "size": 13.0, "weight": "normal" }, "historySize": 9999999, "intenseTextStyle": "all", "opacity": 90, "padding": "6", "suppressApplicationTitle": true, "useAcrylic": true, "useAtlasEngine": true }, "schemes": [ { "background": "#212121", "black": "#21222C", "blue": "#82AAFF", "brightBlack": "#545454", "brightBlue": "#D6ACFF", "brightCyan": "#A4FFFF", "brightGreen": "#69FF94", "brightPurple": "#FF92DF", "brightRed": "#FF6E6E", "brightWhite": "#F8F8F2", "brightYellow": "#FFCB6B", "cursorColor": "#ECEFF4", "cyan": "#8BE9FD", "foreground": "#F8F8F2", "green": "#50FA7B", "name": "Dracula+", "purple": "#C792EA", "red": "#FF5555", "selectionBackground": "#F8F8F2", "white": "#F8F8F2", "yellow": "#FFCB6B" } ] }
设置 Artifactory 搭建的 Chocolatey 的镜像
# https://jfrog.com/help/r/artifactory-working-with-chocolatey-packages-in-artifactory/artifactory-working-with-chocolatey-packages-in-artifactory # https://stackoverflow.com/questions/49413259/mirror-chocolatey-with-artifactory choco source add -n artifactory -s="https://artifactory.ubisoft.org/artifactory/api/nuget/choco-remote" --priority 1 --bypass-proxy --allow-self-service choco source disable -n chocolatey choco source enable -n artifactory
Proxy
-----BEGIN AGE ENCRYPTED FILE----- YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNjcnlwdCBmTFkxaGxjSWdBU1VGRWla cWhaTk53IDE4CmZydlhYWnlJNnAyL251V2Nkb09uK0dqaEF6V1dqYlRBM05iL09s U2taK00KLS0tIEZpUHdpSFY2anFiUDQ3R0x1ZGVNWUcvZDJzSkVMQW9sZ2VnTG4r T0k4d1EKoibNsWQXLW05s4SANzOvDSC4FGmriisaFQ/VLpJ2aLAp8Y8Z7/ukKOd1 TjMSpLNRoYEuN4kO28NmJHoHryR6p5qmXsjYULQW97zwCvtvBTJ+0x0lOAL7pbs7 9jN6ijGJnvlzHO2PYz+PZ4VHYa38akCCaZW3ih7QxUwWXwJfhcl4lBrZ+DeXw6wG PLH2yReV2ojY7/QBOBzYuhrWsbdmjNWdKFbC1K3in3KmBTCmCCgz8Xq0IVa+xfIL ouW11ZYwAqzANqmI4AeVsf3TdR4ld4dNY5Kk3Ca6C74GvHrYma0JQXAmdMWjkQVL TN4uJKhwlPyAOulHZOVc5c0cc4bp2vvd6iGUjDRHDZ7iDS3oCrSZX7+C2SaQr6dY n04Gwl5thhyykRtEZ/Su8i2fb35ATbqFhwY8nL1wn8+JpXy0gB7KveVfiXHS0Qv4 8TVLB61og8avTIao4TxlW/b5RhENSRN6mggVuKCQT1G+Q8Oof0FJNcZzJYNiOWT3 jlzwdnGObWgdQjDYrm0k+i4VHolfNJhdaHbhcY2nXGHs6DAhtJuWOS+7rkqH23oL RNZTVyiIXei8xKAjV/i14V1Gaa1gOUuOHeeNnW2GCm6KdeS11ANOu81JzomlaJBE gfwE19m26VAmW+p+3Nx6aUj9K18f7mobkY1MWVCEXG0Yn6E7wP3Uegyp9B8y0AfZ nLAg6q/aL14NfJMkME0IDZUbl3OzSQI1b8CZlUDt6QjIbwkhuKcdrLAm0vrYmrcy BIq5skzAZjiWE1hwJTHeSwVpvcvBOVcYf1k6f1ZsWhTUnjQQ7pL0HjVQ0lecW/jG q7WnxGN3WBRCqJCA2+lVrd/CWZ3Bx2X4/0elitI4k1SRL/CneAgoAz+suEwoAIHv oRKWfYLqk5ND2sfTFtb+k5C4FQLOVBLj+rdSUZyEDTW7zDRCvx4QsZtEeYUouVXe YCa64IUNSIAav4p8CIFPXYjH2eJQR99It+FSpimCtWtT3gFXBXEyTsXoQD+F8j1v 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 XtIWhSBuYS+8Pws= -----END AGE ENCRYPTED FILE-----