包管理与使用推荐

包管理

关联文章:包管理器吐槽与灵感

pacman

pacman 是 archlinux 官方指定包管理器,好用,就是指令比较难记。安装来源是 linux 官方仓库,基本上都是二进制。

AUR

AUR 是用户仓库,由用户自行维护。AUR 只管理 PKGBUILD,相当于一个小型安装脚本而非程序本体。这里有一篇说明文章。

由于 PKGBUILD 经常会从 github 等地方拉取软件压缩包,所以请使用代理。PKGBUILD 经常需要自行编译,因此尽量不要在笔记本未插入电源情况下更新[1]。

由于上传无门槛,AUR 可能携带恶意软件,请谨慎下载偏门小软件。有经验的用户会在安装前审阅 PKGBUILD。

Nix

相对的,Nix 是 NixOS 的包管理器。整个 NixOS 是建立在 Nix 之上的。

Nix 的包有 10w+,不过里面很多是编程语言的依赖包,有一定量水分,单论数量是没有 AUR 多的。

但是 Nix 本身还是非常顶级的包管理器,使用 Nix 语言编写,这是一个纯函数式的图灵完备语言。现在是个现代编程语言都能爆杀 bash,显然 Nix 也是。

如果在非 NixOS 系统上使用 Nix 包管理器可以用 nix-env -iA <package> 安装包,NixOS 就直接写配置然后 rebuild 即可。

apt

apt 是 debian 系的 Linux 包管理器。用起来只能说还凑合。

打包

AUR

AUR 的包都是志愿维护,为开源社区做贡献是一件好事。

首先看看 arch wiki,很有用。打包准则 | 创建软件包

我在先辈推动下,先接过了一个 autocorrect-bin 练手。后续也打了例如 tdl-bin 等。

  1. 首先,创建一个 AUR 账号,并认证
  2. 认领包,clone 到本地。
    • 如果是新创建的包,只需要 git remote add remote ssh://aur@aur.archlinux.org/<package_name>.git && git fetch 即可,无需像 github 创建仓库那样手动操作。
  3. 改 PKGBUILD 并测试。
  4. 更新 .SRCINFO: makepkg --printsrcinfo > .SRCINFO
  5. push。注意不要使用那些阻断 ssh 的代理。

测试

如果需要一个纯净环境测试,可以看看 pacstrap。

sh
mkdir container
sudo pacstrap container base base-develsudo # 创建容器(使用主机密钥)。下载大小约为 223MB
sudo systemd-nspawn -D container  # 进入容器

bubblewrap 可以以较小的开销在虚拟环境内安全构建。

包使用

此处不包含代理与快照工具,请前往配置页查看。

基础 CLI 工具

对于通过 /(OR)相连的软件,本人仅推荐首个

软件包 功用
fishshell + starship shell 及其外观
sd sed 的代替
ripgrep / skim / fzf grep 的代替
fd & plocate 查找,faster find
tldr[2] man 的代替
fex cut 的代替
eza ls 的代替
fastfetch neofetch 的代替
rip / trash-cli easier, safer rm
btop & mission-center / htop / glances 任务管理器,看性能,top 的代替
xh httpie 的代替
bat cat 的代替
difftastic diff 的代替,与 git 集成
mtr traceroute 的代替
lsof / somo 查端口占用
zoxide 智能 cd
atuin / mcfly history 搜索
dysk 磁盘状态查询
dust & ncdu[3] & dua-cli / gdu 磁盘容量查询
yazi[4] / nnn / ranger 文件浏览器
lsof 查进程占用
neovim 文本编辑器
Zellij / tmux 终端复用,多窗口
navi 常用命令 cheatsheet

以上是本人体验总结的结果。若需要更多推荐,不如看看 The largest Awesome List of CLI/TUI programs 和 external 1.。

kde apps

此处列出我额外安装的 kde 家的软件。

shell

装完系统应该最先装 shell,否则手感一坨狗屎。至于装啥,请移步 shell script。

聊天软件

Telegram 当然是首推,多平台适配好,并且在官方仓库,甚至能直接用 web 版。

但是只要在中国有原生家庭,就逃不开 QQ 和微信。

邮件

我的需求挺简单,只是 IMAP 接收和多账号管理。

Thunderbird (thunderbird-i18n-zh-cn extra) 是一个重量级的邮件客户端,支持收发,多账号。好用是挺好用,就是太重了(600+M RAM),于是我想寻找更轻量的邮件客户端。

