The C Programming Language - annotation, 0

The C Programming Language, Second Edition

作者Brian W. Kernighan,Dennis M. Ritchie,即K & R。
ISBN:0-13-110362-8。
中文版:《C程序设计语言》(第2版·新版),ISBN:978-7-111-12806-9。

一个编程语言的基本元素

…类型和表达式、控制流、函数与程序结构、指针与数组、结构、输入与输出、UNIX系统接口、标准库等内容。…

引言

C语言是一种通用的程序设计语言。它同UNIX系统之间具有非常密切的联系——C语言是在UNIX系统上开发的,并且,无论是UNIX系统本身还是其上运行的大部分程序,都是用C语言编写的。但是,C语言并不受限于任何一种操作系统或机器。由于它很适合用来编写编译器和操作系统,因此被称为“系统编程语言”,但它同样适合于编写不同领域中的大多数程序。

…BCPL语言…B语言…C语言…

C语言是一种相对“低级”的语言。

…ANSI标准,即“ANSI C”。

…不过,C语言保持了其初始的设计思想,即程序员了解他们在做什么,惟一的要求是程序员要明确地表达他们的意图。

pyenv:Python版本管理

pyenv - Python Version Management

安装方式一

1
2
3
4
5
6
7
8
9
10
11
$ curl https://pyenv.run | bash
# 使用此方式也会安装pyenv-doctor,pyenv-update和pyenv-virtualenv plugins

# 修改~/.bashrc或者~/.profile如下
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
# command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)" # init virtualenv plugin

# RESTART SHELL

安装方式二

1
2
3
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

$ cd ~/.pyenv && src/configure && make -C src # optional

安装必要的包(用于构建Python)

1
2
3
$ sudo apt install build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev curl libncursesw5-dev xz-utils tk-dev \
libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

pyenv使用

1
2
3
4
$ pyenv install 3.12.1

$ pyenv global/local/shell
$ pyenv version/versions

pyenv-virtualenv插件

1
2
3
4
5
6
7
8
9
# 安装
$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

# 使用
$ pyenv virtualenvs
$ pyenv virtualenv
$ pyenv activate
$ pyenv deactivate
$ pyenv virtualenv-delete

pyenv-virtualenvwrapper插件(可选)

1
2
3
4
5
6
# 安装
$ git clone https://github.com/pyenv/pyenv-virtualenvwrapper.git $(pyenv root)/plugins/pyenv-virtualenvwrapper

# 使用
$ pyenv virtualenvwrapper
$ pyenv virtualenvwrapper_lazy

使用pyvenv而不是virtualenv

1
export PYENV_VIRTUALENVWRAPPER_PREFER_PYVENV="true"

virtualenvwrapper

virtualenvwrapper文档virtualenvwrapper可以提供mkvirtualenvlsvirtualenvworkon这样的命令,以方便使用虚拟环境。

一点说明

一般一个系统上只安装一个版本的Python。有了pyenv就可以方便地安装多个版本,并在不同版本间切换。

早期的Python只能装一组包(一个环境),难免会出现包版本冲突的情况。于是发展出了virtualenv这的方案,它可以创建多个虚拟环境,这样就可以在不同的环境中安装不同版本的包。

virtualenv的基础上,它的一个子集成为了后来Python内置库——venv模块(pyvenv包)。

virtualenvwrapper提供了方便使用虚拟环境的命令。

SSH相关的设置

在Ubuntu主机上安装SSH服务器

1
$ sudo apt-get install openssh-server

公钥认证

参见What is SSH Public Key Authentication?

ssh目录

1
2
3
4
5
6
7
8
9
10
11
# Windows
## system
C:\ProgramData\ssh\
## user
C:\Users\Foo\.ssh\

# Linux
## system
/etc/ssh/
## user
/home/foo/.ssh/

key文件

1
2
3
4
# private key
id_rsa
# public key
id_rsa.pub

ssh-keygen生成client的key pair

对public key授权

可以在client端执行ssh-copy-id命令;也可以在server端直接编辑~/.ssh/authorized_keys文件,加入client的public key。

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

以前连接过的server端的key文件更新了,或者IP变化了,会出现这种情况。

  1. 可以用ssh-keygen -Rknown_hosts移除server的fingerprint。
  2. 然后用ssh-keyscan将新的fingerprint加入。
  3. 也可以直接修改known_hosts

值得试试的容器镜像

工具类/Utility

  • alpine
  • busybox
  • hello-world

语言类/Programming Language

  • dart
  • golang
  • node
  • openjdk
  • python
  • rust

操作系统/OS

  • debian
  • fedora
  • ubuntu

容器技术/Container

  • docker

服务器/Server

  • httpd
  • nginx

服务/Service

  • bitnami/wordpress
  • bitnami/wordpress-nginx
  • wordpress

misc

  • docker/whalesay

如何清理一台虚拟机

我经常使用Linux操作系统,不过大多数时间都是在虚拟机上面。在报废一台虚拟机之前,我需要对机器上的内容做清理。

目标:清理掉ubuntu虚拟机

检查应用(apps)

  • dpkg包
  • snap包
  • docker镜像
  • virtual machine及其snapshot

检查数据(data)

  • 文件系统

输出列表

  • 最常用的应用列表
  • 随用随装的应用列表
  • 感兴趣的话题列表
  • 针对话题去找工具

背后的想法

把清理的过程记录下来,也许一开始不是完整的,但是可以不断的完善。把东西记下来,自然就能知道自己在关注什么。

应用列表最好平时就维护。平时不记也不会忘记,因为不常用的忘了也不可惜,常用的也忘不了。最糟糕的情况不过是清理时再过一遍。

做一件事情如果能够一次做到位,不走弯路,就是捷径。一件事情反复做,自然就能高效。

最终的目标

应用文档化
文档git化