Compress and Extract 压缩与解压

Compress and Extract 压缩与解压 .tar.gz 和 .tgz .tgz 和 .tar.gz 是同一个东西, .tgz 可以认为是 .tar.gz 是简写, 在远古时代比如 DOS 系统, 文件扩展名只能是三个字符, 所以有了 .tgz, 后来限制解除之后就能支持 .tar.gz 这种后缀了, 后者能更清晰地表达打包格式和压缩方式. https://stackoverflow.com/questions/11534918/are-tar-gz-and-tgz-the-same-thing 这种格式是我使用得最多的压缩格式。它在压缩时不会占用太多 CPU 的,而且可以得到一个非常理想的压缩率 默认 tar 打包和系统默认的压缩工具是单线程的,pigz 是 gzip 的多线程实现, 默认用当前逻辑 cpu 个数来并发压缩,无法检测个数的话,则并发8个线程 压缩 tar -czvf all.tar.gz *.jpg # 排除掉文件 tar -czvf tomcat.tar.gz --exclude=tomcat/logs tomcat # 设置压缩级别 GZIP=-9 tar cvzf file.tar.gz /path/to/directory 压缩到指定目录 tar -zcvf /data/tmp/foo.tar.gz /data/server/source # 解压到指定目录 tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.6.1.tgz tar.gz, tgz 解压 tar -xf foo.tar.gz # 解压 tar.gz 文件时, 不使用 z 参数, 貌似 tar 会检测文件类型 自动 用 gzip 解压... tar xvf all.tar.gz tar zxvf all.tar.gz tar -zxvf all.tar.gz 解压到指定目录 tar zxvf /path/to/foo.tar.gz -C /path/to/target/dir/ tar -zxvf /path/to/foo.tar.gz -C /path/to/target/dir/ sudo pacman -S pigz # 压缩 tar --use-compress-program=pigz -cvpf package.tgz ./package # 解压 tar --use-compress-program=pigz -xvpf package.tgz -C ./package #tar –use-compress-program=pigz表示指定pigz来进行打包 #c表示create创建 x表示extract解压 v表示verbose详细 f表示指定压缩文件 C表示指定目录 #-cvpf package.tgz ./ 表示将./package目录打包为package.tgz #-xvpf package.tgz -C ./表示将package.tgz解压到./package目录下 \-v, --verbose #详细显示处理的文件 \-f, --file [HOSTNAME:]F #指定存档或设备 (缺省为 /dev/rmt0) \-z, --gzip, --ungzip #用 gzip 对存档压缩或解压 \-x, --extract, --get #从存档展开文件 解压多个文件 ls *.gz|xargs -t -n1 gunzip gunzip *.gz .rar # 解压 unrar x foo.rar # 压缩 rar e FileName.rar # 解压 rar a FileName.rar 解压并指定输出目录 gunzip -c /data/tmp/foo.tar.gz | tar xf - -C /data/server/bar .7z yum install p7zip pacman -S p7zip sudo apt install p7zip-full p7zip-rar # 压缩 7z a -t7z -r manager.7z /home/manager/* # a 代表添加文件/文件夹到压缩包 # -t 是指定压缩类型 一般我们定为7z # -r 表示递归所有的子文件夹,manager.7z 是压缩好后的压缩包名,/home/manager/* 是要压缩的目录,*是表示该目录下所有的文件。 7z x filename.7z .zip pacman -S zip unzip zip 压缩 zip all.zip *.jpg # 指定压缩文件目录 zip ~/all.zip *.jpg # 压缩的是个文件夹, -r 表示调用递归压缩 zip -r temp.zip temp # 密码 zip -P password0 foo.zip foo.txt # 压缩目录并加密码 (-r 递归, -P 指定密码) zip -r -P password0 foo.zip foo/ # 交互式输入密码(更安全,密码不会暴露在命令历史中) zip -r -e foo.zip foo/ # 指定压缩某几个文件 zip foo.zip foo.txt bar.txt zip 分卷压缩 # 分卷压缩的话,需要先将文件打包成一个zip包,然后执行 zip -s SIZE origin.zip --out new.zip # SIZE为分卷的大小4m,4g,4t等 # 解压的时候需要先将它合并才能正常解压 zip spiltfile.zip -s=0 --out single.zip zip 列出内容(不解压) unzip -l myfile.zip unzip -l /path/to/myfile.zip | head -l(list)只列出压缩包内文件清单,不解压。输出列依次为原始大小、日期、时间、文件名。想先看包里有什么、或确认路径对不对时用这个。 ...

Created 4046-11-04 · Updated 27276-06-27 · 7 min · 1382 words · -

Cursor

