#97 关于 Linux 发行版

2022-08-28

发行版

  • Minix
  • Unix 阵营
  • 闭源
    • HP-UX
    • Solaris
    • AIX
    • macOS
  • 开源
    • FreeBSD
    • NetBSD
    • OpenBSD
    • DragonFly BSD
  • Linux 阵营
  • Android (AOSP)
    • LineageOS
  • Debian
    • Ubuntu
  • RedHat
    • CentOS
  • OpenSUSE
  • Gentoo
  • Arch Linux
    • Manjaro

Debian / Ubuntu 和 RHEL / CentOS 衍生版本太多,就不列了。
我们常见的 Linux 发行版应该差不多都能找到自己的位置。

桌面环境

图形库主要就是两种:GTK,Qt

  • 基于 GTK
  • GNOME
  • Xfce
  • Cinnamon
  • MATE
  • LXDE
  • Unity:ubuntu
  • Budgie
  • 基于 Qt
  • KDE Plasma
  • LXQt
  • Deepin Desktop Environment (DDE)
  • UKUI:ubunty kylin

个人看法

  1. 在国际关系越来越趋于对抗的这个局面下,Linux 对于中俄等国都有战略安全的重要作用。
  2. 国产 Linux 系统厂商大有搞头。
  3. 关于国产系统:
    1. 国产 Linux 桌面只有 Deepin 可以一战,而且做了太多工作,应该得到尊敬。
    2. 国产服务器系统我一个都没有用过,不知道如何。
  4. Unix 系统的生态和 Linux 完全不是同一个级别。
  5. 除非有特别的原因,否则应该直接选择 Linux。
  6. Deepin 等国产 Linux 系统提供商想搞什么国产根系统,想切断和社区的关联,在我看来是非常愚蠢的。
  7. 反而应该加大对社区的投入。
  8. 如果不知道该选哪个 Linux 发行版,我的建议是 Ubuntu。
  9. 无论是服务器还是个人使用,都可以直接选择上一个版本 Ubuntu LTS
  10. 如果比较喜欢尝鲜,个人使用可以选最新版本 Ubuntu
  11. 如果对 Ubuntu snap 不满意,就选择 Debian。
  12. 如果问选哪个桌面环境,就选 GNOME
  13. KDE 我没有用过,不知道
  14. 选 GNOME 作为默认桌面的多,应该是有道理的
  15. 桌面并没有那么重要,方便快捷的命令行操作才是 Linux 精髓
  16. 如果对发行版不满,就在基准系统上通过增删组件达成自己的目的,不要觉得换一个系统就能完美解决问题。
  17. 如果有时间折腾不同的发行版,还不如去玩一会儿游戏。

#96 重启 GNOME

2022-05-17

Restart GNOME without rebooting

Ctrl–Alt–Backspace
sudo /etc/init.d/gdm restart
killall gnome-panel

以上方法没有用,下面这个方法挺好的 (My Choice):

killall -HUP gnome-shell

在桌面还有响应的时候(比如桌面组件出了一些乱码之类的问题):

Alt + F2, and restart/r

参考资料与拓展阅读

#95 mpv 播放器

2022-04-04

快捷键

  • Left/Right:快进, 快退
  • Up/Down:快进, 快退
  • [/]:倍速 x0.9, x1.1
  • {/}:倍速 x0.5, x2
  • Space (p):暂停/播放
  • ,/.: 暂停,然后逐帧前进,逐帧后退
  • 9/0: 音量
  • s: 截图
  • q: 退出
  • v: 字幕开关
  • j: 切换字幕
  • o: 显示进度
  • f: 全屏开关
  • i: 显示视频信息
  • #: 切换音轨
  • l: 设置循环 A-B 点, 循环播放,清除循环

配置

系统配置:/etc/mpv/mpv.conf

cat /etc/mpv/mpv.conf
hwdec=vaapi

