#139 安装 Ubuntu 16.04 LTS 笔记

2016-05-17

重装系统,记录安装过程,留给日后重建同样的开发环境作参考。
其实还有好多细节没有记录,日后慢慢补充完整。

#138 Python bytes 类型

2016-05-16
  1. bytes 按索引取值得到的是整数。

    b'abc'[0]
    97
    
  2. strbytes 只需要编码一下就行了。反过来就是解码一下。

    s = '你好'
    b = bytes(s, 'utf-8')
    # b'\xe4\xbd\xa0\xe5\xa5\xbd'
    assert b.decode('utf-8') == s
    
    bytes('hello')
    TypeError: string argument without an encoding
    
    bytes('hello', 'ascii')
    b'hello'
    
    'hello'.encode()
    b'hello'
    
    bytes('hello', 'utf-16')
    b'\xff\xfeh\x00e\x00l\x00l\x00o\x00'
    
    bytes('hello', 'utf-32')
    b'\xff\xfe\x00\x00h\x00\x00\x00e\x00\x00\x00l\x00\x00\x00l\x00\x00\x00o\x00\x00\x00'
    
  3. bytesint 列表的转换。

    list(b'abc')
    [97, 98, 99]
    
    bytes([97, 98, 99])
    b'abc'
    
    bytes([256])
    ValueError: bytes must be in range(0, 256)
    
    # 大端序
    (2008).to_bytes(length=4, byteorder='big', signed=False)
    b'\x00\x00\x07\xd8'
    # 小端序
    (2008).to_bytes(length=4, byteorder='little', signed=False)
    b'\xd8\x07\x00\x00'
    struct.pack('<I', 2008)
    b'\xd8\x07\x00\x00'
    
    int.from_bytes(b'\x00\x00\x07\xd8', 'big')
    2008
    int.from_bytes(b'\xd8\x07\x00\x00', 'little')
    2008
    
    int.from_bytes(b'abc', 'little')
    6513249
    int.from_bytes(b'cba', 'big')
    6513249
    

    PS:2020/11/02, 字节顺序(大端序、小端序)

  4. Python2 字符串

    # python2
    print(repr('你好'))
    '\xc4\xe3\xba\xc3'
    print('\xc4\xe3\xba\xc3')
    你好
    
    # python3
    print('\xc4\xe3\xba\xc3')
    'ÄãºÃ'
    print('\xc4\xe3\xba\xc3'.encode('latin-1'))
    b'\xc4\xe3\xba\xc3'
    print('\xc4\xe3\xba\xc3'.encode('latin-1').decode('gbk'))
    '你好'
    

#137 Linux 分区方案(Partition Scheme)

2016-05-14

安装 Ubuntu 16.04 时选择的分区方案。

挂载点 大小 意义
/ 50GB 根目录
/boot 10GB 启动目录
/home 150GB 用户主目录
/usr 100GB 程序分区
/var 50GB 变量文件目录
/tmp 50GB 临时文件目录
SWAP 20GB 交换分区

#135 yum 包管理系统

2016-05-02

关于 DNF 的更多信息,参考:2016/05/03 CentOS DNF

介绍

  1. .rpm 包,和 .deb 包是 Linux 生态中两种最主要的包格式。
  2. yum:
  3. 较新版本提供了 dnf 工具,改善 yum

包名

bash-4.2.46-35.el7_9.x86_64.rpm

其中:

  • bash 是名称
  • 4.2.46 是版本
  • 35.el7_9 是构建版本
  • x86_64 是服务器架构
  • rpm 是文件后缀
名称    :bash
架构    :x86_64
版本    :4.2.46
发布    :31.el7
大小    :3.5 M
源    :installed
来自源:anaconda
简介    : The GNU Bourne Again shell
网址    :http://www.gnu.org/software/bash
协议    : GPLv3+
描述    : The GNU Bourne Again shell (Bash) is a shell or command language
         : interpreter that is compatible with the Bourne shell (sh). Bash
         : incorporates useful features from the Korn shell (ksh) and the C shell
         : (csh). Most sh scripts can be run by bash without modification.