背景 Arch Linux 工作站上我同时保留了两套 Cursor:AUR 的 cursor-bin 和 官方 AppImage。不是重复安装玩,而是两条更新通道各管一件事——AUR 省心,AppImage 跟官网更快。 为什么装两份 最初用 AUR 安装 cursor-bin,日常 paru -Syu 就能升级,和系统其他包一起维护。但 AUR 版本依赖上游维护者跟进官方发布,往往比官网慢几天到一两周。想试用新功能或修 bug 时,等 AUR 更新会比较被动。 Linux 版 Cursor 也有应用内自动更新(Help → Check for Updates),但我这边用起来不太稳,偶尔报错。所以另装了一份官方 AppImage,需要新版本时从官网拉,比等 AUR 或碰运气点内置更新更可控。 两套安装共用 ~/.config/Cursor 和 ~/.cursor,配置、扩展、MCP 设置不用搬。约束是同一时刻只开一个版本——切换前先完全退出当前实例。 stable 与 latest 发布通道 Cursor 官方下载 API 用 releaseTrack 区分通道(Linux AppImage 脚本安装靠这个接口): https://www.cursor.com/api/download?platform=linux-x64&releaseTrack=stable|latest 返回 JSON,含 downloadUrl、version 等字段。论坛里也有人确认过这个接口。 通道 定位 说明 stable 保守、生产向 官方认为足够稳、适合大多数人默认用的构建;更新节奏较慢 latest 官网最新正式版 下载 CDN 上当前最新的正式发布,通常是比 stable 更新的 patch 两者都是正式发布构建,不是每日实验版。差别在发布节奏:stable 更保守,latest 更快拿到新 patch。 ...

Created 23236-06-23 · Updated 23236-06-23 · 2 min · 298 words · -

Linux OOM Killer

Linux OOM Killer OOM Killer 会触发业务退出逻辑吗 通常不会。 Linux OOM Killer 选中目标进程后,现代内核通常会直接发送 SIGKILL(9)终止进程。SIGKILL 不能被捕获、阻塞或忽略,因此大多数“优雅退出”逻辑都不会执行,例如: 注册的退出回调(如 atexit) Java shutdown hook 依赖信号捕获的清理代码 所以 OOM 场景应按“强制中断”来设计:关键状态及时落盘、写操作幂等、依赖外部重启拉起,而不是依赖进程退出时做收尾。 业务代码中的退出逻辑由什么触发 通常由“可捕获的退出路径”触发,而不是 OOM Killer 这类强制终止。 常见触发源: 收到可处理信号(如 SIGTERM、SIGINT),应用捕获后进入优雅停机流程 应用主动正常退出(如主流程结束、显式调用 exit) 进程编排系统发起优雅终止(如 systemd、Kubernetes 先发 SIGTERM,宽限期后再决定是否 SIGKILL) 不会触发退出逻辑的典型场景: SIGKILL(包括 OOM Killer) 内核崩溃、断电等非正常中断 因此,退出回调适合做“尽力而为”的清理,不应承载必须完成的关键一致性动作。 一个协议解析服务在生产环境被 OOM Killer 杀进程并引发滚动离线的案例,可参考 物联网平台协议解析服务生产环境 OOM:MySQL 迁移 InfluxDB。 https://blog.csdn.net/GugeMichael/article/details/24017515 Linux - 内存控制之oom killer机制及代码分析 2014年04月18日 15:04:29 阅读数: 28048 最近,线上一些内存占用比较敏感的应用,在访问峰值的时候,偶尔会被kill掉,导致服务重启。发现是Linux的out-of-memory kiiler的机制触发的。 http://linux-mm.org/OOM_Killer oom kiiler会在内存紧张的时候,会依次kill内存占用较高的进程,发送Sig15(SIGTERM)或Sig9(SIGKILL),取决于内核版本(可见uname -a,>= 2.6.32只会发送sigkill https://elixir.free-electrons.com/linux/v2.6.18/source/mm/oom_kill.c),。并在/var/log/message中进行记录。里面会记录一些如pid,process,。并在/var/log/message中进行记录。里面会记录一些如pid,process) name,cpu mask,trace等信息,通过监控可以发现类似问题。今天特意分析了一下oom killer相关的选择机制,挖了一下代码,感觉该机制简单粗暴,不过效果还是挺明显的,给大家分享出来。 oom killer初探 ...

Created 4046-06-04 · Updated 3036-06-03 · 4 min · 801 words · -

PVE

PVE 存储分层(VG、瘦池、local-lvm、与 K8s 节点根盘关系)见 Proxmox VE 存储:VG、瘦池与虚拟机磁盘。 # 查看 pve 版本 pveversion macos hdiutil convert proxmox-ve_8.3-1.iso -format UDRW -o proxmox-ve_8.3-1.dmg diskutil list # insert the USB flash drive diskutil list diskutil unmountDisk /dev/diskX # rdiskX, instead of diskX, in the last command is intended. It will increase the write speed. sudo dd if=proxmox-ve_8.3-1.dmg bs=1M of=/dev/rdisk5 创建安装盘 U盘 wiloon.com/ventoy dd bs=1M conv=fdatasync if=./proxmox-ve_*.iso of=/dev/XYZ 去除 Proxmox 企业源 apt update && apt install vim vim /etc/apt/sources.list.d/pve-enterprise.list #deb https://enterprise.proxmox.com/debian/pve buster pve-enterprise 更新源 pve9 # ceph.sources Types: deb URIs: https://mirrors.bfsu.edu.cn/proxmox/debian/ceph-squid Suites: trixie Components: no-subscription Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg # debian.sources Types: deb URIs: https://mirrors.bfsu.edu.cn/debian/ Suites: trixie trixie-updates Components: main contrib non-free-firmware Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg Types: deb URIs: https://mirrors.bfsu.edu.cn/debian-security/ Suites: trixie-security Components: main contrib non-free-firmware Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg pve 6.x vi /etc/apt/sources.list ...