用户配置 (需要自己创建):

  • ~/.config/mpv/mpv.conf
  • ~/.config/mpv/input.conf
  • ~/.config/mpv/fonts.conf
  • ~/.config/mpv/script-opts/osc.conf
no-border

idle=yes

osd-font-size=24
save-position-on-quit

hwdec=auto

screenshot-directory=~/Pictures/Screenshots
screenshot-format=png
screenshot-template="%tY%tm%td-%tH%tM%tS-mpv-%F-%wH%wM%wS%wT"
mkdir -p ~/.config/mpv/scripts ~/.config/mpv/script-opts
find ~/.config/mpv/ -ls

GH=https://raw.githubusercontent.com
wget $GH/jonniek/mpv-menu/master/menu.lua -P ~/.config/mpv/scripts/
wget $GH/jonniek/mpv-playlistmanager/master/playlistmanager.lua -P ~/.config/mpv/scripts/
wget $GH/jonniek/mpv-playlistmanager/master/playlistmanager.conf -P ~/.config/mpv/script-opts/
wget $GH/jonniek/mpv-playlistmanager/master/menu.json -P ~/.config/mpv/script-opts/

#94 HTTP 超时相关的疑问

2022-02-25

今天发现一个奇怪的现象,相同的代码在 CentOS 7 服务器上发起 HTTP 请求 3 秒之后超时,报 “TimeoutError: [Errno 110] Connection timed out”。
在我本地就按我们的定义的超时时间 5 秒超时,报 “tornado.simple_httpclient.HTTPTimeoutError: Timeout while connecting”。

#93 setcap

2022-02-08

set file capabilities, 设置文件权限

setcap
usage: setcap [-q] [-v] [-n <rootid>] (-r|-|<caps>) <filename> [ ... (-r|-|<capsN>) <filenameN> ]

 Note <filename> must be a regular (non-symlink) file.

#92 OpenWrt 开源路由器

2022-01-31

历史

flowchart LR
WRT54G --> Alchemy --> DD-WRT
WRT54G --> HyperWRT --> Tomato --> ASUSWRT --> Asuswrt-Merlin[Asuswrt-Merlin 梅林]
ASUSWRT --> Padavan[Padavan 老毛子]
WRT54G --> OpenWRT
  • 2002 年 12 月 Linksys 发布 WRT54G 系列家用无线路由器(操作系统是基于 Linux 内核开发)。
    PS: Linksys 是美国加州的台湾移民创建, 2003 年被思科收购, 2013 年又被 Belkin 收购。2018 年 Belkin 被台湾的富士康收购。
  • 2003 年,思科收购 Linsys 之后,Linux 内核开发团队与自由软件基金会要求按照 GPL 协议公开 WRT54G 系统的源代码
    最后思科公司面对各方面压力,按照社区要求开发了源代码。
    Linsys 之后也一直在销售 WRT54G 系列路由器,据说销量还不错。
  • 2003 年,开发者基于 WRT54G 开发了 Alchemy 项目,pre 版本就成为相关领域当时最热门的项目。
  • 2004 Alchemy 1.0 发布、OpenWrt 项目启动、HyperWRT 项目启动。
  • 2005 年,由于 Alchemy 开发者急于商业化(要求支付每年 20 美元订阅费),社区分叉出了 DD-WRT 项目。
    现在依然是一个积极开发中的项目:https://svn.dd-wrt.com/ GitHub
    最后一个稳定版本 24 发布于 2008 年,之后十几年高频度发布 beta 版本:
    https://download1.dd-wrt.com/dd-wrtv2/downloads/betas/
  • 2005 年 12 月之后,DD-WRT 改成基于 OpenWrt 项目。
    也不重要,因为这个项目在 2008 年之后就没有开发了。
  • 2006 年,HyperWRT 项目趋于死亡,Jonathan Zarate 基于 HyperWRT 创建 Tomato 项目。
    比较独创的是开发了一个 Web 管理界面。
    2014 年之后就没有继续更新,但是有很多子项目,包括现在仍在开发中的 FreshTomato 和 ASUSWRT。
  • 2008 Gargoyle (石像鬼) v1.0 发布,加入了自己的包管理器(gpkg);
  • 2011 年 ASUSWRT 项目启动,至今还在积极开发中。
  • 2013 年,加拿大开发者发起 Asuswrt-Merlin(梅林固件)项目。
    https://www.asuswrt-merlin.net/
    https://github.com/RMerl/asuswrt-merlin
    https://github.com/RMerl/asuswrt-merlin.ng
  • 2016 年,俄罗斯开发者 Padavan 基于华硕固件(ASUSWRT)开发 rt-n56u 项目,目标是寻求对华硕路由器设备硬件的绝对控制。
    人们用开发者的名字来当做项目名字 Padavan,俗称“老毛子”。
    和梅林固件专注的是华硕高端机型(封闭的博通芯片)不同,老毛子主要针对的是华硕低端设备(联发科芯片),资源要求低。
  • 2016 年,因为内部分歧,OpenWRT 部分核心开发者出走,新起 LEDE 项目(Linux 嵌入式开发环境)。
    两年之后,双方和解,两个项目又合并到一起,采用 LEDE 的制度,继续使用 OpenWrt 品牌。
  • PandoraBox,国内项目,基于 OpenWrt,早期叫做 DreamBox。
    已经很久没有听到相关声音了。

