开发工具 SSH
2015-09-12
1. 下载源码包
https://sourceforge.net/projects/sshpass/
2. 安装
tar -xvf sshpass-1.05.tar.gz
cd sshpass-1.05.tar.gz
./config
make && make install
3. 使用
sshpass -p '111111' ssh 192.168.22.2 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
因为首次访问时需要通过 known_keys 检查,一旦未通过就不会继续执行导致后面的命令失败。
最好加上 StrictHostKeyChecking=no 配置。
如果不希望对方的 host key 被记录可以再加上 UserKnownHostsFile=/dev/null。
个人
2015-09-11
对幸福的一点点感悟。
阅读 历史 古文
2015-09-10
公元451年,南北朝时期的宋魏之战,人民活得真是水深火热。
英语
2015-08-31
星期
- mon, monday, 星期一
- tue, tuesday, 星期二
- wed, wednesday, 星期三
- thu, thursday, 星期四
- fri, friday, 星期五
- sat, saturday, 星期六
- sun, sunday, 星期日
月份
- jan, january, 一月
- feb, february, 二月
- mar, march, 三月
- apr, april, 四月
- may, may, 五月
- jun, june, 六月
- jul, july, 七月
- aug, august, 八月
- sep, september, 九月
- oct, october, 十月
- nov, november, 十一月
- dec, december, 十二月
阅读 美文佳句
2015-08-26
话说公元前720年的古希腊奥运会,人类尚未发明正式短裤(注:人类女式内裤的历史迄今不足300年),运动员上场只好扎一个兜裆布。一位唤作奥耳西波的爷,跑着就跑丢了,人们看见他象腰缠钟摆一样,顿时哄堂大笑。但他却坚持到终点,所有的人皆为之感动并从中发现人体巨大的美——从此,古代奥运会皆统一裸体比赛。
现代奥运会却穿上了裤子,而且最初女游泳运动员还必须穿湿重达30磅的连衣裤参赛——这就是所谓文明进化的重负。
20世纪中下叶,似乎全球许多地区皆开始了一场性觉醒运动。比基尼像原子弹一样诞生,我们终于可以坐在电视机前,一边看女子沙滩排球的前仆后滚,一边看她们悄悄从短裤内抠沙的奇妙风景了――这真是人类自娱自乐的一道声色大餐啊!
Python 字符编码
2015-08-25
突然来了兴致,想看看 Unicode 中有多少个中文,查了一下,很多人都是说 4e00 至 9fff 段。
# -*- coding: utf-8 -*-
all_chinese_in_unicode = range(0x4e00, 0x9fff)
def transfer(u_char_num):
if isinstance(u_char_num, int):
u_char_hex = '%x' % u_char_num
u_char_str = '\u' + u_char_hex
else:
if isinstance(u_char_num, str) and len(u_char_num) == 4:
u_char_str = '\u' + u_char_num
else:
raise Exception
u_char = u_char_str.decode('raw_unicode_escape')
# print u_char_hex, u_char
return u_char
def test_transfer():
# repr(u"国") -> u'\u56fd' -> 22269
print transfer(0x56fd)
# 打印所有中文字符
# for i in all_chinese_in_unicode:
# print transfer(i),
# print
# 打印最后一个中文字符及前、后各一个字符
last_chinese_char = 0x9fbb
last_chinese_char_index = all_chinese_in_unicode.index(last_chinese_char)
start, end = last_chinese_char_index - 1, last_chinese_char_index + 2
for i in all_chinese_in_unicode[start:end]:
print transfer(i),
print
Ubuntu 下的 zsh 中运行,只能显示到这个字符:龻,后面的都是乱码,这个字符对应的十六进制数是 9fbb
。
结果又意外发现,最后一个字符似乎不是 9fbb,而是 9fcc(改 URL 一个一个试出来的)。
来源:https://www.fileformat.info/info/unicode/char/9fcc/index.htm
对应文字图片:https://www.fileformat.info/info/unicode/char/9fcc/sample.png
当然,这个来源并不保证权威,也可能有错误,涉及中文字符的范围还是使用 4e00 - 9fff 比较保险。
比如正则表达式:[\u4e00-\u9fff]
。
标点符号
看来是需要抽半天空闲时间,仔细研究研究编码问题了。
参考
个人
2015-08-24
主要是说明一下为什么博客为什么突然中断了,以及现在打算怎么弄。
软件设计 设计模式
2015-08-10
最经典的是 SOLID 五个,但也有说六个、七个的。
SSH 网络代理
2015-07-15
网络代理是一种常见的网络技术,其中 SSH 由于其普遍性,用来代理是最顺手不过的。
助记:
DLR
独立日, 分别对应三种最常见的代理模式 Dynamic, Local, Remote
ProxyPort:DestHost:DestPort User@ProxyHost
比如有三台机器 A, B, C, 其中 A 是本地机器,B 是代理机器,C 是目标机器(注意:A,B,C 可以是同一台机器,或者其中任意两个是同一台机器):
- 在本地机器上建立隧道,代理机器做跳板,将本地端口绑定到目的机器端口:
// A:80 => B => C:80
ssh -L 80:C:80 root@B
// B:80 => C:80
ssh -R 80:C:80 root@B
上面两种都是端口映射模式,应该能够满足所有端口对端口的代理。
最后的 -D
就是动态代理,类似 NAT,将发往指定端口的数据转发到出去。
ssh -D 80 root@B
这个时候,如果设置系统网络代理为 socks5://B:80
,然后本地的所有网络请求都会经过 B 中转,比如我访问 C:80,C 服务器接受到的是来自 B 的访问。
PS: 这个 socks5 要是展开带另起一篇,这里就只需要知道,这种代理的方式有一个专门的名字叫 socks 就行了。
如果在 Windows 上,PuTTY 就是一个很好的 SSH 客户端,也可以从来建立代理,这就不展开讲了。
下次我研究研究 PuTTY,另外再发一篇文章。
Update @ 2021-10-01:
- 有一些 Linux 命令直接支持 socks5 代理,比如 wget, curl。
- 编程时,发起网络请求也可以设置 socks5 代理。
Update @ 2016-09-16:
Update @ 2017-06-09:
DB MySQL 字符编码
2015-05-11
各种类型的编码
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
5.7 及更早版本默认字符集和 Collation 是 latin1 和 latin1_swedish_ci
8.0 之后改成 utf8mb4 和 utf8mb4_0900_ai_ci
上面就有 6 种 全局的编码:
- client 客户端编码
- connection 连接编码
- database 数据库编码,创建表时的默认编码
load data, 以及创建
- filesystem 文件系统编码
- results 结果编码
- server 服务端编码,创建数据库时的默认编码
- system 系统编码
还有两种局部的编码:表的编码和列(字段)的编码。
列主要是 char, varchar, text 类型。
字符集
# 都可以 LIKE 搜索
SHOW CHARACTER SET;
SHOW CHARSET;
SHOW CHAR SET;
Charset |
Description |
Default collation |
Maxlen |
armscii8 |
ARMSCII-8 Armenian |
armscii8_general_ci |
1 |
ascii |
US ASCII |
ascii_general_ci |
1 |
big5 |
Big5 Traditional Chinese |
big5_chinese_ci |
2 |
binary |
Binary pseudo charset |
binary |
1 |
cp1250 |
Windows Central European |
cp1250_general_ci |
1 |
cp1251 |
Windows Cyrillic |
cp1251_general_ci |
1 |
cp1256 |
Windows Arabic |
cp1256_general_ci |
1 |
cp1257 |
Windows Baltic |
cp1257_general_ci |
1 |
cp850 |
DOS West European |
cp850_general_ci |
1 |
cp852 |
DOS Central European |
cp852_general_ci |
1 |
cp866 |
DOS Russian |
cp866_general_ci |
1 |
cp932 |
SJIS for Windows Japanese |
cp932_japanese_ci |
2 |
dec8 |
DEC West European |
dec8_swedish_ci |
1 |
eucjpms |
UJIS for Windows Japanese |
eucjpms_japanese_ci |
3 |
euckr |
EUC-KR Korean |
euckr_korean_ci |
2 |
gb18030 |
China National Standard GB18030 |
gb18030_chinese_ci |
4 |
gb2312 |
GB2312 Simplified Chinese |
gb2312_chinese_ci |
2 |
gbk |
GBK Simplified Chinese |
gbk_chinese_ci |
2 |
geostd8 |
GEOSTD8 Georgian |
geostd8_general_ci |
1 |
greek |
ISO 8859-7 Greek |
greek_general_ci |
1 |
hebrew |
ISO 8859-8 Hebrew |
hebrew_general_ci |
1 |
hp8 |
HP West European |
hp8_english_ci |
1 |
keybcs2 |
DOS Kamenicky Czech-Slovak |
keybcs2_general_ci |
1 |
koi8r |
KOI8-R Relcom Russian |
koi8r_general_ci |
1 |
koi8u |
KOI8-U Ukrainian |
koi8u_general_ci |
1 |
latin1 |
cp1252 West European |
latin1_swedish_ci |
1 |
latin2 |
ISO 8859-2 Central European |
latin2_general_ci |
1 |
latin5 |
ISO 8859-9 Turkish |
latin5_turkish_ci |
1 |
latin7 |
ISO 8859-13 Baltic |
latin7_general_ci |
1 |
macce |
Mac Central European |
macce_general_ci |
1 |
macroman |
Mac West European |
macroman_general_ci |
1 |
sjis |
Shift-JIS Japanese |
sjis_japanese_ci |
2 |
swe7 |
7bit Swedish |
swe7_swedish_ci |
1 |
tis620 |
TIS620 Thai |
tis620_thai_ci |
1 |
ucs2 |
UCS-2 Unicode |
ucs2_general_ci |
2 |
ujis |
EUC-JP Japanese |
ujis_japanese_ci |
3 |
utf16 |
UTF-16 Unicode |
utf16_general_ci |
4 |
utf16le |
UTF-16LE Unicode |
utf16le_general_ci |
4 |
utf32 |
UTF-32 Unicode |
utf32_general_ci |
4 |
utf8mb3 |
UTF-8 Unicode |
utf8mb3_general_ci |
3 |
utf8mb4 |
UTF-8 Unicode |
utf8mb4_0900_ai_ci |
4 |
SELECT * FROM information_schema.character_sets;
SELECT * FROM information_schema.character_sets WHERE CHARACTER_SET_NAME LIKE "%utf%";
CHARACTER_SET_NAME |
DEFAULT_COLLATE_NAME |
DESCRIPTION |
MAXLEN |
utf8mb3 |
utf8mb3_general_ci |
UTF-8 Unicode |
3 |
utf16 |
utf16_general_ci |
UTF-16 Unicode |
4 |
utf16le |
utf16le_general_ci |
UTF-16LE Unicode |
4 |
utf32 |
utf32_general_ci |
UTF-32 Unicode |
4 |
utf8mb4 |
utf8mb4_0900_ai_ci |
UTF-8 Unicode |
4 |
排序规则
SHOW COLLATION;
这就多了,两百多。
SHOW COLLATION LIKE "%ascii%";
Collation |
Charset |
Id |
Default |
Compiled |
Sortlen |
Pad_attribute |
ascii_bin |
ascii |
65 |
|
Yes |
1 |
PAD SPACE |
ascii_general_ci |
ascii |
11 |
Yes |
Yes |
1 |
PAD SPACE |
SELECT * FROM information_schema.collations WHERE CHARACTER_SET_NAME = "utf8mb4" AND COLLATION_NAME LIKE "%zh%";
COLLATION_NAME |
CHARACTER_SET_NAME |
ID |
IS_DEFAULT |
IS_COMPILED |
SORTLEN |
PAD_ATTRIBUTE |
utf8mb4_zh_0900_as_cs |
utf8mb4 |
308 |
|
Yes |
0 |
NO PAD |
命名规则
字符集名称,语言,通用后缀
ai
Accent-insensitive 重音不敏感
as
Accent-sensitive 重音敏感
ci
Case-insensitive 大小写不敏感
cs
Case-sensitive 大小写敏感
ks
Kana-sensitive 假名敏感(日语)
bin
二进制
8.0 之后,很多编码中多了 0900 字样,表示 Unicode 9.0 规范。
参考资料与拓展阅读