Created 10106-09-10 · Updated 2026-06-02 · 3 min · 590 words · -

archlinux AUR Helper, paru, yay

archlinux AUR Helper AUR(Arch User Repository)里的包不能直接用 pacman -S 安装,需要 AUR helper 来搜索、构建和更新。目前最常用的是 paru 和 yay,命令与 pacman 高度一致,且都能同时管理官方仓库与 AUR 包。 paru https://github.com/Morganamilo/paru paru 是用 Rust 编写的 AUR 助手,由 yay 核心贡献者 Morganamilo 维护,常被视为「下一代 AUR helper」。它是 pacman 的超集:装/卸/更新官方包仍走 pacman,AUR 包由 paru 负责下载 PKGBUILD 并构建,日常只需记住 paru 一套命令即可。 名字由来 paru 不是 Pacman + AUR 的缩写(所以不是 paur)。作者说明它只是与 pacman、Arch、AUR、Rust 等相关的音节组合,没有特定含义;本想找一个好听的 3 字母名,未果后用了 4 字母的 paru。见 GitHub Discussion #1279。 paru 安装 paru 不在 Arch 官方仓库,不能 pacman -S paru。首次安装不依赖 yay 或其它 AUR helper,标准做法与 yay 一样:从 AUR 取 PKGBUILD,用 makepkg 构建后由 pacman 安装。 ...

Created 1016-01-01 · Updated 29296-05-29 · 4 min · 744 words · -

Linux accept_ra 与网关转发场景

背景 accept_ra 是 Linux 内核里控制「是否接受路由器通告(Router Advertisement, RA)」的 sysctl。常见路径: /proc/sys/net/ipv6/conf/<interface>/accept_ra 取值含义(简化): 值 行为 0 忽略 RA,不自动配置地址/默认路由 1 接受 RA(主机模式) 2 接受 RA,即使接口已开启 forwarding(网关/路由器模式) 默认情况下,一旦接口 net.ipv6.conf.<iface>.forwarding=1,内核会把 accept_ra 视为 0,不再接受 RA。这是 RFC 4861 的意图:路由器不应把 RA 当主机来用。 解决什么问题 典型场景:一台 Linux 机器同时做网关转发,又需要从上游路由器拿 IPv6 前缀和默认路由。 例如 homelab 里的 VPN 客户端 192.168.50.61: 上游 OpenWrt 通过 RA 向 LAN 下发 ISP 委派的 /60 GUA 前缀和 ::/0 默认路由。 50.61 运行 tproxy,需要 ip_forward=1 转发 LAN / WireGuard 流量。 若 accept_ra=0 且 没有 userspace 网络栈(如 systemd-networkd)代为处理 RA,本机 IPv6 直连(VPN direct 出站)可能 Network is unreachable。 accept_ra=2 的作用:在开启 IP 转发的同时,仍接受上游 RA,让网关主机也能获得 GUA 和默认路由。 ...

Created 29296-05-29 · Updated 29296-05-29 · 2 min · 265 words · -

Proxmox VE 虚拟机内存热扩容(虚拟机内 Arch Linux)

背景 在 homelab 里用 OpenTofu 管理 PVE 上的 K8s 节点(例如 r86s 上的 k8s-51 control-plane、k8s-50 worker)。k8s-51 曾长期只分配 4GiB 内存,同时承担 API VIP、kube-apiserver 与 etcd Leader,容易出现 apiserver 访问本地 etcd 超时,进而导致其它节点因 node lease 续租失败 被标为 NotReady。 后续将 k8s-51 内存一度调到 8GiB 缓解压力;在 r86s 物理机仅 16GB、且 K8s 节点统一 balloon: 0 的前提下,又把 k8s-51 调回 6GiB,与 k8s-50 的 6GiB 合计约 12GiB,给宿主机留出缓冲。 本文记录:内存热扩容、memory balloon、以及 balloon: 0 时如何规划 VM 内存。 结论一览 问题 答案 PVE 能否在线加大内存? 一般可以(只增不减时,多数情况无需先关机) 虚拟机内 Linux 能否感知并用上? 可以,内核通过 ACPI 内存热插拔 online 新内存 虚拟机内要不要额外命令? 加内存通常不需要(不同于磁盘要 growpart) 是否保证绝不重启? 不保证;缩内存时更可能重启 balloon 在哪配置? PVE 每台 VM 的配置文件,不是 Arch 里的设置 K8s 节点建议开 balloon 吗? homelab 建议 统一 balloon: 0,靠给够 memory 而不是超卖 PVE / QEMU 侧 只加不减 在 PVE 中增大 VM 的 memory(单位 MiB,6GiB = 6144,8GiB = 8192)时,通常可对运行中的虚拟机通过 QEMU 热插内存条(ACPI DIMM hotplug) 完成。 缩小内存:一般需要关机或会触发重启;运行中缩容既不安全,也基本不可行。 开了 balloon,扩容还要不要 ACPI 热插拔? 不能简单理解成「开了 balloon 就不用 ACPI 热插拔」,要分清你在改什么: ...