基本用法

yum help list # 查看帮助

yum search <package> # 搜索包

yum list
yum list installed
rpm -qa
yum list --upgradable

yum info <package>
rpm -qi <package>

rpm -ql <package> # 已安装包的文件列表
rpm -qd <package> # 已安装包的文件列表中的文档部分
rpm -qc <package> # 已安装包的文件列表中的配置部分

yum repolist

# repoquery 是 yum-utils 包提供的命令
repoquery -l <package> # 文件列表
repoquery -f <filepath> # 查看文件属于哪个包, 比如: `repoquery -f "*/repoquery"`
repoquery --location <package> # 查看包的下载地址

yum deplist <package> # 依赖
rpm -qR <package> # 已安装包的依赖
rpm -q --whatrequires <package> # 反向依赖
rpm -q --whatprovides <filepath>
rpm -qf <filepath>

yum provides <pattern>
yum whatprovides <patter>

yum check-update
yum updateinfo
yum update [package]
yum upgrade [package]
yum update-minimal
yum upgrade-minimal # 和 yum update-minimal 相同
yum downgrade <package>

yum install <package>
yum install <package-rpm-filepath>
yum reinstall

yum makecache
yum clean

yum erase
yum remove
yum autoremove

# list, info, summary, repeat, redo, undo, new, rollback, addon, addon-info, stats, statistics, sync, synchronizepkg, pkgs, pkg-list, pkgs-list, package, package-list, packages, packages-list, pkg-info, pkgs-info, package-info, packages-info
yum history
yum history list
yum history list all

yum versionlock <package>

安装组

RedHat 系列提供的,安装组(Group)的概念非常好。

安装组就是为了某一个目的需要的一组包,比如 gnome-desktop 组是安装一个完整的 gnome 桌面环境,web-server 组是安装 apache 和相关的几个包。

  1. 安装组中有必须安装的包(Mandatory Packages),默认安装的包(Default Packages),也有可选的包(Optional Packages)。
  2. 按我的理解,安装组分成三类:
  3. 可用组 Available Group,就是普通的安装组,包含部分包,可以 install。
  4. 环境组 Environment Group,就是安装组的组,group of goups,比如 minimal 环境组包含必须的 core 组和可选的 debugging 组。也可以 install。
  5. 基础组,比如 core,比如 php,是隐藏的,不可直接 install,用于构建环境组设计的。
    我实在想不到为什么这些组不直接暴露出来,这个设计有什么别的原因。
$ yum help groups
groups [list|info|summary|install|upgrade|remove|mark] [GROUP]

显示或使用、组信息

别名:group, grouplist, groupinfo, groupinstall, groupupdate, groupremove, grouperase
  • yum grouplist
  • yum group list ids 附带组 ID
  • yum group list hidden 列出所有组
  • yum groupinfo
  • yum groupinstall <group>
  • yum install @<group>
  • yum install @^<environment-group>
  • yum --setopt=group_package_types=mandatory,default,optional groupinstall "Web Server"
  • yum groupupdate
  • yum groupremove
  • yum grouperase

相关文件

  • /etc/yum.conf
  • /etc/yum.repos.d/
  • /etc/yum/

/etc/rpm 目录不知道是干什么的。

yum 插件

比如最常见的 fastestmirror,用于自动选择最快的镜像源。所以我们使用 CentOS 时,一般不需要去配置镜像源。

#133 Nginx sticky 指令

2016-04-10

Nginx 商用版 1.5.7 (2013 年) 开始支持 sticky 指令。

文档: https://nginx.org/en/docs/http/ngx_http_upstream_module.html#sticky

Syntax:  sticky cookie name [expires=time] [domain=domain] [httponly] [samesite=strict|lax|none] [secure] [path=path];
         sticky route $variable ...;
         sticky learn create=$variable lookup=$variable zone=name:size [timeout=time] [header] [sync];
Default: —
Context: upstream