LibreCMC

2014 年,作为 Linux 嵌入式发行版发行。
2015 年,与 LibreWRT 项目(研究项目)合并。
2017 年,基于 LEDE 17。
2020 年,基于 OpenWrt 19。

爱快

iKuai / iKuic (海外)

北京丰台一家网络设备厂商的闭源路由器系统,有商业版和免费版。
https://www.ikuai8.com/component/download

附:List of router firmware projects

  • Linux-based
    • entirely free
      • Endian
      • Floppyfw
      • IPFire
      • LEDE
      • libreCMC
      • OpenWrt
      • VyOS
      • Zeroshell
    • partly proprietary
      • AirOS & EdgeOS
      • Alliedware Plus
      • DD-WRT
      • ExtremeXOS
      • FRITZ!Box
      • RouterOS
      • SmoothWall
      • Tomato
      • Vyatta
  • FreeBSD-based
    • entirely free
      • m0n0wall
      • pfSense
      • OPNsense:pfSense 分叉
    • partly proprietary
      • Junos OS
  • proprietary
    • Cisco IOS
    • ExtremeWare
    • NX-OS
    • TiMOS
    • VRP

参考资料与拓展阅读

#91 Linux 小工具汇总

2022-01-16

常规的系统自带工具就不提了。

  • htop 代替 top
  • jq JSON
  • bat 代替 cat
  • dog DNS 查询
  • tldr 替代 man 文档
  • ack ag 代替 grep
  • fzf
  • fuck
  • mtr 代替 traceroute
  • httppie 代替 wget 和 curl
  • ncdu 代替 du
  • duf 代替 df
  • pydf 代替 df
  • fd 代替 find
  • eva 代替 ls
  • neovim 代替 vim
  • lftp 代替 ftp
  • aria2
  • nnn

参考资料与拓展阅读

#89 plocate

2021-12-15

Fedora 36 将采用 plocate 替代 mlocate 成为默认的查找索引,据说更快。
而且 Debian 也早采纳了 plocate。

安装