Created 29296-05-29 · Updated 29296-05-29 · 4 min · 760 words · -

pacman

pacman 参数, options -Sy # 仅同步源 -Syy # 两个 y 代表强制更新 database 文件, 即使文件看起来是最新的, 回退到旧版本的时候会用到 -Syyuu # 降级软件包的时候用 -Q # 查询 本地 pacman 数据库, 比如查询某一个已经安装的包的版本 pacman -Q openssl -Qd, -d, --deps # list packages installed as dependencies [filter] -Qt, -t, --unrequired # list packages not (optionally) required by any package (-tt to ignore optdepends) [filter] -Qh, -Q -h, print help -Ql <boost-libs> #D isplay file list provided by local package -Qk # Check the local package database -Qo /path/to/file # Check if the file is owned by any package, 查看某个文件属于哪个包 -Qq, -q, --quiet show less information for query and search, 省略版本号 -Qs 关键字: 搜索已安装的软件包。 -Qi 软件名: 查看某个软件包详细信息(简介、架构、依赖、大小、安装原因、Required By 等) -Qu: 列出所有可升级的软件包 -Qdtq 显示了不必要的依赖关系列表 -Qqe 列出所有显式安装(-e,explicitly显式安装;-n忽略外部包AUR) -Qqd 列出自动安装的包(-d,depends 作为依赖项) -Qqdt 列出孤立的包(-t 不再被依赖的 "作为依赖项安装的包") -F 查询远程仓库里的软件包 -Fl 比如在安装软件包之前查询一下远程仓库, 看看会有哪些文件安装到本地 --needed 已经是最新版本的包,不会再重新安装 -R 删除软件包 -b 指定 database 路径, 默认 /var/lib/pacman -r 指定安装软件包的 root 路径, 默认 / -Rdd 要删除软件包,但是不删除依赖这个软件包的其他程序, pacman -Rdd package_name -Qqo '/path/to/dir' 查看文件关联的包 -Rsn -Rs, -s, --recursive remove unnecessary dependencies, 同时删除本机上只有该软件依赖的软件。有其他包可选依赖这个包的话 pacman 会警告你,有其他包依赖这个包的话 pacman 会阻止你 -Ru 软件名: 删除软件,同时删除不再被任何软件所需要的依赖。 -Sg 软件包组: 查看某软件包组所包含的所有软件包。 -Sc:清理未安装的包文件,包文件位于 /var/cache/pacman/pkg/ 目录。 -Scc:清理所有的缓存文件。 commands # 查看安装了多少个包 pacman -Qq|wc -l 查看软件包依赖, pactree # pactree 由 pacman-contrib 包提供 pacman -S pacman-contrib # 查看 package_0 依赖了哪些软件包(正向依赖树) pactree package_0 # 查看 package_0 被哪些软件包依赖(反向依赖树) # 追溯到顶层显式安装的包 pactree -r package_0 用 -Qi 查看直接依赖 # Required By 字段列出直接依赖该包的包 pacman -Qi package_0 | grep "Required By" 例:追踪 haskell-wai-app-static 属于哪个工具 pactree -r haskell-wai-app-static # haskell-wai-app-static # └─haskell-servant-server # └─haskell-pandoc-server # └─pandoc-cli ← 顶层显式安装的包 删除 pandoc-cli 及其引入的全部依赖 # -Rs 递归删除仅被 pandoc-cli 依赖的包 sudo pacman -Rs pandoc-cli 把 openssl 包安装到指定的目录 pacman -Sy openssl -b /var/lib/pacman -r 2022-11-04 在仓库里搜索有关 foo 的包 pacman -Ss foo # pacman 的 help pacman -h # -Q 的 help pacman -Q -h pacman -Q # 列出已经安装的软件包 pacman -Q boost-libs # Display version pacman -Ql boost-libs # Display file list provided by local package # 查看文件/命令属于哪个包, Check if the file is owned by any package, 查看命令由哪个包提供. pacman -Qo /etc/profile # 检查包对应的文件有没有缺失, #Check the local package database pacman -Qk filesystem # 打印详细信息,比如 文件 是否有修改 修改时间, 大小 , md5 pacman -Qkk filesystem # 安装下载的 gvim 包,或新编译的 gvim 包 pacman -U /var/cache/pacman/pkg/gvim-8.2.4106-1-x86_64.pkg.tar.zst downgrade 降级软件包 去 archive 时手动下载 https://archive.archlinux.org/packages/, 然后 pacman -U 安装 ...

