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) = 1,000 bytes
当表示计算机中数据量的大小时,K、M、G、T等单位之间的进制都是 1024。
当表示网速时,K、M、G、T等单位之间的进制都是 1000。
查找
<
和>
包裹的字符串,<
前不是 ‘`‘ 字符并且>
后也不是 ‘`‘ 字符的正则表达式:# (?<!`)<.+?>(?!`) grep -P '(?<!`)<.+?>(?!`)' -R -n .
处理 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 (linux) cat << EOF >> ~/.ssh/config Host github.com User git ProxyCommand nc -x localhost:7890 -Xconnect %h %p EOF # ssh proxy (windows) # 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 # 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 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" } ] }
Proxy
-----BEGIN AGE ENCRYPTED FILE----- YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNjcnlwdCB0QU1uNGhhMkFiOGtFaU9u cWRwZm5RIDE4CnRoVzUxQVcwOGQxTHg3bjhyQ2FEcUFSeTdVZmxnai9jeGhwOUJH MURHanMKLS0tIHd1NU9rQzlQODAxcXR6RllUcnpTVUFubHcrbjN6L1JYRmRYU0RX VkZ5OTgKHHm8P9FbBuO5kHeN6oROdjL7g4nMeY7IGr/20ph3Sqey9Y8CSrvt/jL1 lAhb5yS6+fh6QmPsuEg2jUTBb0rKuAyapOESYFfbih8S5Y2+WXGdingj6A7HM9aF ypsu6qMGC5VQuhi7Iktr8K+Q8YlypeRjm3UYInmBPRECEphpV6NGztKeKoxmM0b+ 3Pw3SjvN+Qlgd5ymjgyKC8tKVksPszaeYYYTaIIJVlMzLDXvxHwb9373gFRPUuLw qkpVfTfP7y4oo43MFDN7K9fC92bg3M/rzN2k704LiJQyKUrfFCUtkXVIoC0cMs3u HCYhKasXbiiON+StBNwJ4GVT8k7V0ywT6XKDeAif/wfW0XFYDCU1cky4LhhE6EBX q2AMbdwrambPiQMRLPyUTU71w+2gFToKyAr2UhtrekrDZeODhurr2E3BZTs0V2e+ 42N3lgP76HUlSeL0yrDx+xQj+X185xlLIRp0MuQnrz+pPlsnnRtwF0ATqHtmtpWA eCLz2J3V9tegTJrbiUlveOUphYxibYNVhDCcjgziXQEZcC7NPcaejyaEx/JS18CF EROQySr/UfA6Siacr7hqR0sdpDbbZlHXqBjHnQhvUl+3cyXVSDiafOmLoSXQeH5D 9LYawnOSowx11B9y0Nik/rTtnOrPPobpNBAAKjGfsqGuReQG3BCXW1S/N+avVOdI 366G2Olre3DCNUyC3NIFDAiai1OaIeO8jlSpnl87EA+Mx/lMaLdk2PVYSXUsPJAS 3SCrThei6ZCk5Ie+sTOSrnb1LRgfcFMP3ejHUH9CzIsqXLZf99dzJpcRtbh9rr/V 1ZGUZb4EYEKNGvbaUniTsYEMZ/LoJFSQJ1wzkRCIlZz80CByQ/SxKBVNPzX7J4f+ UO0of1mLWxDGqRpa/h83YI3cjZsD0Fws+saMy9dxu63Jv1PzOnEWkTgERmOGWZf7 6GbA5jva84FirMQyD63qgat3vebjtzQZWjrS7MyWZYFjMCPrnUj12HRi/SU4iFaL 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 -----END AGE ENCRYPTED FILE-----