#343 Shell 历史

2020-01-07

参考: https://en.wikipedia.org/wiki/Comparison_of_command_shells

Linux Shell

  • Thompson shell (sh), 1971, Unix v1 - v6
    只存在历史中
    在 Bourne shell 之前,贝尔实验室还出了一个 Mashey shell,只出现在 1976 年的 PWB UNIX 中(所以又叫 PWB shell),没有大范围使用
  • Bourne shell (sh), 1977, Unix v7
  • C shell (csh), 1978 img
  • TENEX C shell (tcsh), 1983 img
    是 TENEX 系统开发的 csh 兼容 Shell
  • Korn shell (ksh), 1983 img
  • Bash, 1989 img
  • Almquist shell (ash), 1989 img
  • zsh, 1990 img
  • Debian Almquist shell (dash), an ash fork, 1997
    主体随 ash 是 BSD 协议,不过,可能是为了保持对 bash 的兼容,采用了 bash 项目的一个文件
  • fish, 2005 img

分类

  • ksh, bash, zsh, ash, dash 都是 Bourne shell 兼容。
  • csh, tcsh 就是 csh 兼容。
  • fish

说明

  1. Unix 上的 sh 有版权问题, 所以 BSD 和 Linux 上的 /bin/sh 都指向某一种兼容 Shell (一般是默认 Shell)
  2. RHEL/CentOS 上,默认 Shell 是 Bash
  3. Debian/Ubuntu 上,默认 Shell 是 Dash
  4. FreeBSD 上默认采用 tcsh, 基于 FreeBSD 的 GhostBSD 采用 fish
  5. OpenBSD 上默认采用 pdksh (pd: Public Domain), 不知道和 tsh 什么关系。可能是 OpenBSD 维护的 tsh 兼容 Shell。
  6. NetBSD 上默认采用 ash
  7. 由于 ash 非常轻量级,BusyBox 采用了 dash fork
    然后 BusyBox 被 Alpine Linux, Tiny Core Linux 或者其他嵌入式 Linux (比如 OpenWrt) 采用,所以这些系统的默认 Shell 应该就是 ash

所以可能使用最广泛的 Shell 是 ash 和 bash。

其他:MacOS 上曾经默认采用 bash, 后来专向了 zsh

Windows 平台

  • command.com, 1980
  • cmd.exe, 1993
  • PowerShell, 2006

#337 GNU/Linux 上如何快速创建一个大文件?「from StackOverflow」

2019-12-25

StackOverflow 上看到好些种快速创建文件的命令,逐个测试,在 Ubuntu 下可用的方法有以下几种:

time dd if=/dev/zero of=test.img bs=10M iflag=fullblock,count_bytes count=10G
# 0.00s user 0.45s system 1% cpu 39.144 total

# 在 xfsprogs 包中:
# -n 表示不写入数据
time xfs_mkfile -n 10g test.img
# 0.01s user 0.01s system 2% cpu 0.669 total

# 在 VBox 挂载的虚拟磁盘上执行时遇到 “不支持的操作” 错误
# 在 EXT4 磁盘上没有遇到问题,速度很快
time fallocate -l 10G test.img

time truncate -s 10G test.img
# 0.00s user 0.00s system 46% cpu 0.005 total

time dd if=/dev/zero of=test.img bs=1 count=0 seek=10G
# 0.00s user 0.00s system 77% cpu 0.002 total

最后看到的 dd seek 方案深得征信深得朕心。

根据这个思路,Python 创建 10G 的文件应该这么写(也是我一直以来的写法):

GB = 1 << 30
with open('test.img', 'w') as _file:
    _file.seek(10 * GB - 1)
    _file.write(chr(0))

#334 Systemd 的问题

2019-12-20

开源中国上看到 Debian 正在投票是否支持非 systemd 初始化系统

  1. 2014 年素来混乱的 Debian 社区,经过了一番激烈争论之后(甚至是生命安全威胁),终于决定支持 systemd。
    PS: 这场争议导致部分核心人员离开,主要是对 Debian 社区的管理机制(混乱 “民主”)产生质疑。
  2. 2015 年 5 月发布的 Debian 8.0 (Jessie) 开始使用 Systemd 当默认的初始化系统。
    但是关于 Systemd 的争论从未停止,甚至有部分开发者独自维护了一个拒绝 Systemd 的分叉:Devuan

Systemd 真是闹出好大争议,和 GNOME3 一样。也正是有 GNOME3 的例子(社区总体来说,或者说大多数人,最后还是拥抱了变化,接纳 GNOME3),而且我只是一个实用主义的使用者,我觉得 Systemd 挺好的,能提升性能、使用又方便,为什么不呢。

#332 读史书:兔死狗烹

2019-11-26

范蠡遂去,自齐遗大夫种书曰:“蜚鸟尽,良弓藏;狡兔死,走狗烹。越王为人长颈鸟喙,可与共患难,不可与共乐。子何不去?” 种见书,称病不朝。人或谗种且作乱,越王乃赐种剑曰:“子教寡人伐吴七术,寡人用其三而败吴,其四在子,子为我从先王试之。” 种遂自杀。
《史记 越王勾践世家》

上令武士缚信,载后车。信曰:“果若人言,‘狡兔死,良狗亨;高鸟尽,良弓藏;敌国破,谋臣亡。’天下已定,我固当亨!” 上曰:“人告公反。” 遂械系信。至雒阳,赦信罪,以为淮阴侯。
《史记 淮阴侯列传》

中国哲学书电子化计划