Created 6066-02-06 · Updated 14146-05-14 · 5 min · 1062 words · -

iptables basic

iptables basic iptables 是 Linux 内核集成的 IP 信息包过滤系统。该系统用于在 Linux 系统上控制 IP 数据包过滤和防火墙配置 iptables 操作的是 2.4 以上内核的 netfilter。所以需要 linux 的内核在 2.4 以上。其功能与安全性远远比其前辈 ipfwadm, ipchains 强大,iptables大致是工作在OSI七层的二、三、四层,其前辈ipchains不能单独实现对tcp/udp port以及对mac地址的的定义与操作 iptables-nft iptables vs. iptables-nft https://developers.redhat.com/blog/2020/08/18/iptables-the-two-variants-and-their-relationship-with-nftables#the_iptables_rules_appear_in_the_nftables_rule_listing iptables 包含4个表,5个链 其中表是按照对数据包的操作区分的,链是按照不同的Hook点来区分的,表和链实际上是netfilter的两个维度. 4个表: filter, nat, mangle, raw,默认表是 filter (没有指定表 ( -t ) 的时候就是filter表) 。 表的处理优先级: raw>mangle>nat>filter 4 个表 filter: 一般的过滤功能, 这是默认的表,包含了内建的链 INPUT (处理进入的包)、FORWARD (处理通过的包) 和OUTPUT (处理本地生成的包) 。 nat: 用于nat功能 (端口映射,地址映射等),对应的链: PREROUTING (修改到来的包)、OUTPUT (修改路由之前本地的包) 、POSTROUTING (修改准备出去的包) ,centos6没有input链,centos7 有 input 链。 mangle: 用于对特定数据包的修改, 对应的链: PREROUTING (修改路由之前进入的包) ,input, OUTPUT (修改路由 IPTABLES 之前本地的包), forward, postrouting raw: 优先级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能 5 个链: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING PREROUTING: 数据包进入路由表之前 INPUT: 通过路由表后目的地为本机 FORWARD: 通过路由表后, 目的地不为本机 OUTPUT: 由本机产生, 向外转发 POSTROUTIONG: 发送到网卡接口之前 iptables 规则的语法 iptables [-t table] COMMAND chain CRETIRIA -j ACTION -t table : 3个filter nat mangle COMMAND: 定义如何对规则进行管理 chain: 指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的 CRETIRIA:指定匹配标准 -j ACTION :指定如何进行处理 iptables [-t table] COMMAND chain CRETIRIA -j ACTION iptables [-t table] -[AD] chain rule-specification [options] iptables [-t table] -I chain [rulenum] rule-specification [options] iptables [-t table] -R chain rulenum rule-specification [options] iptables [-t table] -D chain rulenum [options] iptables [-t table] -[LFZ] [chain] [options] # 创建新的链 iptables [-t table] -N chain iptables [-t table] -X [chain] iptables [-t table] -P chain target [options] iptables [-t table] -E old-chain-name new-chain-name # 创建链 iptables -t mangle -N chain0 指定链 iptables -t filter -L FORWARD nf_conntrack iptalbes 会使用 nf_conntrack 模块跟踪连接,而这个连接跟踪的数量是有最大值的,当跟踪的连接超过这个最大值,就会导致连接失败。 通过命令查看 ...

Created 10106-05-10 · Updated 10106-05-10 · 8 min · 1523 words · -

centos basic

centos basic RHEL-based 发行版(CentOS EOL 后) CentOS 在 2024 年完全 EOL 后,主流的 RHEL 下游发行版: 免费的 1:1 RHEL 重建版(CentOS 直接替代): AlmaLinux — 社区驱动,由 CloudLinux 公司支持,目前最流行 Rocky Linux — 由 CentOS 原创始人 Gregory Kurtzer 创建,同样非常流行 商业版: RHEL(Red Hat Enterprise Linux)— 上游源,通过 Red Hat 开发者计划可免费用于最多 16 个生产系统 Oracle Linux — Oracle 的重建版,免费使用,付费支持 其他: CentOS Stream — 仍然存在,但现在是下一个 RHEL 版本的滚动预览(位于 RHEL 上游而非下游),稳定性不如旧版 CentOS AlmaLinux 和 Rocky Linux 都提供迁移工具(almalinux-deploy / migrate2rocky),可将现有 CentOS 系统原地转换。 AlmaLinux AlmaLinux 是 CloudLinux 公司主导的 RHEL 下游发行版。 ...

Created 7076-05-07 · Updated 7076-05-07 · 3 min · 554 words · -

Linux 显示器分辨率问题修复:手动加载 EDID 固件