由于我桌面用的 kde,试了下 kmail,用不了,一直报 Akonadi 有问题,点 详情 也点不开。我装了 kde-pim 包组 也无济于事。据说 kmail 添加 gmail 也有问题,因此放弃。

文本编辑器

详见各种 vim 系 editor 的使用体验。

游戏

sh
paru -S --needed arch-gaming-meta

这个包里有很多好东西。

wine

我最初因为对命令行的恐惧而选择逃避,使用 bottles 来运行 windows 应用,它实际上是一个对 wine 和 winetricks 的 GUI 包装。但是后来 bottles 出现了一些严重的问题[5],让我不得不回退到 wine,又发现 winetricks 很好用,所以便果断抛弃了 bottles。

安装 wine 并不难,archlinux 看两眼 wiki,nixos 就装 wine 和 winetricks 两个包就行。

出于游戏目的,首次使用 wine 时,推荐用 winetricks 进行运行库的安装。如果没有环境隔离的需求就全部装到默认容器(~/.wine)里即可。先装字体(cjkfonts),再装运行库,可以参考 AsukaMinato 的博客。同时 minato 给出了另一个更好的解法:先装 K-Lite Codec Pack,就可以跳过所有解码器的安装,更快更便捷。然后就看谁顺眼装谁了,什么 VC++ 运行库,dxvk,这些也都是比较基础的就不多说了。

使用 wine 运行某个 windows 应用,只需要 wine <file>,比我想的简单太多了。转区就设置 LC_ALL="ja_JP.UTF-8" 环境变量即可。

其他:

bottles

bottles 是 python 写的 wine 包装,现在维护力度并不大,有几百个 issue 没人去解决。并且我遭遇了恶性 bug,因此换回 wine。

不再使用

基于 wine 运行 windows 软件/游戏,比 wine 更傻瓜式(只需要点鼠标,不用写配置)。

sh
paru -S bottles
sh
paru -S bottles wine wine-mono

然后打开 bottles,在依赖中手动安装运行库,字体等。

录音

GUI

其实 obs 就能录,但是有点重,我想试试其他的。

我先尝试了一下 krecorder,但是使用体验不算好,完全无法录音。音源把能选的都选了一遍,录音还是无法开始。

后来想用 recordmydesktop,结果 gtk 和 qt 前端都装不上,gtk 缺依赖包,qt 编译了半天,时间全花在输出 warning 了。

kwave 也能录,但是它本职不是干这个的,操作上可能不够直观。

CLI

然后从网上抄了一个 ffmpeg 代码,并改进了一下:

sh
ffmpeg -f pulse -i 0 -c:a libmp3lame -b:a 128k -af "volume=0.04" pulse.mp3

it works.

当然,也可以用 alsa-utilsextra 包:arecord -f dat test.wav,但是又不能改音量又不支持压缩格式,显然不如 ffmpeg。

关于文档

众所周知文档领域基本由微软的 office 独占,而三件套又基本由 windows 独占。

在 linux 下,我尝试使用不同的替代品:

  1. LibreOffice(不可用):word 排版不同,原本一页的可能会变成两页。拿来只读还行,要写的话奉劝还是换一家。
  2. WPS(不可用):图片显示错误,还有广为诟病的粗体问题。
    • 解法(据说):paru -S freetype2-wps libtiff5 (ref)
  3. ONLYOFFICE:目前看来没啥太大毛病。

我一般用 typst 等排版工具生成 pdf,如果实在不行再去 windows 上用 office。不过现在看来或许也能试试 ONLYOFFICE。

系统监视

资源监视器

linux 自带的是 top,由此衍生出了一堆 tui *top。我同时使用 btop 和 htop。

文件系统

inotify 是一个强大的监视器。

sh
sudo pacman -S inotify-tools

具体使用方法 RTFM。

命令行历史记录

我之前一直在用 mcfly,它给的条数少,模糊匹配结果太差,我不满意。

后来看到大佬博文推荐的 atuin,迅速去下了一个用,果真好用。

sh
sudo pacman -S atuin
atuin import auto
# then edit fish config manually

过滤历史记录

如果你的历史记录里已经有了敏感信息,例如密码,那么 atuin 带来的方便的搜索功能可能将你置于不利地位。所以你需要添加一个 filter,并且使用其 filter 一次 history。

  1. 添加 filter:编辑 ~/.config/atuin/config.toml。
  2. 执行 atuin history prune。

