从 2006 年开始转战 Linux 系统后,经由几年的实践,我的软件设置在过去十年内出人意料的固定。再过十年回顾一下,看看发生了什么,大概会非常有趣。
• 来源:linux.cn • 作者:Dennis Felsing • 译者:chenmu-kk •
(本笔墨数:12075,阅读时终年夜约:15 分钟)

从 2006 年开始转战 Linux 系统后,经由几年的实践,我的软件设置在过去十年内出人意料的固定。再过十年回顾一下,看看发生了什么,大概会非常有趣。在写这篇推文时,我迅速回顾了正在运行的内容:
htop overview
动机
我的软件先容排序不分先后:
程序该当运行在本地系统中以便我可以掌握它,这个中并不包括云办理方案。程序应在终端中运行,以便于在任何地方连贯地利用它们,包括性能稍差的电脑或手机。通过利用终端软件,可以实现自动聚焦键盘。只有在一些故意义的地方,我会更喜好利用鼠标,由于在打字期间一贯伸手去拿鼠标觉得像在摧残浪费蹂躏韶光。有时候过了一个小时我才把稳到乃至还没有插鼠标。最好利用快速高效的软件,我不喜好听到风扇的声音和感到房间在变热。我还可以连续长久地运行旧硬件,已经利用了 10 年的 Thinkpad x200s 还能很好地支持我所利用的软件。组合。我不想手动实行每个步骤,而是在须要时自动实行更多操作,这时自然是支持 shell。操作系统十二年前移除 Windows 系统后,我在 Linux 系统上经历了一个困难的开始,当时我手上只有 Gentoo Linux 系统的安装光盘和一本打印的解释书,要用它们来实现一个可运行的 Linux 系统。虽然花费了几天的韶光去编译和修整,但终极还是以为自己受益颇多。
自此我再也没有转回 Windows 系统,但在持续的编译压力导致风扇失落灵后,我将我的电脑系统切换到 Arch Linux 。之后我将其他的电脑和私人做事器也切换到了 Arch Linux。作为一个滚动发布发行版,你可以随时升级软件包,但 Arch Linux News 已经详细宣布了个中最紧张的漏洞。
不过,令人烦恼的是一旦你更新了旧的内核模组,Arch Linux 就会移除旧版的干系信息。我常常把稳到一旦我试着插入一个 USB 闪存盘,内核就无法加载干系组件。相反,每次内核升级后都该当进行重启。有一些 方法 可以办理这个问题,但我还没有实际地利用它们。
其他程序也会涌现类似的情形,常日 Firefox 、 cron 或者 Samba 在升级后都须要重启,但恼人的是,它们没有警告你存在这种情形。我在事情中利用的 SUSE 很好地提醒了这种情形。
对付 DDNet 产品做事器,相较于 Arch Linux ,我更方向于 Debian 系统,这样在每次升级时涌现故障的几率更低。我的防火墙和路由器利用了 OpenBSD ,它拥有干净系统、文档和强大的 pf 防火墙 ,而我现在不须要一个单独的路由器。
窗口管理器从我开始利用 Gentoo 后,我很快把稳到 KDE 的编译韶光非常长,这让我没办法连续利用它。我四处探求更大略的办理方案,最初利用了 Openbox 和 Fluxbox 。某次,为了能更多进行纯键盘操作,我开始考试测验转入平铺窗口管理器,并在研究其初始版本的时候学习了 dwm 和 awesome 。
终极,由于 xmonad 的灵巧性、可扩展性以及利用纯 Haskell (一种出色的函数编程措辞)编写和配置,终极选择了它。一个例子是,我在家中运行一个 40" 4K 的屏幕,但常常会将它分为四个虚拟屏幕,每个虚拟屏幕显示一个事情区,每个事情区自动排列在我的窗口上。当然, xmonad 有一个对应的 模块 。
dzen 和 conky 对我来说是一个非常大略的状态栏。我的整体 conky 配置看起来是这样的:
out_to_console yesupdate_interval 1total_run_times 0TEXT${downspeed eth0} ${upspeed eth0} | $cpu% ${loadavg 1} ${loadavg 2} ${loadavg 3} $mem/$memmax | ${time %F %T}
输入命令直接通过管道输入 dzen2:
conky | dzen2 -fn '-xos4-terminus-medium-r-normal--12-------' -bg '#000000' -fg '#ffffff' -p -e '' -x 1000 -w 920 -xs 1 -ta r
对我而言,一项主要功能是在完成事情后使终端发出蜂鸣声。只须要大略地在 zsh 中的 PR_TITLEBAR 变量中添加一个 \a 字符就可以做到,只要事情完造诣可以发出蜂鸣声。当然,我利用了命令:
echo "blacklist pcspkr" > /etc/modprobe.d/nobeep.conf
将 pcspkr 内核模块列入黑名单来禁用实际的蜂鸣声。相反 urxvt 的 URxvt.urgentOnBell: true 设置会将声音变为尖锐。之后 xmonad 有一个 urgency 钩子来捕捉这类旗子暗记,并且我可以利用组合键自动聚焦到当前的发出紧急旗子暗记的窗口。在 dzen 中我可以看到一个俊秀且通亮的 #ff0000 紧急窗口。
在我条记本上所得到的终极成品是:
Laptop screenshot
我听说前几年 i3 变得非常盛行,但它哀求更多的手动窗口对齐而不是自动对齐。
我意识到也有像 tmux 那样的终端多路复用器,但我仍想要一些图形化运用程序,因此终极我没有有效地利用它们。
终端连续性为了使终端保持生动状态,我利用了 dtach ,它只是仿照屏幕分离功能。为了使打算机上的每个终端都可连接和断开,我编写了一个小的封装脚本。 这意味着,纵然必须重新启动 X 做事器,我也可以使所有终端都运行良好,包括本地和远程终端。
Shell & 编程对付 shell,我利用 zsh 而不是 bash ,由于它有浩瀚的功能。
作为终端仿照,我创造 urxvt 足够轻巧,支持 Unicode 编码和 256 色,具有出色的性能。另一个主要的功能是可以分别运行 urxvt 客户端和守护进程。因此,纵然大量终端也险些不占用任何内存(回滚缓冲区除外)。
对我而言,只有一种字体看起来绝对干净和完美: Terminus 。 由于它是位图字体,因此所有内容都是完美像素,渲染速率极快且 CPU 利用率低。为了能利用 CTRL-WIN-[1-7] 在每个终端按需切换字体,我的 ~/.Xdefaults 包含:
URxvt.font: -xos4-terminus-medium-r-normal--14-------dzen2.font: -xos4-terminus-medium-r-normal--14-------URxvt.keysym.C-M-1: command:\033]50;-xos4-terminus-medium-r-normal--12-------\007URxvt.keysym.C-M-2: command:\033]50;-xos4-terminus-medium-r-normal--14-------\007URxvt.keysym.C-M-3: command:\033]50;-xos4-terminus-medium-r-normal--18-------\007URxvt.keysym.C-M-4: command:\033]50;-xos4-terminus-medium-r-normal--22-------\007URxvt.keysym.C-M-5: command:\033]50;-xos4-terminus-medium-r-normal--24-------\007URxvt.keysym.C-M-6: command:\033]50;-xos4-terminus-medium-r-normal--28-------\007URxvt.keysym.C-M-7: command:\033]50;-xos4-terminus-medium-r-normal--32-------\007URxvt.keysym.C-M-n: command:\033]10;#ffffff\007\033]11;#000000\007\033]12;#ffffff\007\033]706;#00ffff\007\033]707;#ffff00\007URxvt.keysym.C-M-b: command:\033]10;#000000\007\033]11;#ffffff\007\033]12;#000000\007\033]706;#0000ff\007\033]707;#ff0000\007
对付编程和书写,我利用 Vim 语法高亮显示和 ctags 进行索引,以及一些带有 grep 、sed 和其他用于搜索和操作的常用终端窗口。这可能不像 IDE 那样舒适,但可以实现更多的自动化。
Vim 的一个问题是你已经习气了它的键映射,因此希望在任何地方都利用它们。
在 shell 功能不足强大时, Python 和 Nim 作为脚本措辞也不错。
系统监控htop (查看当前站点的后台运行,是托管做事器的实时视图)非常适宜快速理解软件确当前运行状态。 lm_sensors 可以监控硬件温度、风扇和电压。 powertop 是一款由 Intel 发布的精良省电小工具。 ncdu 可以交互式剖析磁盘利用情形。
nmap 、 iptraf-ng、 tcpdump 和 Wireshark 都是剖析网络问题的基本工具。
当然还有很多更精良的工具。
邮件 & 同步在我的家庭做事器上,我为自己所有的邮箱账号运行了 fetchmail 守护进程。fetchmail 只是检索收到的邮件并调用 procmail :
#!/bin/shfor i in /home/deen/.fetchmail/; do FETCHMAILHOME=$i /usr/bin/fetchmail -m 'procmail -d %T' -d 60done
配置非常大略,然后等待做事器关照我们有新的邮件:
poll imap.1und1.de protocol imap timeout 120 user "dennis@felsin9.de" password "XXX" folders INBOX keep ssl idle
我的 .procmailrc 配置包含一些备份全部邮件的规则,并将邮件整理在对应的目录下面。例如,基于邮件列表名或者邮件标题:
MAILDIR=/home/deen/shared/MaildirLOGFILE=$HOME/.procmaillogLOGABSTRACT=noVERBOSE=offFORMAIL=/usr/bin/formailNL="":0wc ! ? test -d /media/mailarchive/`date +%Y`| mkdir -p /media/mailarchive/`date +%Y`# Make backups of all mail received in format YYYY/YYYY-MM:0c/media/mailarchive/`date +%Y`/`date +%Y-%m`:0 ^From: .(.@..kit.edu|.@..uka.de|.@..uni-karlsruhe.de)$MAILDIR/.uni/:0 ^list-Id:.lists.kit.edu$MAILDIR/.uni-ml/[...]
我利用 msmtp 来发送邮件,它也很好配置:
account defaulthost smtp.1und1.detls ontls_trust_file /etc/ssl/certs/ca-certificates.crtauth onfrom dennis@felsin9.deuser dennis@felsin9.depassword XXX[...]
但是到目前为止,邮件还在做事器上。 我的文档全部存储在一个目录中,我利用 Unison 在所有打算机之间进行同步。Unison 可以视为双向交互式 rsync ,我的邮件是这个文件目录下的一部分,因此它们终极存储在我的电脑上。
这也意味着,只管邮件会立即到达我的邮箱,但我只是按需拿取,而不是邮件一到达时就立即收到关照。
从此我利用 mutt 阅读邮件,利用侧边栏显示我的邮件目录。 /etc/mailcap 文件对付显示非纯文本邮件( HTML, Word 或者 PDF)不可或缺:
text/html;w3m -I %{charset} -T text/html; copiousoutputapplication/msword; antiword %s; copiousoutputapplication/pdf; pdftotext -layout /dev/stdin -; copiousoutput
新闻 & 通讯
Newsboat 是一个非常棒的终端 RSS/Atom 阅读器。我在一个有约 150 个提要的 tach 会话做事器上运行它。也可以在本地选择提要,例如:
ignore-article "https://forum.ddnet.tw/feed.php" "title =~ \"Map Testing •\" or title =~ \"Old maps •\" or title =~ \"Map Bugs •\" or title =~ \"Archive •\" or title =~ \"Waiting for mapper •\" or title =~ \"Other mods •\" or title =~ \"Fixes •\""
我以同样的办法利用 Irssi 进行 IRC 通讯。
日历remind 是一个可以从命令行获取的日历。通过编辑 rem 文件可以设置新的提醒:
# One time eventsREM 2019-01-20 +90 Flight to China %b# Recurring HolidaysREM 1 May +90 Holiday "Tag der Arbeit" %bREM [trigger(easterdate(year(today()))-2)] +90 Holiday "Karfreitag" %b# Time ChangeREM Nov Sunday 1 --7 +90 Time Change (03:00 -> 02:00) %bREM Apr Sunday 1 --7 +90 Time Change (02:00 -> 03:00) %b# BirthdaysFSET birthday(x) "'s " + ord(year(trigdate())-x) + " birthday is %b"REM 16 Apr +90 MSG Andreas[birthday(1994)]# SunSET $LatDeg 49SET $LatMin 19SET $LatSec 49SET $LongDeg -8SET $LongMin -40SET $LongSec -24MSG Sun from [sunrise(trigdate())] to [sunset(trigdate())][...]
遗憾的是,目前 remind 中还没有中国农历的提醒功能,因此中国的节日不易打算。
我给提醒设置了两个名字:
rem -m -b1 -q -g
按韶光顺序核对待办事项清单
rem -m -b1 -q -cuc12 -w$(($(tput cols)+1)) | sed -e "s/\f//g" | less
显示适应终端宽度的日历:
remcal
字典
rdictcc 是鲜为人知的字典工具,它可以利用 dict.cc 很棒的词典并将他们转存在本地数据库中:
$ rdictcc rasch====================[ A => B ]====================rasch: - apace - brisk [speedy] - cursory - in a timely manner - quick - quickly - rapid - rapidly - sharpish [Br.] [coll.] - speedily - speedy - swift - swiftlyrasch [gehen]: - smartly [quickly]Rasch {n} [Zittergras-Segge]: - Alpine grass [Carex brizoides] - quaking grass sedge [Carex brizoides]Rasch {m} [regional] [Putzrasch]: - scouring pad====================[ B => A ]====================Rasch model: - Rasch-Modell {n}
记录和阅读
我有一个大略记录任务的备忘录,在 Vim 会话中基本上一贯处于打开状态。我也利用备忘录作为事情中“已完成”事情的记录,这样就可以检讨自己每天完成了哪些任务。
对付写文件、信件和演示文稿,我会利用 LaTeX 进行高等排版。德式的大略信件可以这样设置,例如:
\documentclass[paper = a4, fromalign = right]{scrlttr2}\usepackage{german}\usepackage{eurosym}\usepackage[utf8]{inputenc}\setlength{\parskip}{6pt}\setlength{\parindent}{0pt}\setkomavar{fromname}{Dennis Felsing}\setkomavar{fromaddress}{Meine Str. 1\\69181 Leimen}\setkomavar{subject}{Titel}\setkomavar{enclseparator}{Anlagen}\makeatletter\@setplength{refvpos}{89mm}\makeatother\begin{document}\begin{letter} {Herr Soundso\\Deine Str. 2\\69121 Heidelberg}\opening{Sehr geehrter Herr Soundso,}Sie haben bei mir seit dem Bla Bla Bla.Ich fordere Sie hiermit zu Bla Bla Bla auf.\closing{Mit freundlichen Grüßen}\end{letter}\end{document}
在 我的私人网站 上可以找到更多的示例文档和演示文稿。
Zathura 读取 PDF 文件速率很快,支持 Vim 类控件,还支持两种不同的 PDF 后端: Poppler 和 MuPDF。另一方面,在偶尔碰着 Zathura 无法打开的文件时, Evince 则显得更全能一些。
图片编辑简便的选择是, GIMP 和 Inkscape 分别用于照片编辑和交互式向量图形。
有时 Imagemagick 已经足够好了,它可以从命令行直策应用,从而自动编辑图片。同样 Graphviz 和 TikZ 可以用来绘制曲线图和其他图表。
Web 浏览器对付 Web 浏览器,我一贯在利用 Firefox 。相较于 Chrome,它的可扩展性更好,资源利用率更低。
不幸的是,在 Firefox 完备改用 Chrome 风格的扩展之后, Pentadactyl 扩展的开拓就停滞了,以是我的浏览器中再也没有令人满意的 Vim 类控件了。
媒体播放器通过设置 vo=gpu 以及 hwdec=vaapi,具有硬件解码功能的 mpv 在播放期间 CPU 的占用率保持在 5%。相较于默认的 PulseAudio,mpv 中的 audio-channels=2 彷佛可以使我的立体扬声器/耳机得到更清晰的降级混频。一个很棒的小功能是用 Shift-Q 退出,而不是只用 Q 来保存回放位置。当你与母语是其他措辞的人一起看视频时,你可以利用 --secondary-sid= 同时显示两种字幕,主字幕位于底部,次字幕位于屏幕顶部。
我的无线鼠标可以大略地通过一个小的配置文件( ~/.config/mpv/input.conf )实现远程掌握 mpv :
MOUSE_BTN5 run "mixer" "pcm" "-2"MOUSE_BTN6 run "mixer" "pcm" "+2"MOUSE_BTN1 cycle sub-visibilityMOUSE_BTN7 add chapter -1MOUSE_BTN8 add chapter 1
youtube-dl 非常适宜不雅观看在线托管的视频,利用 -f bestvideo+bestaudio/best --all-subs --embed-subs 命令可得到最高质量的视频。
作为音乐播放器, MOC 不再生动开拓,但它仍是一个大略单纯的播放器,可以播放各种可能的格式,包括最不常用的 Chiptune 格式。在 AUR 中有一个 补丁 增加了 PulseAudio 支持。纵然在 CPU 时钟频率降到 800 MHz, MOC 也只利用了单核 CPU 的 1-2% 。
moc
我的音乐收藏夹保存在我的家庭做事器上,因此我可以从任何地方访问它。它利用 SSHFS 挂载并自动安装在 /etc/fstab/ 目录下:
root@server:/media/media /mnt/media fuse.sshfs noauto,x-systemd.automount,idmap=user,IdentityFile=/root/.ssh/id_rsa,allow_other,reconnect 0 0
跨平台构建
除了 Linux 本身,它对付构建任何主流操作系统的软件包都很精良!
一开始,我利用 QEMU 与旧版 Debian、 Windows 以及 Mac OS X VM 一起构建这些平台。
现在我在旧版 Debian 发行版上转而利用 chroot (以得到最大的 Linux 兼容性),在 Windows 上利用 MinGW 进行交叉编译,在 Mac OS X 上则利用 OSXCross 。
用于 构建 DDNet 的脚本以及 更新库构建的解释 的脚本都基于这个。
备份常日,我们都会忘却备份。纵然这是末了一节,它也不应该成为事后诸葛。
十年前我写了 rrb (反向 rsync 备份)重新封装了 rsync ,因此我只须要将备份做事器的 root SSH 权限付与正在备份的打算机。令人惊异地是,只管我一贯在利用 rrb ,但它在过去十年里没有任何改变。
备份文件直接存储在文件系统中。利用硬链接实现增量备份(--link-dest)。一个大略的 配置 定义了备份保存韶光,默认为:
KEEP_RULES=( \ 77 \ # One backup a day for the last 7 days318 \ # 8 more backups for the last month 365 11 \ # 11 more backups for the last year18254 \ # 4 more backups for the last 5 years)
由于我的一些打算机没有静态 IP / DNS 但仍想利用 rrb 备份,那我会利用反向安全隧道(作为 systemd 做事):
[Unit]Description=Reverse SSH TunnelAfter=network.target[Service]ExecStart=/usr/bin/ssh -N -R 27276:localhost:22 -o "ExitOnForwardFailure yes" serverKillMode=processRestart=always[Install]WantedBy=multi-user.target
现在,隧道运行备份时,做事器可以通过 ssh -p 27276 localhost 命令或者利用 .ssh/config 到达做事器端。
Host cr-remote HostName localhost Port 27276
在谈及 SSH 技巧时,有时由于某些中断的路由会很难访问到做事器。在那种情形下你可以借道其他做事器的 SSH 连接,以得到更好的路由。在这种情形下,你可能通过美国连接访问到我的中国做事器,而来自德国的不可靠连接可能须要几个周:
Host chn.ddnet.tw ProxyCommand ssh -q usa.ddnet.tw nc -q0 chn.ddnet.tw 22 Port 22
结语
感谢阅读我工具的收藏。这个中我大概遗漏了许多日常中自然成习气的步骤。让我们来看看我的软件设置不才一年里能多稳定吧。如果你有任何问题,随时联系我 dennis@felsin9.de 。
在 Hacker News 下评论吧。
via: hookrace.net
作者: Dennis Felsing 选题: lujun9972 译者: chenmu-kk 校正: wxy
本文由 LCTT 原创编译, Linux中国 名誉推出
点击“理解更多”可访问文内链接