EDID 简介 什么是 EDID? EDID (Extended Display Identification Data) 是一种标准化的数据结构,用于显示器向计算机系统描述自己的能力和特性。可以将它理解为显示器的"身份证"或"技术规格说明书"。 EDID 包含的信息: 基本标识信息: 制造商 ID(如 Dell = “DEL”, Samsung = “SAM”) 产品型号代码和序列号 生产日期(周数/年份) 显示能力参数: 支持的分辨率列表(如 1920x1200, 1600x1200, 1280x1024) 支持的刷新率(如 60Hz, 75Hz) 原生(推荐)分辨率 色彩深度和色域信息 物理特性: 屏幕物理尺寸(以毫米为单位,用于计算正确的 DPI) 显示接口类型(模拟/数字) Gamma 值(2.2 是常见值) 系统如何读取 EDID? 是的,操作系统从显示器读取 EDID 信息。 这是一个自动化的初始化过程: ┌─────────────────────────────────────────────────────────────┐ │ 1. 物理连接 │ │ 显示器连接到主机(HDMI/DisplayPort/DVI/VGA) │ │ 硬件检测到连接 │ └──────────────────┬──────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 2. DDC 通信初始化 │ │ 主机 → 显示器:发起 DDC (Display Data Channel) 请求 │ │ 使用 I2C 总线协议 │ └──────────────────┬──────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 3. EDID 数据传输 │ │ 显示器 → 主机:返回 EDID 数据(128 或 256 字节) │ │ 通过显示线缆内的专用数据通道 │ └──────────────────┬──────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 4. 内核处理 │ │ GPU 驱动解析 EDID → 验证校验和 → 提取支持的模式 │ └──────────────────┬──────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 5. 自动配置 │ │ 选择最佳分辨率(通常是原生分辨率)→ 配置显示输出 │ └─────────────────────────────────────────────────────────────┘ 通信协议细节: ...

Created 1016-05-01 · Updated 1016-05-01 · 17 min · 3517 words · -

linux desktop

Linux 桌面环境 Linux 桌面环境(Desktop Environment,简称 DE)是运行在 Linux 操作系统上的图形用户界面,提供窗口管理、文件管理、系统设置等功能。 流行的 Linux 桌面环境 GNOME 官网:https://www.gnome.org/ 特点:现代化设计,简洁优雅,注重工作流程 默认用于:Fedora、Ubuntu(自 17.10 起)、Debian 技术栈:GTK KDE Plasma 官网:https://kde.org/plasma-desktop/ 特点:高度可定制,功能丰富,类似 Windows 的操作体验 默认用于:Kubuntu、openSUSE、KDE neon 技术栈:Qt Xfce 官网:https://xfce.org/ 特点:轻量级,资源占用低,适合老旧硬件 默认用于:Xubuntu、Manjaro Xfce 技术栈:GTK 桌面环境对比 桌面环境 资源占用 可定制性 适合人群 GNOME 中高 中 追求现代化体验的用户 KDE Plasma 中 高 喜欢定制的高级用户 Xfce 低 中 老旧硬件用户 GTK 与 Qt 技术栈 Linux 桌面应用主要基于两种 GUI 工具包: 技术栈 使用的桌面环境 代表应用 GTK GNOME、Xfce、Cinnamon、MATE Firefox、GIMP、Thunar Qt KDE Plasma Dolphin、Konsole、VLC 跨技术栈运行 GTK 应用可以在 Qt 桌面(如 KDE)运行,反之亦然。应用程序只需安装一次,所有桌面环境共享。 ...

Created 29296-11-29 · Updated 29296-11-29 · 4 min · 702 words · -

audio fix

Ubuntu 24.04 音频问题修复记录 日期: 2025-11-04 系统: Ubuntu 24.04 硬件: Beelink SER8 音频芯片: Realtek ALC897 问题描述 在系统设置中测试音频时,音箱接入耳机接口(3.5mm)没有声音输出。 排查过程 1. 检查音频设备状态 # 查看可用的音频输出设备 pactl list sinks short 结果: 发现主板音频设备: alsa_output.pci-0000_65_00.6.analog-stereo (Family 17h/19h HD Audio Controller) HDMI音频设备也存在 2. 检查混音器配置 # 查看声卡列表 cat /proc/asound/cards # 检查混音器设置 amixer -c 1 scontents 发现: 音频设备被正确识别 Master, Headphone, Line Out 通道配置正常 Speaker 通道初始被关闭(音量0%, 状态off) 3. 检查系统日志 journalctl -b | grep -i 'audio\|sound\|alsa' | tail -50 发现: ALSA控制器初始化时有多个 “failed to obtain info for control” 警告 PipeWire和PulseAudio服务正常启动 硬件被正确识别: Realtek ALC897 4. 分析硬件Pin配置 cat /proc/asound/card1/codec#0 | grep -A 10 "Node 0x1b\|Node 0x14\|Node 0x15" 关键发现: ...

Created 4046-11-04 · Updated 4046-11-04 · 3 min · 561 words · -

signal, 信号