代码量统计

tokei

搜索

文字搜索当然是用 ripgrep,如果嫌命令行难用也可以用 vscode 打开文件夹然后全局搜索即可。

实时搜索当然是 fd,RIIR 的 find。

主要难的是按文件名的全系统索引搜索,类似 windows everything 那样。

neovim

eza

喜欢彩色的 ls 吗?

alias ls='eza --all --long --color-scale size --binary --header --time-style=long-iso'

原名 exa,现在活跃分支是 eza。注意该 alias 需要一定版本下才可正常工作。

multiplexer

Terminal Multiplexer(终端复用器)并不是 linux 桌面的必需品(konsole / yakuake 都支持多标签),但是在纯命令行的服务器下,终端复用还是有点用的。主要作用是提供一组 key bindings,与持久运行的 sessions(允许 ssh 断连)。

Zellij

Zellij 使用 rust 写成,由于其简洁的 key bindings(有常驻提示的),我使用其代替 tmux。

这玩意看提示用就行,没必要配置。性能会比 screen 和 tmux 差一点点,好看是有代价的。

虽然也有一些其他问题,不过现在还是优先用这个,毕竟也够用。

要不是学校的服务器,我还不知道有 screen 这玩意。

这是一个很古老的终端复用,主要作用就是 ssh 恢复,没啥其他功能。可以在低性能的服务器上用。

sh
screen -S <name>  # 创建
screen -r <name>  # 重连

两行就够用了。

tmux 的默认键位实在是过于诡异。

  • 配置:~/.tmux.conf,初始时没有,需要自己创建。编辑后需要重新载入:tmux source ~/.tmux.conf or prefix+:source ~/.tmux.conf
  • 插件:不要用默认的插件管理器。。不好用。
  • copy-mode(vi): Space 进入选择,Enter 复制。(我觉得是假的 vi mode)
  • 默认启动 (bash ref | zsh ref ref2):
    sh
    # add on top of .zshrc
    if [ "$TMUX" = "" ]; then tmux; fi
    # add in .tmux.config
    set-option -g default-shell /bin/zsh
    sh
    if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
    exec tmux
    fi

tab-rs

也是 rust 写的。screen 的替代品,专注简洁迅速。

tlp

笔记本省电的。

sh
paru -S tlp tlpui
sudo systemctl mask systemd-rfkill.service systemd-rfkill.socket
sudo systemctl enable --now tlp

效果其实挺一般的。毕竟涉及到硬件,又是像 linux 这种自由散漫的,厂家都不会主动适配。

activitywatch

记录软件使用时长,参考文章

waydroid

waydroid 是 linux 上的首选 android 模拟器。不过想用还是需要折腾一阵的。

  1. 切换为 zen 内核,参考更换内核
    • 也可以用 linux-lily archlinuxcn 内核
  2. 安装 waydroid,具体流程在 wiki 上有。
    • pacman -S waydroid 没有 Android 镜像,联网自动下载可能需要代理。

这里主要说下在 X11 下用 waydroid:需要一个 wayland 模拟器,archwiki 的主站说用 cage,CN 站说用 weston,都没有讲具体用法。我用 weston 了。后来尝试了一下 sway,结果与 nvidia 相性很差,不能正常使用。

sh
sudo pacman -S weston
weston
# 然后点击打开的窗口的左上角,打开内部终端,执行 waydroid 指令。
waydroid show-full-ui

挺想吐槽,waydroid 居然不能重连 session,所以如果 session activated,weston 窗口又关了,这时候只能 waydroid session stop && waydroid show-full-ui 重启。。

更多踩坑可以看看某位群友的心得

distrobox

archwiki;通过容器,模拟其他的发行版。

注意,home 目录是共享的,不能当作沙盒使用。

我试着安装了一个 ubuntu 22.04,占用空间 500M 左右。

external

  1. A curated list of command-line utilities written in Rust | awesome-rewrite-it-in-rust
  2. 一些现代化的 linux 命令

  1. 我再也不敢在课上不插电滚 aur 了 😭 ↩︎

  2. tldr 有很多实现,这里推荐 Rust 的实现 tealdeer。 ↩︎

  3. ncdu 在 btrfs 下不准 (ref)。可以考虑用 btdu,这是专门为 btrfs 设计的 du 工具。 ↩︎

  4. yazi 甚至能在 console 下查看图片。 ↩︎

  5. 从此处往下翻 ↩︎