apt show plocate
# Package: plocate
# Version: 1.1.8-2
# Priority: optional
# Section: universe/utils
# Origin: Ubuntu
# Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
# Original-Maintainer: Steinar H. Gunderson <sesse@debian.org>
# Bugs: https://bugs.launchpad.net/ubuntu/+filebug
# Installed-Size: 510 kB
# Depends: libc6 (>= 2.33), libgcc-s1 (>= 3.3.1), libstdc++6 (>= 6), liburing1 (>= 0.7), libzstd1 (>= 1.4.0)
# Suggests: systemd-sysv | powermgmt-base, systemd-sysv | nocache
# Breaks: mlocate
# Replaces: mlocate
# Homepage: https://plocate.sesse.net/
# Task: xubuntu-desktop, ubuntu-budgie-desktop, ubuntu-budgie-desktop-raspi
# Download-Size: 119 kB
# APT-Manual-Installed: yes
# APT-Sources: https://mirrors.cloud.tencent.com/ubuntu impish/universe amd64 Packages
# Description: much faster locate
#  plocate is a locate(1) based on posting lists, giving much faster searches
#  on a much smaller index. It is a drop-in replacement for mlocate in nearly
#  all aspects, and is fast on SSDs and non-SSDs alike.

sudo apt install -y plocate

使用

根据 apt show 信息,plocate 会 break mlocate。
updatedb 命令会改由 plocate 提供。

ll /usr/bin/locate /usr/bin/updatedb /etc/alternatives/locate /etc/alternatives/updatedb
lrwxrwxrwx 1 root root 16 2021-12-15 11:51:56 /etc/alternatives/locate -> /usr/bin/plocate
lrwxrwxrwx 1 root root 26 2021-12-15 11:51:56 /etc/alternatives/updatedb -> /usr/sbin/updatedb.plocate
lrwxrwxrwx 1 root root 24 2021-12-15 11:51:56 /usr/bin/locate -> /etc/alternatives/locate
lrwxrwxrwx 1 root root 26 2021-12-15 11:51:56 /usr/bin/updatedb -> /etc/alternatives/updatedb

根据官网提供的演示数据,其 DB 只有 mlocate 的 40%,查询时间只有 mlocate 的万分之四。

其具体操作和 mlocate 类似:

sudo updatedb

locate go.mod

有没有 2500 倍的提升我不知道,但是感觉好像确实快。挺好!

参考资料与拓展阅读

#88 Linux 文件创建时间

2021-12-12
stat /tmp/edge_shutdown_crash.txt
  文件:/tmp/edge_shutdown_crash.txt
  大小:2          块:8          IO 块:4096   普通文件
设备:801h/2049d   Inode:9306564     硬链接:1
权限:(0664/-rw-rw-r--)  Uid:( 1000/ markjour)   Gid:( 1000/ markjour)
最近访问:2021-12-12 10:24:17.318846619 +0800
最近更改:2021-12-12 10:42:27.982887293 +0800
最近改动:2021-12-12 10:42:27.982887293 +0800
创建时间:2021-12-12 10:24:17.318846619 +0800

# %w     time of file birth, human-readable; - if unknown
# %W     time of file birth, seconds since Epoch; 0 if unknown
# %x     time of last access, human-readable
# %X     time of last access, seconds since Epoch
# %y     time of last data modification, human-readable
# %Y     time of last data modification, seconds since Epoch
# %z     time of last status change, human-readable
# %Z     time of last status change, seconds since Epoch
stat -c "%w" /tmp/edge_shutdown_crash.txt
2021-12-12 10:24:17.318846619 +0800

sudo debugfs -R 'stat /tmp/edge_shutdown_crash.txt' /dev/sda1 | cat
debugfs 1.46.3 (27-Jul-2021)
Inode: 9306564   Type: regular    Mode:  0664   Flags: 0x80000
Generation: 3654863154    Version: 0x00000000:00000001
User:  1000   Group:  1000   Project:     0   Size: 2
File ACL: 0
Links: 1   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x61b56193:ea56adf4 -- Sun Dec 12 10:42:27 2021
 atime: 0x61b55d51:4c04da6c -- Sun Dec 12 10:24:17 2021
 mtime: 0x61b56193:ea56adf4 -- Sun Dec 12 10:42:27 2021
crtime: 0x61b55d51:4c04da6c -- Sun Dec 12 10:24:17 2021
Size of extra inode fields: 32
Inode checksum: 0xd223c644
EXTENTS:
(0):39635628