signal, 信号 信号(signal)机制 信号(Signal)是Linux, 类Unix和其它POSIX兼容的操作系统中用来进程间通讯的一种方式。一个信号就是一个异步的通知,发送给某个进程,或者同进程的某个线程,告诉它们某个事件发生了。 当信号发送到某个进程中时,操作系统会中断该进程的正常流程,并进入相应的信号处理函数执行操作,完成后再回到中断的地方继续执行。 如果目标进程先前注册了某个信号的处理程序(signal handler),则此处理程序会被调用,否则缺省的处理程序被调用。 发送信号 kill 系统调用 (system call) 可以用来发送一个特定的信号给进程。 kill 命令允许用户发送一个特定的信号给进程。 raise 库函数可以发送特定的信号给当前进程。 在Linux下运行 man kill 可以查看此命令的介绍和用法。 The command kill sends the specified signal to the specified process or process group. If no signal is specified, the TERM signal is sent. The TERM signal will kill processes which do not catch this signal. For other processes, it may be necessary to use the KILL (9) signal, since this signal cannot be caught. ...

Created 30306-04-30 · Updated 30306-04-30 · 4 min · 807 words · -

swap

swap archlinux 禁用 swap 禁用 zram swap systemctl list-units --type=swap sudo systemctl mask dev-zram0.swap reboot 查看 swap 使用情况 # 没有输出的话就是没有启用 swap swapon --show swapon free -m cat /proc/swaps vmstat 1 5 NAME TYPE SIZE USED PRIO /dev/vda2 partition 1.9G 1.5G -1 # PRIO, Priority # /dev/vda2 是安装操作系统时划分的磁盘分区, 也可以使用文件来做为交换分区 # 启用 swap 分区 swapon /dev/vda2 # 如果是文件则 swapon /swap-file swapoff /swap-file # -s, --summary swapon -s|column -t # add swap to /etc/fstab, 启动之后自动挂载 swap 分区 # /dev/sda2, swap分区 UUID=ed325732-b768-4680-a4ff-24dd0da24509 none swap defaults 0 0 # swap 文件的配置 /swap-file none swap defaults 0 0 # 关闭swap交换分区 swapoff /dev/vda2 swapoff -a priority swap 分区的优先级 (priority)有啥用? 在使用多个swap分区或者文件的时候,还有一个优先级的概念 (Priority)。 ...

Created 13136-10-13 · Updated 13136-10-13 · 2 min · 314 words · -

fstab

fstab 格式 <file system> <dir> <type> <options> <dump> <pass> 示例 UUID=48ab4d71-5bb2-4bc4-bf32-dc357020ae27 /data ext4 defaults 0 0 UUID=b256c0bb-9000-456b-b9eb-18239b5df5ddswap none swap defaults 0 0 UUID=E854-F511 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2 # 支持TRIM 的ssd 启用trim, 在参数里加discard, 使用discard受系统和硬件限制, 大多数系统建议后台服务定时discard, 如: fstrim.timer /dev/sdb1 /data1 ext4 defaults,noatime,discard 0 0 https://wiki.archlinux.org/index.php/Fstab_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87 <options> 挂载时使用的参数,注意有些 参数是特定文件系统才有的。 defaults - 使用文件系统的默认挂载参数,例如 ext4 的默认参数为:rw, suid, dev, exec, auto, nouser, async. rw - 以读写模式挂载文件系统。 relatime - 实时更新 inode access 记录。只有在记录中的访问时间早于当前访问才会被更新。 (与 noatime 相似,但不会打断如 mutt 或其它程序探测文件在上次访问后是否被修改的进程。),可以提升性能(参见 atime 参数)。 fmask - 设置文件的权限过滤, dmask和fmask是mount的选项,针对fat/ntfs文件系统,适用于fstab配置, 通过设置 fmask, dmask, uid, gid参数可以控制文件目录的默认权限以及所属用户和组。 dmask —— 设置目录的权限过滤 iocharset codepage Sets the codepage for converting to shortname characters on FAT and VFAT filesystems. By default, codepage 437 is used. 源自 MS-DOS 或者 Windows 的文件系统 (例如:vfat、ntfs、smbfs、cifs、iso9660、udf) 需要使用挂载选项 “iocharset” 使得文件名中的非 ASCII 字符能够正确转码。此选项的值应设置为与你的区域数据的字符集相同,使得内核能够理解。如果对应的字符集定义 (位于 File systems -> Native Language Support,即文件系统 -> 原生语言支持) 编译到内核中或者编制成模块,它就能工作。vfat 和 smbfs 文件系统还需要 “codepage” 选项。它应该设置为你所在的国家在 MS-DOS 下使用的 codepage 号码。例如,为了挂载优盘,zh_CN.GB2312 用户的 /etc/fstab 文件中会需要: ...

Created 10106-08-10 · Updated 10106-08-10 · 2 min · 358 words · -

LVM