开源版有 nginx-sticky-module。

C 语言写的,BSD 协议。
代码看起来并不复杂,如果需要用到的时候,可以进行一个粗略的 Review。

编译

# 下载 nginx 源码 (2016-04-26)
wget http://nginx.org/download/nginx-1.10.0.tar.gz http://nginx.org/download/nginx-1.10.0.tar.gz.asc
gpg --verify nginx-1.10.0.tar.gz.asc

# 下载 nginx-sticky-module (2015-08-06)
wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/1.2.6.zip

unzip 1.2.6.zip
cd nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d/

unzip nginx-1.10.0.zip
cd nginx-1.10.0/

# 其他参数按需添加
./configure --add-module=../nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d/
make && make install

# Configuration summary
#   + using system PCRE library
#   + OpenSSL library is not used
#   + md5: using system crypto library
#   + sha1: using system crypto library
#   + using system zlib library

#   nginx path prefix: "/usr/local/nginx"
#   nginx binary file: "/usr/local/nginx/sbin/nginx"
#   nginx modules path: "/usr/local/nginx/modules"
#   nginx configuration prefix: "/usr/local/nginx/conf"
#   nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
#   nginx pid file: "/usr/local/nginx/logs/nginx.pid"
#   nginx error log file: "/usr/local/nginx/logs/error.log"
#   nginx http access log file: "/usr/local/nginx/logs/access.log"
#   nginx http client request body temporary files: "client_body_temp"
#   nginx http proxy temporary files: "proxy_temp"
#   nginx http fastcgi temporary files: "fastcgi_temp"
#   nginx http uwsgi temporary files: "uwsgi_temp"
#   nginx http scgi temporary files: "scgi_temp"

用法

upstream {
  sticky;
  server 127.0.0.1:9000;
  server 127.0.0.1:9001;
  server 127.0.0.1:9002;
}

sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h]
       [hash=index|md5|sha1] [no_fallback] [secure] [httponly];

#132 血型知识

2016-03-31

ABO 血型系统是根据血小板上的两种抗原——A 抗原和 B 抗原——来区分的:

  • A 型血 :仅携带有 A 抗原
  • B 型血 :仅携带有 B 抗原
  • AB 型血 :同时携带 A 抗原和 B 抗原
  • O 型血 :两种抗原都没有

A 型血的人会消灭 B 抗原,所以不能输 B 型血和 AB 型血,只能输 A 型血和 O 型血;
同理,B 型血的人会消灭 A 抗原,所以不能输 A 型血和 AB 型血,只能输 B 型血和 O 型血;
AB 型血的人自己就两种抗原都有,当然都不消灭,所有血型的血都可以;
相反,O 型血的人两种抗原都没有,哪种都不可接受,所以只能使用 O 型血。

遗传规律表

No 父/母 父/母 子女 子女 子女 子女
1 O O O - - -
2 O A O A - -
3 O B O - B -
4 O AB - A B -
5 A A O A - -
6 A B O A B AB
7 A AB - A B AB
8 B B O - B -
9 B AB - A B AB
10 AB AB - A B AB
  1. 一共 10 种组合:

  2. 生 O 型血子女的组合有 6 种

  3. 生 A 型血子女的组合有 7 种
  4. 生 B 型血子女的组合有 7 种
  5. 生 AB 型血子女的组合有 4 种

  6. AB 型血父母不能生 O 型血子女

  7. O 型血父母不能生 AB 型血子女

#131 转载:“牛”是怎么死的?

2016-03-17

牛耕田回来,躺在栏里,疲惫不堪地喘着粗气,狗跑过来看它。
“唉,老朋友,我实在太累了。”牛诉着苦,“明儿个我真想歇一天。”
狗告别后,在墙角遇到了猫。狗说:“伙计,我刚才去看了牛,这位大哥实在太累了,它说它想歇一天。也难怪,主人给它的活儿太多太重了。”
猫转身对羊说:“牛抱怨主人给它的活儿太多太重,它想歇一天,明天不干活儿了。”