LVM commands # lvreduce, 用于减小 LVM 逻辑卷(Logical Volume)的大小 # -r, 同时调整(resize)文件系统的大小(调用 resize2fs xfs_growfs 等) # -L -40G 减小逻辑卷的大小 40GB(注意 - 表示减小) # /dev/ubuntu-vg/root 要调整的逻辑卷路径(通常是根分区) sudo lvreduce -r -L -40G /dev/ubuntu-vg/root LVM 的基本概念 通过 LVM 技术,可以屏蔽掉磁盘分区的底层差异,在逻辑上给文件系统提供了一个卷的概念,然后在这些卷上建立相应的文件系统。下面是 LVM 中主要涉及的一些概念。 PM 物理存储设备 (Physical Media): 指系统的存储设备文件,比如 某一块硬盘, /dev/sda、/dev/sdb 等。 或者 设备映射器(Device Mapper)管理的加密分区. /dev/mapper/nvme0n1p8_crypt PV (物理卷 Physical Volume): PV 可以看做是硬盘上的分区, 指硬盘分区或者从逻辑上看起来和硬盘分区类似的设备 (比如 RAID 设备)。 PE (Physical Extent):PV(物理卷)中可以分配的最小存储单元称为 PE,PE 的大小是可以指定的。 VG (卷组, Volume Group): 卷组: 物理卷的组合. 类似于非 LVM 系统中的物理硬盘,一个 LVM 卷组由一个或者多个 PV(物理卷) 组成。 卷组是 LVM 的中间层,VG 将多个物理卷(Physical Volumes, PV)组合在一起, 以便在其上创建逻辑卷(Logical Volumes, LV)。 ...

Created 12126-10-12 · Updated 12126-10-12 · 3 min · 635 words · -

who

Linux 查看用户, 当前登录用户, 登录日志 # 查看 ssh 上已经连接的用户、session # 查看登录用户正在使用的进程信息 w who who -a netstat -tnpa | grep ‘ESTABLISHED.*sshd’ ps auxwww | grep sshd: ps ax | grep sshd /etc/shadow 和 /etc/passwd 系统存在的所有用户名 more /var/log/secure who /var/log/wtmp 干了些什么? root账户下输入su - username 切换到username下输入 history 能看到这个用户历史命令,默认最近的1000条 http://blog.csdn.net/wudiyi815/article/details/8061459 作为系统管理员,你可能经常会 (在某个时候) 需要查看系统中有哪些用户正在活动。有些时候,你甚至需要知道他 (她) 们正在做什么。本文为我们总结了4种查看系统用户信息 (通过编号 (ID) ) 的方法。 w w命令用于显示已经登录系统的用户的名称,以及他们正在做的事。该命令所使用的信息来源于/var/run/utmp文件。w命令输出的信息包括: USER 用户名称 tty 用户的机器名称或tty号 FROM 远程主机地址 LOGIN@ 用户登录系统的时间 IDLE 空闲时间, 时间格式: 22:29m(22h29m), 46.00s, 27:47(27m47s) JCPU 附加到 tty (终端) 的进程所用的时间 PCPU 当前进程所用时间 WHAT 用户当前正在使用的命令 IDLE The idle time is supposed to tell how long it has been since the user typed any input on that terminal. For Xwindows sessions, it is broken since Xwindows never reads input from a terminal, but instead gathers input directly from your mouse and keyboard, so the terminal never gets its timestamp updated since it is never read from. ...

Created 27276-08-27 · Updated 27276-08-27 · 2 min · 281 words · -

archlinux hibernate

archlinux hibernate edit config file /etc/mkinitcpio.conf add resume field sudo vim /etc/mkinitcpio.conf HOOKS=(base udev resume autodetect modconf block filesystems keyboard fsck) Configure the initramfs When an initramfs with the base hook is used, which is the default, the resume hook is required in /etc/mkinitcpio.conf. Whether by label or by UUID, the swap partition is referred to with a udev device node, so the resume hook must go after the udev hook. This example was made starting from the default hook configuration: ...

Created 8086-08-08 · Updated 8086-08-08 · 1 min · 155 words · -

archlinux install

archlinux install download iso https://mirrors.tuna.tsinghua.edu.cn/archlinux/iso/ curl -O https://mirrors.tuna.tsinghua.edu.cn/archlinux/iso/2025.10.01/archlinux-2025.10.01-x86_64.iso Ventoy, usb-stick yay -S ventoy-bin copy to ventoy usb partition 用 ventoy U 盘引导系统 启动 sshd 设置 root 密码 进入 root@archiso 之后先设置 root 密码 passwd 连无线网 # 20250501, archlinux 的 iso 里默认已经安装 wpa_supplicant # start systemd-networkd and systemd-resolved service systemctl start systemd-networkd systemctl start systemd-resolved.service # wifi network 有默认配置 /etc/systemd/network/wifi.network # 设置 wifi 密码, 注意后面的 wlp3s0 替换成无线网卡的名字, 用 `ip a` 看一下 # psk 里写明文的密码 cat /etc/wpa_supplicant/wpa_supplicant-wlp3s0.conf network={ ssid="w1100n" psk="wifi_password_0" } sudo systemctl start wpa_supplicant@wlp3s0 systemctl start sshd 在 virtual box 里安装得设置一下端口映射 ...

Created 25256-06-25 · Updated 25256-06-25 · 4 min · 655 words · -